日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断某个月的每一天是否为工作日

發布時間:2024/3/26 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断某个月的每一天是否为工作日 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一?前端

<template><div class="app-container"><el-form label-width="120px"><el-form-item label="分配日期"><el-date-pickerv-model="taskDistributionVo.date"type="month"placeholder="選擇日期"format="yyyy 年 MM 月 dd 日"value-format="yyyy-MM"></el-date-picker></el-form-item><el-form-item label="醫院次數"><el-input v-model="taskDistributionVo.count1" /></el-form-item><el-form-item label="公司次數"><el-input v-model="taskDistributionVo.count2" /></el-form-item><el-form-item label="藥房次數"><el-input v-model="taskDistributionVo.count3" /></el-form-item><el-form-item><el-button type="primary" @click="taskDistribution">任務分配</el-button></el-form-item></el-form></div> </template><script> // 引入接口定義的 js 文件 import taskDistribution from "@/api/taskDistribution"; export default {data() {return {taskDistributionVo: {}};},methods: {// 添加taskDistribution() {taskDistribution.taskDistribution(this.taskDistributionVo).then(response => {// 提示this.$message({type: "success",message: "任務分配成功!"});this.taskDistributionVo = {};});}} }; </script>

二?后端

1?get 和 post?請求工具類

package com.baiyee.sdgt.common.utils;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map;/** * @className: HttpRequest * @description: get 和 post請求 參考 https://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html * @date: 2021/10/19 * @author: cakin */ public class HttpRequest {/*** 向指定URL發送 GET方法的請求** @param url 發送請求的URL* @param param 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。* @return URL 所代表遠程資源的響應結果*/public static String sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打開和URL之間的連接URLConnection connection = realUrl.openConnection();// 設置通用的請求屬性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立實際的連接connection.connect();// 獲取所有響應頭字段Map<String, List<String>> map = connection.getHeaderFields();// 遍歷所有的響應頭字段 // for (String key : map.keySet()) { // System.out.println(key + "--->" + map.get(key)); // }// 定義 BufferedReader輸入流來讀取URL的響應in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("發送GET請求出現異常!" + e);e.printStackTrace();}// 使用finally塊來關閉輸入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定 URL 發送 POST方法的請求** @param url 發送請求的 URL* @param param 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。* @return 所代表遠程資源的響應結果*/public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打開和URL之間的連接URLConnection conn = realUrl.openConnection();// 設置通用的請求屬性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 發送POST請求必須設置如下兩行conn.setDoOutput(true);conn.setDoInput(true);// 獲取URLConnection對象對應的輸出流out = new PrintWriter(conn.getOutputStream());// 發送請求參數out.print(param);// flush輸出流的緩沖out.flush();// 定義BufferedReader輸入流來讀取URL的響應in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("發送 POST 請求出現異常!" + e);e.printStackTrace();}// 使用finally塊來關閉輸出流、輸入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;} }

2?節假日判斷工具類

package com.baiyee.sdgt.common.utils;import com.alibaba.fastjson.JSONObject;import java.text.SimpleDateFormat;import java.text.ParseException; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List;/** * @className: ChineseCalendarUtils * @description: 中國節假日工具類 * @date: 2021/10/19 * @author: cakin */ public class ChineseCalendarUtils {// 法律規定的放假日期// 此處寫死了,政府每年都會在12月份左右公布,無法提前預知private List lawHolidays = Arrays.asList("2017-12-30", "2017-12-31","2018-01-01", "2018-02-15", "2018-02-16", "2018-02-17", "2018-02-18","2018-02-19", "2018-02-20", "2018-02-21", "2018-04-05", "2018-04-06","2018-04-07", "2018-04-29", "2018-04-30", "2018-05-01", "2018-06-16","2018-06-17", "2018-06-18", "2018-09-22", "2018-09-23", "2018-09-24","2018-10-01", "2018-10-02", "2018-10-03", "2018-10-04", "2018-10-05","2018-10-06", "2018-10-07");// 放假需要額外工作的周末private List extraWorkdays = Arrays.asList("2018-02-11", "2018-02-24","2018-04-08", "2018-04-28", "2018-09-29", "2018-09-30");/*** 功能描述:判斷是否是法定假日** @param calendar 日期字符串* @return boolean true:法定節日 false:非法定節日* @author cakin* @date 2021/10/19*/public boolean isLawHoliday(String calendar) throws Exception {ChineseCalendarUtils.isValidDate(calendar);if (lawHolidays.contains(calendar)) {return true;}return false;}/*** 功能描述:判斷是否是周末** @param calendar 日期字符串* @return true:是周日 false:不是周日* @author cakin* @date 2021/10/19*/public boolean isWeekends(String calendar) throws Exception {ChineseCalendarUtils.isValidDate(calendar);// 先將字符串類型的日期轉換為Calendar類型SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(calendar);Calendar ca = Calendar.getInstance();ca.setTime(date);if (ca.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY|| ca.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {return true;}return false;}/*** 功能描述:判斷是否是需要額外工作的周末** @param calendar 日期字符串* @return true:需要工作 false:不需要工作* @author cakin* @date 2021/10/19*/public boolean isExtraWorkday(String calendar) throws Exception {ChineseCalendarUtils.isValidDate(calendar);if (extraWorkdays.contains(calendar)) {return true;}return false;}/*** 功能描述:判斷是否是休息日(包含法定節假日和不需要補班的周末)** @param calendar 日期字符串* @return true:是休息日 false:不是休息日* @author cakin* @date 2021/10/19*/public boolean isHoliday(String calendar) throws Exception {ChineseCalendarUtils.isValidDate(calendar);// 首先法定節假日必定是休息日if (this.isLawHoliday(calendar)) {return true;}// 排除法定節假日外的非周末必定是工作日if (!this.isWeekends(calendar)) {return false;}// 所有周末中只有非補班的才是休息日if (this.isExtraWorkday(calendar)) {return false;}return true;}/*** 功能描述:校驗字符串是否為指定的日期格式, 含邏輯嚴格校驗, 2007/02/30返回false** @param str 時間字符串* @return true:有效 false:無效* @author cakin* @date 2021/10/19*/public static boolean isValidDate(String str) {boolean convertSuccess = true;// 指定日期格式為四位年/兩位月份/兩位日期,注意yyyy-MM-dd區分大小寫SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");try {// 設置lenient為false.// 否則SimpleDateFormat會比較寬松地驗證日期,比如2007/02/29會被接受,并轉換成2007/03/01format.setLenient(false);format.parse(str);} catch (ParseException e) {convertSuccess = false;}return convertSuccess;}/*** 功能描述:功能描述:通過 api 判斷是否為工作日** @param calendar 日期字符串* @return @return true:是工作日 false:不是工作日* @author cakin* @date 2021/10/19* @description: 參考 https://blog.csdn.net/jiangzhongwei_/article/details/118059260*/public static boolean isWorkday(String calendar) {String httpUrl = "http://timor.tech/api/holiday/info/" + calendar;String s = HttpRequest.sendGet(httpUrl, "");try {JSONObject obj = JSONObject.parseObject(s);Integer code = obj.getInteger("code");if (null != code && 0 == code.intValue()) {Integer dayType = obj.getJSONObject("type").getInteger("type");return 0 == dayType.intValue();}} catch (Exception e) {System.out.println("網絡錯誤");}return true;} }

3?業務層

package com.baiyee.sdgt.obj.service.impl;import com.baiyee.sdgt.common.utils.ChineseCalendarUtils; import com.baiyee.sdgt.model.obj.*; import com.baiyee.sdgt.obj.mapper.TaskMapper; import com.baiyee.sdgt.obj.service.CompanyService; import com.baiyee.sdgt.obj.service.HospitalService; import com.baiyee.sdgt.obj.service.PharmacyService; import com.baiyee.sdgt.obj.service.TaskService; import com.baiyee.sdgt.vo.obj.TaskDistributionVo; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*;/** * @className: TaskServiceImpl * @description: 任務實現類 * @date: 2021/10/4 * @author: cakin */ @Service public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {@Autowiredprivate HospitalService hospitalService;@Autowiredprivate CompanyService companyService;@Autowiredprivate PharmacyService pharmacyService;/*** @className: TaskService* @description: 任務分配* @date: 2021/10/17* @author: cakin*/@Overridepublic void distributeTask(TaskDistributionVo taskDistributionVo) {List<Task> taskList = new ArrayList<>();// 清空任務this.getBaseMapper().clearTask();// 初始化任務initTask(taskDistributionVo, taskList);this.saveBatch(taskList);// 按照省、市、區排序QueryWrapper<Task> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("PROVINCE", "CITY", "DISTRICT", "COUNT");List<Task> tasks = this.getBaseMapper().selectList(queryWrapper);List<Segment> segments = new ArrayList<>();// 初始化分段initSegment(tasks, segments);// 依據 maxCount 對 segments 降序Collections.sort(segments);List<Task> taskAfterSortList = new ArrayList<>();// 對 tasks 進行重排,重排結果保存到 taskAfterSortListreSortTask(tasks, segments, taskAfterSortList);// 重排后System.out.println("重排后的結果:");for (Task task : taskAfterSortList) {System.out.println(task);}// 獲得年份String year = taskDistributionVo.getDate().substring(0, 4);// 獲得月份String month = taskDistributionVo.getDate().substring(5, 7);Calendar currentDate = Calendar.getInstance();// 設置開始掃描時間currentDate.set(Integer.parseInt(year), Integer.parseInt(month) - 1, 1);// 任務月份int taskMonth = currentDate.get(Calendar.MONTH);while (true) {// 日期字符串表示String calendar = currentDate.get(Calendar.YEAR) + "-" + (currentDate.get(Calendar.MONTH) + 1) + "-" + currentDate.get(Calendar.DATE);ChineseCalendarUtils cc = new ChineseCalendarUtils();System.out.println(calendar + "是否是工作日:" + cc.isWorkday(calendar));// 日期加1天currentDate.add(Calendar.DATE, 1);// 跨月if (taskMonth != currentDate.get(Calendar.MONTH)) {break;}}}/*** 功能描述:對 tasks 進行重排** @param tasks 待排序任務* @return segments 排序分段* @author cakin* @date 2021/10/18*/private void reSortTask(List<Task> tasks, List<Segment> segments, List<Task> taskAfterSortList) {for (Segment segment : segments) {int from = segment.getFrom();int end = segment.getEnd();for (int i = from; i <= end; i++) {taskAfterSortList.add(tasks.get(i));}}}/*** 功能描述:初始化分段** @param tasks 待重排的任務* @param segments 排序分段* @author cakin* @date 2021/10/18*/private void initSegment(List<Task> tasks, List<Segment> segments) {for (int i = 0; i < tasks.size(); i++) {int headIndex = i;int tailIndex = i + 1;Task tasktHead = tasks.get(headIndex);if (tailIndex == tasks.size()) {Segment segment = new Segment();segment.setFrom(headIndex);segment.setEnd(headIndex);segment.setMaxCount(tasks.get(headIndex).getCount());segments.add(segment);break;}while (true) {Task taskTail;if (tailIndex != tasks.size()) {taskTail = tasks.get(tailIndex);if (!tasktHead.getDistrict().equals(taskTail.getDistrict())) {Segment segment = new Segment();segment.setFrom(headIndex);segment.setEnd(tailIndex - 1);segment.setMaxCount(tasks.get(headIndex).getCount());segments.add(segment);i = tailIndex - 1;break;}} else {Segment segment = new Segment();segment.setFrom(headIndex);segment.setEnd(tasks.size() - 1);segment.setMaxCount(tasks.get(headIndex).getCount());segments.add(segment);i = tasks.size() - 1;break;}tailIndex++;}}}/*** 功能描述:初始化任務列表** @param taskDistributionVo 前端傳過來的任務* @param taskList 分解后的任務* @author 貝醫* @date 2021/10/18*/private void initTask(TaskDistributionVo taskDistributionVo, List<Task> taskList) {// 醫院拜訪次數int count1 = taskDistributionVo.getCount1();List<Hospital> hospitalList = hospitalService.list();// 平均每一個醫院拜訪次數int avgHospitalCount = count1 / hospitalList.size();int plusHospitalCount = count1 % hospitalList.size();for (Hospital hospital : hospitalList) {Task task = new Task();task.setName(hospital.getName());task.setProvince(hospital.getProvince());task.setCity(hospital.getCity());task.setDistrict(hospital.getDistrict());task.setType(1);if (plusHospitalCount > 0) {task.setCount(avgHospitalCount + 1);plusHospitalCount--;} else {task.setCount(avgHospitalCount);}taskList.add(task);}// 公司拜訪次數int count2 = taskDistributionVo.getCount2();List<Company> companyList = companyService.list();// 平均每一個公司拜訪次數int avgCompanyCount = count2 / companyList.size();int plusCompanyCount = count2 % companyList.size();for (Company company : companyList) {Task task = new Task();task.setName(company.getName());task.setProvince(company.getProvince());task.setCity(company.getCity());task.setDistrict(company.getDistrict());task.setType(2);if (plusCompanyCount > 0) {task.setCount(avgCompanyCount + 1);plusCompanyCount--;} else {task.setCount(avgCompanyCount);}taskList.add(task);}// 藥房拜訪次數int count3 = taskDistributionVo.getCount3();List<Pharmacy> pharmacyList = pharmacyService.list();// 平均每一個藥房拜訪次數int avgPharmacyCount = count3 / pharmacyList.size();int plusPharmacyCount = count3 % pharmacyList.size();for (Pharmacy pharmacy : pharmacyList) {Task task = new Task();task.setName(pharmacy.getName());task.setProvince(pharmacy.getProvince());task.setCity(pharmacy.getCity());task.setDistrict(pharmacy.getDistrict());task.setType(3);if (plusPharmacyCount > 0) {task.setCount(avgPharmacyCount + 1);plusPharmacyCount--;} else {task.setCount(avgPharmacyCount);}taskList.add(task);}} }

三?測試

1?前端頁面輸入

2?測試輸出結果(2021年10月的工作日只有16天)

?

總結

以上是生活随笔為你收集整理的判断某个月的每一天是否为工作日的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。