Min há 11 meses atrás
pai
commit
dea691b7ae

+ 3 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java

@@ -226,7 +226,6 @@ public class WxCorpInfoController {
         List<TaskType> taskTypeList = taskTypeService.list(new LambdaQueryWrapper<TaskType>().eq(TaskType::getCompanyId, 7));
         List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId,7));
         if(approvalInfo!=null){
-            List<Report> reports = new ArrayList<>();
             for (int i = 0; i < approvalInfo.size(); i++) {
                 String codeNum = approvalInfo.get(i);
                 String approvalInfoDetailResp = wxCorpInfoService.getApprovalInfoDetail(7, codeNum);
@@ -341,12 +340,9 @@ public class WxCorpInfoController {
                             workTime=new_number;
                         }
                     }
-                    if(title.getJSONObject(0).getString("text").equals("结算总时长")){
-                        if(control.equals("Number")){
-                            double new_number = value.getDoubleValue("new_number");
-                            plan.setPlanWorkHour(new_number);
-                        }
-                    }
+                    BigDecimal bigDecimal = new BigDecimal(plan.getPlanManNum());
+                    bigDecimal=bigDecimal.multiply(new BigDecimal(workTime));
+                    plan.setPlanWorkHour(bigDecimal.doubleValue());
                     if(title.getJSONObject(0).getString("text").equals("所属工位")){
                         if(control.equals("Contact")){
                             JSONArray departments = value.getJSONArray("departments");

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/LeaveSheet.java

@@ -149,6 +149,8 @@ public class LeaveSheet extends Model<LeaveSheet> {
     @TableField("cur_audit_setting_id")
     private Integer curAuditSettingId;
 
+    public static String[] leaveTypes= {"事假","病假","年假","产假","婚假","丧假","调休","陪产假","其他"};
+
 
     @Override
     protected Serializable pkVal() {

+ 11 - 4
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4142,6 +4142,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         double cost = targetTeams.stream().mapToDouble(i -> i.getJobOfMoney().doubleValue()).sum();
                         map.put("planCost", String.format("%.2f", cost));
                         map.put("planWorkTime", String.format("%.2f", workTime));
+                        Optional<LeaveSheet> first = leaveSheetList.stream().filter(l ->
+                                (l.getStartDate().isBefore(LocalDate.parse(date, dtf1)) || l.getStartDate().isEqual(LocalDate.parse(date, dtf1)))
+                                        &&
+                                        (l.getEndDate().isAfter(LocalDate.parse(date, dtf1)) || l.getEndDate().isEqual(LocalDate.parse(date, dtf1))) && l.getOwnerId().equals(u.getId())).findFirst();
+                        if(first.isPresent()){
+                            map.put("leave",LeaveSheet.leaveTypes[first.get().getLeaveType()]+"/"+first.get().getTimeHours()+"h");
+                        }
                         List<Integer> totalIds = targetTeams.stream().map(ProdProcedureTeam::getPlanProcedureId).distinct().collect(Collectors.toList());
                         //获取与本人分配相关的所有派工数据
                         List<PlanProcedureTotal> targetPlanTotals = planProcedureTotalList.stream().filter(p -> totalIds.contains(p.getId())).collect(Collectors.toList());
@@ -4180,12 +4187,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 } else {
                     Map map = new HashMap();
                     //不存在报工数据显示请假详情数据
-                    boolean match = leaveSheetList.stream().anyMatch(l ->
+                    Optional<LeaveSheet> first = leaveSheetList.stream().filter(l ->
                             (l.getStartDate().isBefore(LocalDate.parse(date, dtf1)) || l.getStartDate().isEqual(LocalDate.parse(date, dtf1)))
                                     &&
-                                    (l.getEndDate().isAfter(LocalDate.parse(date, dtf1)) || l.getEndDate().isEqual(LocalDate.parse(date, dtf1))) && l.getOwnerId().equals(u.getId()));
-                    if(match){
-                        map.put("leave","当天请假");
+                                    (l.getEndDate().isAfter(LocalDate.parse(date, dtf1)) || l.getEndDate().isEqual(LocalDate.parse(date, dtf1))) && l.getOwnerId().equals(u.getId())).findFirst();
+                    if(first.isPresent()){
+                        map.put("leave",LeaveSheet.leaveTypes[first.get().getLeaveType()]+"/"+first.get().getTimeHours()+"h");
                     }
                     map.put("crateDate", date);
                     map.put("cost", 0);

+ 209 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java

@@ -91,12 +91,22 @@ public class TimingTask {
     private WxCorpInfoService wxCorpInfoService;
     @Resource
     private WxCorpInfoMapper wxCorpInfoMapper;
+    @Resource
+    private WxCorpTemplateService wxCorpTemplateService;
     @Value(value = "${upload.path}")
     private String path;
     @Resource
     private TimeTypeService timeTypeService;
     @Resource
     private LeaveSheetService leaveSheetService;
+    @Resource
+    private DepartmentService departmentService;
+    @Resource
+    private TaskTypeService taskTypeService;
+    @Resource
+    private PlanService planService;
+    @Resource
+    private ReportService reportService;
 
     private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
     static {
@@ -328,4 +338,203 @@ public class TimingTask {
         }
     }
 
+    @Scheduled(cron = "0 20 2 ? * *")
+    public void getTemporaryJobApplication() throws Exception {
+        if(isDev){
+            return;
+        }
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate start=LocalDate.now().minusDays(1);
+        LocalDate end=LocalDate.now();
+        JSONArray jsonArrayFilter = new JSONArray();
+        JSONObject filter1 = new JSONObject();
+        WxCorpTemplate template = wxCorpTemplateService.getById(7);
+        filter1.put("key","template_id");
+        filter1.put("value",template.getTemplateId());
+        jsonArrayFilter.add(filter1);
+        JSONObject filter2 = new JSONObject();
+        filter2.put("key","sp_status");
+        filter2.put("value",2);
+        jsonArrayFilter.add(filter2);
+        List<String> approvalInfo = wxCorpInfoService.getApprovalInfo(7, df.format(start), df.format(end), "", jsonArrayFilter);
+        List<Department> departmentList = departmentService.list(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, 7));
+        List<TaskType> taskTypeList = taskTypeService.list(new LambdaQueryWrapper<TaskType>().eq(TaskType::getCompanyId, 7));
+        List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId,7));
+        if(approvalInfo!=null){
+            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.getCorpwxRealUserid()!=null&&u.getCorpwxRealUserid().equals(userid)).findFirst();
+                if(!first.isPresent()){
+                    continue;
+                }
+                JSONObject apply_data = info.getJSONObject("apply_data");
+                System.out.println("获取到的单据信息===========>"+apply_data);
+                JSONArray contents = apply_data.getJSONArray("contents");
+                //生成 车间插单计划
+                Plan plan=new Plan();
+                plan.setCompanyId(7);
+                plan.setCreateTime(LocalDateTime.now());
+                plan.setPlanType(1);
+                plan.setCreateId(first.get().getId());
+                //参与人员列表
+                List<String> userTeams=new ArrayList<>();
+                //初始化 单价(元/小时)
+                BigDecimal price=new BigDecimal(0);
+                //初始化 工作时长
+                double workTime=0;
+                //初始话 工作日期
+                JSONArray sp_record = info.getJSONArray("sp_record");
+                //获取最后一个审批节点
+                JSONObject last_sp_record = sp_record.getJSONObject(sp_record.size() - 1);
+                JSONArray details = last_sp_record.getJSONArray("details");
+                //获取最后详情
+                JSONObject lastDetail = details.getJSONObject(details.size() - 1);
+                long sptime = lastDetail.getLongValue("sptime");
+                LocalDate createDate=LocalDate.now();
+                //初始化工位
+                Integer deptId=0;
+                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(title.getJSONObject(0).getString("text").equals("临时报工分类")){
+                        if(control.equals("Selector")){
+                            JSONObject selector = value.getJSONObject("selector");
+                            JSONArray options = selector.getJSONArray("options");
+                            JSONObject object = options.getJSONObject(0);
+                            JSONArray value1 = object.getJSONArray("value");
+                            JSONObject jsonObject = value1.getJSONObject(0);
+                            String text = jsonObject.getString("text");
+                            Optional<TaskType> first1 = taskTypeList.stream().filter(t -> t.getTaskTypeName().equals(text)).findFirst();
+                            if(first1.isPresent()){
+                                plan.setTaskTypeId(first1.get().getId());
+                                plan.setTaskTypeName(first1.get().getTaskTypeName());
+                            }
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").equals("事由")){
+                        if(control.equals("Text")||control.equals("Textarea")){
+                            String text = value.getString("text");
+                            plan.setTaskName(text);
+                        }
+                    }
+                    //先处理多个人员 公用此单据非工时部分内容
+                    if(title.getJSONObject(0).getString("text").equals("参与人员")){
+                        if(control.equals("Contact")){
+                            JSONArray members = value.getJSONArray("members");
+                            for (int i2 = 0; i2 < members.size(); i2++) {
+                                JSONObject jsonObject = members.getJSONObject(i2);
+                                String userid1 = jsonObject.getString("userid");
+                                userTeams.add(userid1);
+                            }
+
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").equals("参与人数")){
+                        if(control.equals("Number")){
+                            int new_number = value.getIntValue("new_number");
+                            plan.setPlanManNum(new_number);
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").equals("开始时间")){
+                        if(control.equals("Date")){
+                            JSONObject date = value.getJSONObject("date");
+                            long s_timestamp = date.getLongValue("s_timestamp");
+                            LocalDate localDateFromUnix = DateTimeUtil.getLocalDateFromUnix(s_timestamp);
+                            plan.setStartDate(localDateFromUnix);
+                            if(sptime>0){
+                                createDate= DateTimeUtil.getLocalDateFromUnix(sptime);
+                            }else {
+                                createDate=localDateFromUnix;
+                            }
+
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").equals("结束时间")){
+                        if(control.equals("Date")){
+                            JSONObject date = value.getJSONObject("date");
+                            long s_timestamp = date.getLongValue("s_timestamp");
+                            LocalDate localDateFromUnix = DateTimeUtil.getLocalDateFromUnix(s_timestamp);
+                            plan.setEndDate(localDateFromUnix);
+                            if(sptime>0){
+                                createDate= DateTimeUtil.getLocalDateFromUnix(sptime);
+                            }else {
+                                createDate=localDateFromUnix;
+                            }
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").equals("工作时长")){
+                        if(control.equals("Number")){
+                            double new_number = value.getDoubleValue("new_number");
+                            workTime=new_number;
+                        }
+                    }
+                    BigDecimal bigDecimal = new BigDecimal(plan.getPlanManNum());
+                    bigDecimal=bigDecimal.multiply(new BigDecimal(workTime));
+                    plan.setPlanWorkHour(bigDecimal.doubleValue());
+                    if(title.getJSONObject(0).getString("text").equals("所属工位")){
+                        if(control.equals("Contact")){
+                            JSONArray departments = value.getJSONArray("departments");
+                            String openapi_id = departments.getJSONObject(0).getString("openapi_id");
+                            Optional<Department> first1 = departmentList.stream().filter(d -> d.getCorpwxDeptid().equals(Integer.valueOf(openapi_id))).findFirst();
+                            if(first1.isPresent()){
+                                plan.setStationId(first1.get().getDepartmentId());
+                                plan.setStationName(first1.get().getDepartmentName());
+                                plan.setForemanId(first1.get().getManagerId());
+                                Optional<User> first2 = userList.stream().filter(u -> u.getId().equals(first1.get().getManagerId())).findFirst();
+                                if(first2.isPresent()){
+                                    plan.setForemanName(first2.get().getName());
+                                }
+                                deptId=first1.get().getDepartmentId();
+                            }
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").contains("单价")){
+                        if(control.equals("Number")){
+                            Double new_money = value.getDouble("new_number");
+                            plan.setMoneyOfJob(new BigDecimal(new_money));
+                            price=new BigDecimal(new_money);
+                        }
+                    }
+                    if(title.getJSONObject(0).getString("text").equals("备注")){
+                        if(control.equals("Text")||control.equals("Textarea")){
+                            String text = value.getString("text");
+                            plan.setDescribtion(text);
+                        }
+                    }
+                }
+                planService.save(plan);
+                List<Report> reportList=new ArrayList<>();
+                //处理人员日报数据
+                for (String userTeam : userTeams) {
+                    Optional<User> user = userList.stream().filter(u -> u.getCorpwxRealUserid() != null && u.getCorpwxRealUserid().equals(userTeam)).findFirst();
+                    if(user.isPresent()){
+                        Report report=new Report();
+                        report.setCreateDate(createDate);
+                        report.setCreatorId(user.get().getId());
+                        report.setCreateTime(LocalDateTime.now());
+                        BigDecimal bigDecimal = new BigDecimal(workTime);
+                        bigDecimal=bigDecimal.multiply(price);
+                        report.setCost(bigDecimal);
+                        report.setWorkingTime(workTime);
+                        report.setStatus(2);
+                        report.setPlanId(plan.getId());
+                        report.setCompanyId(7);
+                        report.setDeptId(deptId);
+                        reportList.add(report);
+                    }
+                }
+                if(reportList.size()>0){
+                    reportService.saveBatch(reportList);
+                }
+            }
+        }
+    }
+
 }

+ 2 - 5
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue

@@ -91,11 +91,8 @@
                         <div v-for="(items, indexs) in scope.row.personWorkHoursWages" :key="indexs" :class="`${scope.row.departmentCascade== '小计' ? '' : 'colorText'}`">
                             <div v-if="items.crateDate == item">
                               <div  style="color: black;" v-if="items.planWorkTime">平均 {{items.planWorkTime}}分钟  {{items.planCost}}元</div>
-                              <div v-if="items.leave">{{items.leave}}</div>
-                              <template v-else>
-                                  <div @click.stop="showReportDetail(scope.row,item,0)">已填 {{items.workTime}}分钟  {{items.cost}}元</div>
-                                <div style="color: green;" @click.stop="showTempReportDetail(scope.row,item,0)">临时报工 {{items.tempWorkTime}}分钟  {{items.tempCost}}元</div>
-                              </template>  
+                              <div @click.stop="showReportDetail(scope.row,item,0)">已填 {{items.workTime}}分钟  {{items.cost}}元 {{items.leave}}</div>
+                                <div style="color: green;" @click.stop="showTempReportDetail(scope.row,item,0)" v-if="tempWorkTime>0">临时报工 {{items.tempWorkTime}}分钟  {{items.tempCost}}元</div>
                               <div style="color: red;" v-if="items.surplusTime">剩余 {{items.surplusTime}}分钟  {{items.surplusCost}}元</div>
                             </div>
                         </div>