Min 11 mesi fa
parent
commit
3f34d25c26

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

@@ -122,7 +122,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
                 deptIds=deptIds.stream().distinct().collect(Collectors.toList());
                 List<Integer> finalDeptIds2 = deptIds;
                 List<String> userIds = userList.stream().filter(u -> finalDeptIds2.contains(u.getDepartmentId())).map(User::getId).collect(Collectors.toList());
-                userIds.add("-1");
+                userIds.add(targetUsr.getId());
                 queryWrapper.in(Product::getCreatorId,userIds);
             }
         }

+ 2 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -140,7 +140,8 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                 deptIds=deptIds.stream().distinct().collect(Collectors.toList());
                 List<Integer> finalDeptIds2 = deptIds;
                 List<String> userIds = userList.stream().filter(u -> finalDeptIds2.contains(u.getDepartmentId())).map(User::getId).collect(Collectors.toList());
-                userIds.add("-1");
+                //加上本人
+                userIds.add(user.getId());
                 orderLambdaQueryWrapper.and(wrapper->wrapper.in(SalesOrder::getCreatorId,userIds).or().in(SalesOrder::getInchargerId,userIds));
             }
         }

+ 13 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdProcedureController.java

@@ -85,5 +85,18 @@ public class ProdProcedureController {
     public HttpRespMsg updateData(){
         return prodProcedureService.updateData();
     }
+
+
+    /**
+    * @Description:供恢复南京雷啊伟数据
+    * @Param: []
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/6/18
+    */
+    @RequestMapping("/updateHistoryData")
+    public HttpRespMsg updateHistoryData(){
+        return prodProcedureService.updateHistoryData();
+    }
 }
 

+ 98 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java

@@ -3,18 +3,27 @@ package com.management.platform.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.LeaveSheet;
 import com.management.platform.entity.User;
 import com.management.platform.entity.WxCorpInfo;
 import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.LeaveSheetService;
 import com.management.platform.service.WxCorpInfoService;
+import com.management.platform.util.DateTimeUtil;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * <p>
@@ -32,6 +41,8 @@ public class WxCorpInfoController {
     WxCorpInfoService wxCorpInfoService;
     @Resource
     UserMapper userMapper;
+    @Resource
+    LeaveSheetService leaveSheetService;
 
     @RequestMapping("/testDownload")
     public HttpRespMsg testDownload() {
@@ -95,6 +106,93 @@ public class WxCorpInfoController {
         filter2.put("value",2);
         jsonArrayFilter.add(filter2);
         List<String> approvalInfo = wxCorpInfoService.getApprovalInfo(7, startDate, endDate, "", jsonArrayFilter);
+        List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId,7));
+        if(approvalInfo!=null){
+            List<LeaveSheet> leaveSheets = new ArrayList<>();
+            for (int i = 0; i < approvalInfo.size(); i++) {
+                String codeNum = approvalInfo.get(i);
+                String approvalInfoDetailResp = wxCorpInfoService.getApprovalInfoDetail(7, codeNum);
+                JSONObject approvalInfoDetail = JSONObject.parseObject(approvalInfoDetailResp);
+                JSONObject info = approvalInfoDetail.getJSONObject("info");
+                JSONObject applyer = info.getJSONObject("applyer");
+                String userid = applyer.getString("userid");
+                Optional<User> first = userList.stream().filter(u -> u.getCorpwxUserid().equals(userid)).findFirst();
+                if(!first.isPresent()){
+                    continue;
+                }
+                LeaveSheet leaveSheet=new LeaveSheet();
+                leaveSheet.setCompanyId(7);
+                leaveSheet.setStatus(0);
+                leaveSheet.setOwnerId(first.get().getId());
+                leaveSheet.setOwnerName(first.get().getName());
+                JSONObject apply_data = info.getJSONObject("apply_data");
+                System.out.println("获取到的单据信息===========>"+apply_data);
+                JSONArray contents = apply_data.getJSONArray("contents");
+                for (int i1 = 0; i1 < contents.size(); i1++) {
+                    JSONObject map = contents.getJSONObject(i1);
+                    JSONArray title = map.getJSONArray("title");
+                    JSONObject value = map.getJSONObject("value");
+                    String control = map.getString("control");
+                    if(control.equals("Vacation")){
+                        JSONObject vacation = value.getJSONObject("vacation");
+                        JSONObject selector = vacation.getJSONObject("selector");
+                        //企业微信请假默认单选
+                        JSONArray options = selector.getJSONArray("options");
+                        JSONObject option = options.getJSONObject(0);
+                        int leaveType;
+                        switch (option.getJSONArray("value").getJSONObject(0).getString("text")){
+                            case "事假":leaveType=0;
+                                break;
+                            case "病假":leaveType=1;
+                                break;
+                            case "年假":leaveType=2;
+                                break;
+                            case "产假":leaveType=3;
+                                break;
+                            case "婚假":leaveType=4;
+                                break;
+                            case "丧假":leaveType=5;
+                                break;
+                            case "调休":leaveType=6;
+                                break;
+                            case "陪产假":leaveType=7;
+                                break;
+                            default:leaveType=8;
+                        }
+                        leaveSheet.setLeaveType(leaveType);
+                        JSONObject attendance = vacation.getJSONObject("attendance");
+                        JSONObject date_range = attendance.getJSONObject("date_range");
+                        leaveSheet.setTimeType(date_range.getString("type").equals("hour")?1:0);
+                        long new_begin = date_range.getLongValue("new_begin");
+                        long new_end = date_range.getLongValue("new_end");
+                        LocalDate startDate1 = DateTimeUtil.getLocalDateFromUnix(new_begin);
+                        LocalDate endDate1 = DateTimeUtil.getLocalDateFromUnix(new_end);
+                        leaveSheet.setStartDate(startDate1);
+                        leaveSheet.setEndDate(endDate1);
+                        long new_duration = date_range.getLongValue("new_duration");
+                        BigDecimal bigDecimal = new BigDecimal(new_duration);
+                        bigDecimal=bigDecimal.divide(new BigDecimal(3600),1, RoundingMode.HALF_DOWN);
+                        leaveSheet.setTimeHours(bigDecimal.floatValue());
+                        bigDecimal=bigDecimal.divide(new BigDecimal(8),1,RoundingMode.HALF_DOWN);
+                        leaveSheet.setTimeDays(bigDecimal.floatValue());
+                        leaveSheet.setLeaveType(1);
+                    }
+                    if(control.equals("Text")){
+                        if(title.getJSONObject(0).getString("text").equals("请假事由")){
+                            leaveSheet.setRemark(value.getString("text"));
+                        }
+                    }
+                }
+                LeaveSheet one = leaveSheetService.getOne(new LambdaQueryWrapper<LeaveSheet>().eq(LeaveSheet::getStartDate, leaveSheet.getStartDate()).eq(LeaveSheet::getEndDate, leaveSheet.getEndDate()).eq(LeaveSheet::getOwnerId, leaveSheet.getOwnerId()));
+                if(one!=null){
+                    leaveSheet.setId(one.getId());
+                }
+                leaveSheets.add(leaveSheet);
+            }
+            if(leaveSheets.size()>0){
+                leaveSheetService.saveOrUpdateBatch(leaveSheets);
+            }
+        }
         msg.setData(approvalInfo);
         return msg;
     }

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProdProcedureService.java

@@ -29,4 +29,6 @@ public interface ProdProcedureService extends IService<ProdProcedure> {
     HttpRespMsg getLastProcedureList(HttpServletRequest request, Integer productId);
 
     HttpRespMsg updateData();
+
+    HttpRespMsg updateHistoryData();
 }

+ 100 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
@@ -336,4 +337,103 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
 
         return new HttpRespMsg();
     }
+
+    @Override
+    @Transactional
+    public HttpRespMsg updateHistoryData() {
+        HttpRespMsg msg=new HttpRespMsg();
+        try {
+            List<PlanProcedureTotal> planProcedureTotals = planProcedureTotalService.list(new LambdaQueryWrapper<PlanProcedureTotal>().inSql(PlanProcedureTotal::getId, "\n" +
+                    "SELECT ppt.id FROM plan_procedure_total ppt\n" +
+                    "LEFT JOIN plan p ON p.id=ppt.plan_id\n" +
+                    "LEFT JOIN prod_procedure pp ON ppt.prod_procedure_id=pp.id\n" +
+                    "WHERE p.num*pp.working_time!=ppt.total_working_hours"));
+            List<Integer> prodProcedureIds = planProcedureTotals.stream().map(PlanProcedureTotal::getProdProcedureId).distinct().collect(Collectors.toList());
+            List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>().in(ProdProcedure::getId, prodProcedureIds));
+            if(planProcedureTotals.size()>0){
+                List<Integer> planIds = planProcedureTotals.stream().map(PlanProcedureTotal::getPlanId).distinct().collect(Collectors.toList());
+                List<Plan> planList = planService.list(new LambdaQueryWrapper<Plan>().in(Plan::getId, planIds));
+                List<Integer> totalIds = planProcedureTotals.stream().map(PlanProcedureTotal::getId).distinct().collect(Collectors.toList());
+                totalIds.add(-1);
+                List<ProdProcedureTeam> allProdProcedureTeams = prodProcedureTeamService.list(new LambdaQueryWrapper<ProdProcedureTeam>().in(ProdProcedureTeam::getPlanProcedureId,totalIds));
+                List<Integer> teamIdList = allProdProcedureTeams.stream().map(ProdProcedureTeam::getId).distinct().collect(Collectors.toList());
+                teamIdList.add(-1);
+                List<Report> allReports = reportService.list(new LambdaQueryWrapper<Report>().select(Report::getId,Report::getUserProcedureTeamId, Report::getProdProcedureId,Report::getFinishNum).in(Report::getUserProcedureTeamId, teamIdList));
+                List<ProdProcedureTeam> needUpdateTeamList=new ArrayList<>();
+                List<Report> needUpdateReportList=new ArrayList<>();
+                for (PlanProcedureTotal planProcedureTotal : planProcedureTotals) {
+                    Optional<ProdProcedure> first = prodProcedureList.stream().filter(u -> u.getId().equals(planProcedureTotal.getProdProcedureId())).findFirst();
+                    if(first.isPresent()){
+                        Optional<Plan> plan = planList.stream().filter(p -> p.getId().equals(planProcedureTotal.getPlanId())).findFirst();
+                        if(plan.isPresent()){
+                            BigDecimal totalWages=new BigDecimal(String.valueOf(first.get().getUnitPrice()));
+                            totalWages=totalWages.multiply(new BigDecimal(plan.get().getNum()));
+                            planProcedureTotal.setTotalWages(totalWages.doubleValue());
+                            BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(first.get().getWorkingTime()));
+                            totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.get().getNum()));
+                            planProcedureTotal.setTotalWorkingHours(totalWorkingHours.doubleValue());
+                            //todo:找到用到当前工序的prod_procedure_team (计划分配表) 更新 单价相关数据
+                            List<ProdProcedureTeam> prodProcedureTeams =allProdProcedureTeams.stream().filter(a->a.getPlanProcedureId().equals(planProcedureTotal.getId())).collect(Collectors.toList());
+                            prodProcedureTeams = prodProcedureTeams.stream().sorted(Comparator.comparing(ProdProcedureTeam::getId)).collect(Collectors.toList());
+                            String teamIds = prodProcedureTeams.stream().map(ProdProcedureTeam::getUserId).collect(Collectors.joining(","));
+                            BigDecimal overCountWages = new BigDecimal(0);
+                            BigDecimal overWorkingHours = new BigDecimal(0);
+                            if(!org.springframework.util.StringUtils.isEmpty(teamIds)){
+                                String[] team = teamIds.split(",");
+                                totalWages=totalWages.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
+                                totalWorkingHours=totalWorkingHours.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
+                                overCountWages=totalWages.multiply(new BigDecimal(team.length));
+                                overWorkingHours=totalWorkingHours.multiply(new BigDecimal(team.length));
+                                for (int i = 0; i < team.length; i++) {
+                                    int finalI = i;
+                                    //已存在的人员更新处理
+                                    Optional<ProdProcedureTeam> teamOptional = prodProcedureTeams.stream().filter(pl -> pl.getUserId().equals(team[finalI])).findFirst();
+                                    if(teamOptional.isPresent()){
+                                        ProdProcedureTeam prodProcedureTeam = teamOptional.get();
+                                        if(i==team.length-1){
+                                            double wagesAbs =new BigDecimal(planProcedureTotal.getTotalWages()).subtract(overCountWages).doubleValue();
+                                            double workTimesAbs =new BigDecimal(planProcedureTotal.getTotalWorkingHours()).subtract(overWorkingHours).doubleValue();
+                                            prodProcedureTeam.setWorkTime(totalWorkingHours.add(new BigDecimal(workTimesAbs)).doubleValue());
+                                            prodProcedureTeam.setJobOfMoney(totalWages.add(new BigDecimal(wagesAbs)));
+                                        }else {
+                                            prodProcedureTeam.setWorkTime(totalWorkingHours.doubleValue());
+                                            prodProcedureTeam.setJobOfMoney(totalWages);
+                                        }
+                                        if(plan.get().getPlanType()==1){
+                                            prodProcedureTeam.setStatus(1);
+                                        }
+                                        needUpdateTeamList.add(prodProcedureTeam);
+                                        //todo:找到用到当前工序的report (报工表) 更新 单价相关数据
+                                        List<Report> reports = allReports.stream().filter(a -> a.getUserProcedureTeamId().equals(prodProcedureTeam.getId())).collect(Collectors.toList());
+                                        for (Report report : reports) {
+                                            double curReportTime = 0.0;
+                                            Integer num = plan.get().getNum();//总件数
+                                            double addPercent = report.getFinishNum() / num;
+                                            //新版计算报工的工时和价钱;根据填报件数的占比计算工时和价钱
+                                            double earnMoney = planProcedureTotal.getTotalWages() * addPercent;
+                                            curReportTime = planProcedureTotal.getTotalWorkingHours() * addPercent;
+                                            report.setWorkingTime(curReportTime);//本次报工的工时数
+                                            report.setCost(new BigDecimal(earnMoney));//本次报工的成本
+                                            needUpdateReportList.add(report);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                planProcedureTotalService.updateBatchById(planProcedureTotals);
+                if(needUpdateTeamList.size()>0){
+                    prodProcedureTeamService.updateBatchById(needUpdateTeamList);
+                }
+                if(needUpdateReportList.size()>0){
+                    reportService.updateBatchById(needUpdateReportList);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
 }

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

@@ -2060,6 +2060,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
         if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
             String resp = ResponseEntity.getBody();
+            System.out.println("GET APPROVAL_INFO_DETAIL======>"+resp);
             return resp;
         }
         return null;