Преглед на файлове

获取工作日的天数接口修改。请假和出差增加原始钉钉审批实例id

seyason преди 3 години
родител
ревизия
9cf79ce876

+ 30 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -28,6 +28,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -1120,7 +1121,35 @@ public class ReportController {
     @RequestMapping("/getWorkDays")
     public HttpRespMsg getWorkDays(String startDate, String endDate) {
         HttpRespMsg msg = new HttpRespMsg();
-        msg.data = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate);
+        String token = request.getHeader("TOKEN");
+        if (token == null) {
+            //
+            msg.setError("请求非法");
+            System.err.println("==有非法请求==="+startDate);
+        } else {
+            User byId = userService.getById(token);
+            System.out.println("getWorkDays用户是="+byId.getName()+"=="+byId.getId()+", "+startDate+"-"+endDate);
+            LocalDate now = LocalDate.now();
+            now = now.plusMonths(1);
+            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            if (startDate.compareTo("2020-01-01") < 0 || endDate.compareTo(dtf.format(now)) > 0) {
+                msg.setError("日期不得早于2020-01-01或者超过当前一个月");
+            } else if (startDate.compareTo(endDate) > 0) {
+                msg.setError("开始日期不能大于结束日期");
+            } else {
+                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
+                LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
+                //时间间隔不得超过365天
+                long until = localStartDate.until(localEndDate, ChronoUnit.DAYS);
+                if (until > 365) {
+                    msg.setError("日期间隔不得超过365天");
+                } else {
+                    msg.data = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate);
+                }
+            }
+        }
+
         return msg;
     }
 

+ 76 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -976,6 +976,82 @@ public class WeiXinCorpController {
         return msg;
     }
 
+    //老版本
+//    @RequestMapping("/getCorpMembs")
+//    public HttpRespMsg getCorpMembs(String corpId) {
+//
+//        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+//
+//        Company company = companyMapper.selectById(wxCorpInfo.getCompanyId());
+//        String curCorpAccessToken = null;
+//        try {
+//            curCorpAccessToken = getCorpAccessToken(wxCorpInfo);
+//        } catch (Exception exception) {
+//            exception.printStackTrace();
+//        }
+//        int companyId = company.getId();
+//        //获取公司根部门人员,也就是没有分配部门的人员
+//        int companyRootDeptId = 1;
+//        JSONArray unAssignedUserList = getDeptUserSimple(curCorpAccessToken, companyRootDeptId);
+//        SysRole defaultRole = sysRoleMapper.selectOne(
+//                new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
+//
+//        for (int m=0;m<unAssignedUserList.size(); m++) {
+//            JSONObject userJson = unAssignedUserList.getJSONObject(m);
+//            String curUserid = userJson.getString("userid");
+//            System.out.println("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
+//            //不存在的人员, 进行插入
+//            User user = new User();
+//
+//            user.setId(SnowFlake.nextId()+"")
+//                    .setRoleId(defaultRole.getId())//默认普通员工
+//                    .setRoleName(defaultRole.getRolename())
+//                    .setCompanyId(companyId)
+//                    .setName(userJson.getString("name"))
+//                    .setCorpwxUserid(curUserid)
+//                    .setColor(ColorUtil.randomColor());
+//
+//            //检查用户是否已经存在
+//            if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid)) == 0) {
+//                userMapper.insert(user);
+//            }
+//        }
+//
+//        //获取部门
+//        JSONObject deptObj = getAllDepartments(curCorpAccessToken);
+//        JSONArray deptObjJSONArray = deptObj.getJSONArray("department");
+//
+//        for (int i=0;i<deptObjJSONArray.size(); i++) {
+//            int deptId = deptObjJSONArray.getJSONObject(i).getIntValue("id");
+//
+//            JSONArray userList = getDeptUserSimple(curCorpAccessToken, deptId);
+//            for (int m=0;m<userList.size(); m++) {
+//                JSONObject userJson = userList.getJSONObject(m);
+//                String curUserid = userJson.getString("userid");
+//                System.out.println("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
+//                //不存在的人员, 进行插入
+//                User user = new User();
+//
+//                user.setId(SnowFlake.nextId()+"")
+//                        .setRoleId(defaultRole.getId())//默认普通员工
+//                        .setRoleName(defaultRole.getRolename())
+//                        .setCompanyId(companyId)
+//                        .setDepartmentId(0)
+//                        .setName(userJson.getString("name"))
+//                        .setCorpwxUserid(curUserid)
+//                        .setColor(ColorUtil.randomColor());
+//
+//                //检查用户是否已经存在
+//                if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid)) == 0) {
+//                    userMapper.insert(user);
+//                }
+//            }
+//        }
+//
+//        return new HttpRespMsg();
+//    }
+
+    //新版本
     @RequestMapping("/getCorpMembs")
     public HttpRespMsg getCorpMembs(String corpId) {
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/BusinessTrip.java

@@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-05-17
+ * @since 2022-07-03
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -139,6 +139,12 @@ public class BusinessTrip extends Model<BusinessTrip> {
     @TableField("is_linked")
     private Integer isLinked;
 
+    /**
+     * 钉钉审批实例procInst_id
+     */
+    @TableField("procinst_id")
+    private String procinstId;
+
 
     @Override
     protected Serializable pkVal() {

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheet.java

@@ -20,7 +20,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-04-21
+ * @since 2022-07-03
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -152,6 +152,12 @@ public class LeaveSheet extends Model<LeaveSheet> {
 
     @TableField(exist = false)
     private String dept;
+    /**
+     * 钉钉审批实例procInst_id
+     */
+    @TableField("procinst_id")
+    private String procinstId;
+
 
     @Override
     protected Serializable pkVal() {

+ 26 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -1177,11 +1177,19 @@ public class DingDingServiceImpl implements DingDingService {
                             Long cha = trip.getEndDate().toEpochDay() - trip.getStartDate().toEpochDay() + 1;
                             trip.setDayCount(Integer.parseInt(cha.toString()));
                             trip.setStatus(0);
-                            int cnt = businessTripMapper.selectCount(new QueryWrapper<BusinessTrip>().eq("owner_id", user.getId())
-                                    .eq("start_date", trip.getStartDate())
-                                    .eq("end_date", trip.getEndDate()));
-                            if (cnt == 0) {
-                                businessTripMapper.insert(trip);
+                            trip.setProcinstId(item.getString("procInst_id"));
+                            //检查是否已经存在同一个审批单,有的话就是更新出差记录
+                            BusinessTrip oldTrip = businessTripMapper.selectOne(new QueryWrapper<BusinessTrip>().eq("company_id", trip.getCompanyId()).eq("procinst_id", trip.getProcinstId()));
+                            if (oldTrip != null) {
+                                trip.setId(oldTrip.getId());
+                                businessTripMapper.updateById(trip);
+                            } else {
+                                int cnt = businessTripMapper.selectCount(new QueryWrapper<BusinessTrip>().eq("owner_id", user.getId())
+                                        .eq("start_date", trip.getStartDate())
+                                        .eq("end_date", trip.getEndDate()));
+                                if (cnt == 0) {
+                                    businessTripMapper.insert(trip);
+                                }
                             }
                         } else if ("请假".equals(tagName)) {
                             LeaveSheet sheet = new LeaveSheet();
@@ -1193,6 +1201,7 @@ public class DingDingServiceImpl implements DingDingService {
                             sheet.setTimeDays((float)cha);
                             sheet.setCompanyId(dingding.getCompanyId());
                             sheet.setStatus(0);
+                            sheet.setProcinstId(item.getString("procInst_id"));
                             String dLeaveType = item.getString("sub_type");
                             if (!dLeaveType.endsWith("假")) dLeaveType = dLeaveType + "假";
                             int leaveTypeIndex = -1;
@@ -1206,11 +1215,18 @@ public class DingDingServiceImpl implements DingDingService {
                                 leaveTypeIndex = Constant.LEAVE_TYPES.length-1;
                             }
                             sheet.setLeaveType(leaveTypeIndex);
-                            int cnt = leaveSheetMapper.selectCount(new QueryWrapper<LeaveSheet>().eq("owner_id", user.getId())
-                                    .eq("start_date", sheet.getStartDate())
-                                    .eq("end_date", sheet.getEndDate()));
-                            if (cnt == 0) {
-                                leaveSheetMapper.insert(sheet);
+                            //检查是否已经有同一个请假申请,有的话就是更新
+                            LeaveSheet oldSheet = leaveSheetMapper.selectOne(new QueryWrapper<LeaveSheet>().eq("company_id", sheet.getCompanyId()).eq("procinst_id", sheet.getProcinstId()));
+                            if (oldSheet != null) {
+                                sheet.setId(oldSheet.getId());
+                                leaveSheetMapper.updateById(sheet);
+                            } else {
+                                int cnt = leaveSheetMapper.selectCount(new QueryWrapper<LeaveSheet>().eq("owner_id", user.getId())
+                                        .eq("start_date", sheet.getStartDate())
+                                        .eq("end_date", sheet.getEndDate()));
+                                if (cnt == 0) {
+                                    leaveSheetMapper.insert(sheet);
+                                }
                             }
                         }
                     }

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/WorkDayCalculateUtils.java

@@ -127,6 +127,9 @@ public class WorkDayCalculateUtils {
      */
     public static int getWorkDaysCountInRange(String startDate, String endDate) {
         int daysOffset = 0;
+        if (startDate.compareTo(endDate) > 0) {
+            return -1;
+        }
         LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
         LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
         int count = 0;

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/BusinessTripMapper.xml

@@ -21,6 +21,7 @@
         <result column="deny_reason" property="denyReason" />
         <result column="indate" property="indate" />
         <result column="is_linked" property="isLinked" />
+        <result column="procinst_id" property="procinstId" />
     </resultMap>
     <resultMap id="BaseResultMap1" type="com.management.platform.entity.BusinessTrip">
         <result column="owner_id" property="ownerId" />
@@ -30,9 +31,8 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, owner_id, owner_name, reason, start_date, end_date, way, city_from, city_to, go_back, day_count, remark, status, deny_reason, indate, is_linked
+        id, company_id, owner_id, owner_name, reason, start_date, end_date, way, city_from, city_to, go_back, day_count, remark, status, deny_reason, indate, is_linked, procinst_id
     </sql>
-
     <select id="summaryData"  resultMap="BaseResultMap1">
         select owner_id, owner_name, sum(day_count) as day_count, department.department_name as department_name from business_trip
         left join user on user.id = business_trip.owner_id

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml

@@ -24,11 +24,12 @@
         <result column="audit_deptid" property="auditDeptid" />
         <result column="is_final_audit" property="isFinalAudit" />
         <result column="auditor_type" property="auditorType" />
+        <result column="procinst_id" property="procinstId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel, auditor_id, auditor_name, audit_deptid, is_final_audit, auditor_type
+        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel, auditor_id, auditor_name, audit_deptid, is_final_audit, auditor_type, procinst_id
     </sql>
     <select id="summaryData"  resultMap="BaseResultMap">
         select owner_id, owner_name, sum(time_hours) as time_hours, sum(time_days) as time_days from leave_sheet

+ 9 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -247,8 +247,8 @@
                     <el-date-picker v-model="workForm.createDate" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
                     :style="'width:'+(isBatch==0?'200':'280')+'px;'" :type="isBatch==0?'date':'daterange'"
                     @change="changeMonth()" @blur="iptBlur(reportTimeType.type)" :clearable="false" placeholder="选择工作日期" :disabled="isDisable"></el-date-picker>
-                    <div v-if="falsss" style="display: inline-block;">总{{jsDay}} 天, 共{{jsTime}} 小时</div>
-                    <div v-if="isBatch!=0" style="display: inline-block;">总{{jsDay}} 天, 共{{jsTime}} 小时</div>
+                    <div v-if="falsss" style="display: inline-block;">共{{jsDay}} 天, {{jsTime}} 小时</div>
+                    <div v-if="isBatch!=0" style="display: inline-block;">共{{jsDay}} 天, 合计填报 {{jsTime}} 小时</div>
                     <span v-if="reportTimeType.type == 3" style="margin-left:30px;">{{isBatch==0?'总':'每日'}}时长:</span>
                     <el-input-number :disabled="!canEdit || user.timeType.lockWorktime" v-if="reportTimeType.type == 3" style="margin-left:10px;" @change="changeAllTime"
                         v-model="reportTimeType.allday" :precision="1" :step="0.5" :max="12" :min="0.5"></el-input-number>
@@ -1842,7 +1842,13 @@
                     if (res.code == "ok") {
                         this.jsDay = res.data
                         this.chuji(i)
-                    } 
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                        this.workForm.createDate = [];
+                    }
                 },
                 error => {
                     this.$message({