Explorar o código

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

Lijy %!s(int64=2) %!d(string=hai) anos
pai
achega
bbc1a9ea13

+ 62 - 31
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -1466,8 +1466,38 @@ public class WeiXinCorpController {
         //默认普通员工的角色
         //获取公司根部门人员,也就是没有分配部门的人员
         int companyRootDeptId = 1;
+        JSONArray allCorpWxUserJsonArray = getDeptUserInfo(curCorpAccessToken, companyRootDeptId);
+        System.out.println("获取到公司下的员工数量="+allCorpWxUserJsonArray.size());
         SysRole defaultRole = sysRoleMapper.selectOne(
                 new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
+        List<User> allCorpWxUserList = new ArrayList<>();
+        for (int m=0;m<allCorpWxUserJsonArray.size(); m++) {
+            JSONObject userJson = allCorpWxUserJsonArray.getJSONObject(m);
+            String curUserid = userJson.getString("userid");
+            //跳过非激活状态的员工
+            if (userJson.getInteger("status") != 1) continue;
+            //不存在的人员, 进行插入
+            User user = new User();
+            JSONArray userDeptArray = userJson.getJSONArray("department");
+            //取最末级的,也就是最大的deptId
+            int maxDeptId = 1;
+            for (int i=0;i<userDeptArray.size(); i++) {
+                int curId = userDeptArray.getInteger(i);
+                if (curId > maxDeptId) maxDeptId = curId;
+            }
+            user.setId(SnowFlake.nextId()+"")
+                    .setRoleId(defaultRole.getId())//默认普通员工
+                    .setRoleName(defaultRole.getRolename())
+                    .setCompanyId(companyId)
+                    .setName(userJson.getString("name"))
+                    .setPhone(userJson.getString("mobile"))
+                    .setCorpwxUserid(curUserid)
+                    .setColor(ColorUtil.randomColor())
+                    .setJobNumber(curUserid)
+                    .setCorpwxDeptid(maxDeptId);
+            System.out.println("姓名=="+user.getName());
+            allCorpWxUserList.add(user);
+        }
 
         //获取部门
         JSONObject deptObj = getAllDepartments(curCorpAccessToken);
@@ -1495,46 +1525,47 @@ public class WeiXinCorpController {
                         //有父部门需要更新
                         curDept.setCorpwxDeptpid(parentId);
                         departmentMapper.updateById(curDept);
-                    }
-                }
-            }
-
-            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(deptId == companyRootDeptId?null:curDept.getDepartmentId())
-                        .setName(userJson.getString("name"))
-                        .setCorpwxUserid(curUserid)
-                        .setColor(ColorUtil.randomColor())
-                        .setJobNumber(curUserid);
 
-                //检查用户是否已经存在
-                if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId)) == 0) {
-                    userMapper.insert(user);
-                } else {
-                    //更新信息
-                    System.out.println("更新人员信息== 部门id=="+curDept.getDepartmentId());
-                    User oldUser = userMapper.selectList(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId)).get(0);
-                    oldUser.setName(userJson.getString("name"));
-                    oldUser.setDepartmentId(curDept.getDepartmentId());
-                    userMapper.updateById(oldUser);
+                    }
                 }
             }
         }
         //更新部门层级关系
         updateDeptHierachyByCorpWx(companyId);
+
+        //设置人员所属部门
+        List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+        List<User> existingUsers = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        List<User> newUserList = allCorpWxUserList.stream().filter(newItem -> !existingUsers.stream().anyMatch(existingItem -> newItem.getCorpwxUserid().equals(existingItem.getCorpwxUserid()))).collect(Collectors.toList());
+        newUserList.forEach(newItem->{
+            if (newItem.getCorpwxDeptid() != 1) {
+                int deptId = allDeptList.stream().filter(all->all.getCorpwxDeptid().equals(newItem.getCorpwxDeptid())).findFirst().get().getDepartmentId();
+                newItem.setDepartmentId(deptId);
+                newItem.setDepartmentCascade(convertDepartmentIdToCascade(deptId, allDeptList));
+            }
+        });
+        userService.saveBatch(newUserList);
+        List<User> updateUserList = allCorpWxUserList.stream().filter(newItem->existingUsers.stream().anyMatch(existingItem->newItem.getCorpwxUserid().equals(existingItem.getCorpwxUserid())
+                                            && (!newItem.getName().equals(existingItem.getName()) || (newItem.getCorpwxDeptid() != null && !newItem.getCorpwxDeptid().equals(existingItem.getCorpwxDeptid()))))).collect(Collectors.toList());
+        List<Integer> corpWxDeptIds = updateUserList.stream().map(User::getCorpwxDeptid).collect(Collectors.toList());
+
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId).in("corpwx_deptid", corpWxDeptIds));
+        updateUserList.forEach(u->{
+            if (u.getCorpwxDeptid() != 1) {
+                u.setDepartmentId(departmentList.stream().filter(d->d.getCorpwxDeptid().equals(u.getCorpwxDeptid())).findFirst().get().getDepartmentId());
+                //设置层级部门
+                u.setDepartmentCascade(convertDepartmentIdToCascade(u.getDepartmentId(), allDeptList));
+            } else {
+                u.setDepartmentId(0);
+                u.setDepartmentCascade("0");
+            }
+
+        });
+
         return new HttpRespMsg();
     }
 
+
     //新版本, 由于是第三方服务商,需要先获取授权范围内的组织架构(没有部门和人员的名称),再从中转服务器去获取名称
     @RequestMapping("/getCorpMembs")
     public HttpRespMsg getCorpMembs(String corpId, @RequestParam(required = false, defaultValue = "1") Integer syncMembs) {

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java

@@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-08-09
+ * @since 2022-09-28
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -236,6 +236,13 @@ public class User extends Model<User> {
     @TableField(exist = false)
     private Integer userNameNeedTranslate = 0;
 
+    /**
+     * 员工在企业微信中的部门id
+     */
+    @TableField("corpwx_deptid")
+    private Integer corpwxDeptid;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 22 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -314,6 +314,28 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                 BigDecimal bigDecimal = new BigDecimal(0);
                 List<ExpenseItem> expenseItemList = new ArrayList<>();
                 int i=0;
+                String errorAboutProject="";
+                for (int rowIndex = 5; rowIndex <= rowNum; rowIndex++) {
+                    XSSFRow row = sheet.getRow(rowIndex);
+                    if (row == null) {
+                        continue;
+                    }
+                    //跳过空行
+                    if (ExcelUtil.isRowEmpty(row)) {
+                        continue;
+                    }
+                    //项目编号 费用日期 发拍种类 费用类型 费用金额 发票号 税率 税额 备注
+                    XSSFCell codeCell = row.getCell(0);
+                    if (codeCell != null) codeCell.setCellType(CellType.STRING);
+                    Optional<Project> project = projectList.stream().filter(pro ->(StringUtils.isEmpty(pro.getProjectCode())?"":pro.getProjectCode()).equals(codeCell.getStringCellValue())
+                            || (StringUtils.isEmpty(pro.getProjectName())?"":pro.getProjectName()).equals(codeCell.getStringCellValue())).findFirst();
+                    if (!project.isPresent()) {
+                        errorAboutProject+=codeCell.getStringCellValue()+"/";
+                    }
+                }
+                if(!errorAboutProject.equals("")){
+                    throw new Exception("项目编号/项目名称为[" +errorAboutProject+"]的项目不存在");
+                }
                 for (int rowIndex = 5; rowIndex <= rowNum; rowIndex++) {
                     XSSFRow row = sheet.getRow(rowIndex);
                     if (row == null) {
@@ -351,8 +373,6 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                             || (StringUtils.isEmpty(pro.getProjectName())?"":pro.getProjectName()).equals(codeCell.getStringCellValue())).findFirst();
                     if (project.isPresent()) {
                         expenseItem.setProjectId(project.get().getId());
-                    } else {
-                        throw new Exception("项目编号/项目名称为[" + codeCell.getStringCellValue() + "]的项目不存在");
                     }
                     expenseItem.setExpenseId(expenseSheet.getId());
                     if(happenDateCell!=null && !happenDateCell.toString().trim().equals("")){

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1499,14 +1499,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             fos.close();
             if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                 String mediaId = wxCorpInfoService.getTranslationMediaId(fileUrlSuffix);
-                String jobId = wxCorpInfoService.syncTranslation(mediaId,fileUrlSuffix, "pdf");
+                String jobId = wxCorpInfoService.syncTranslation(mediaId,fileUrlSuffix, null);
             /*if(jobId!=null&&!jobId.equals("")){
                 File file=new File(path + fileUrlSuffix);
                 if(file.exists()){
                     file.delete();
                 }
             }*/
-                Thread.sleep(1500);
+                Thread.sleep(3000);
                 String syncTranslationResult = wxCorpInfoService.getSyncTranslationResult(jobId);
                 //返回生成的文件地址/upload文件夹下
                 httpRespMsg.data = syncTranslationResult;

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -157,7 +157,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         jsonObject.put("auth_corpid",corpId);
         jsonObject.put("media_id_list",list);
         jsonObject.put("output_file_name",outPutFileName);
-        jsonObject.put("output_file_format",outputFileFormat);
+        /*jsonObject.put("output_file_format",outputFileFormat);*/
         HttpEntity<String> requestEntity = new HttpEntity<String>(jsonObject.toJSONString(), headers);
         ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
                 HttpMethod.POST, requestEntity, String.class);

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

@@ -39,6 +39,7 @@
         <result column="plate5" property="plate5" />
         <result column="is_ops" property="isOps" />
         <result column="job_number" property="jobNumber" />
+        <result column="corpwx_deptid" property="corpwxDeptid" />
     </resultMap>
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.User">
         <id column="id" property="id" />
@@ -48,7 +49,7 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops, job_number
+        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops, job_number, corpwx_deptid
     </sql>
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">

+ 1 - 1
fhKeeper/formulahousekeeper/octopus/src/views/workReport/review.vue

@@ -138,7 +138,7 @@
                 return string.split('\n')
             },
 
-            handleSizeChange(){
+            handleSizeChange(val){
                 this.size = val;
                 this.page = 1
                 this.getTableList();