Sfoglia il codice sorgente

采购订单档案导出代码更新
账龄表定时同步调整
待采购物品发起采购订单自定义页面设计

fyz 3 mesi fa
parent
commit
9ad4692edd

+ 43 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/controller/PurchaseController.java

@@ -0,0 +1,43 @@
+package com.malk.lanyun.controller;
+
+import com.malk.lanyun.service.PurchaseService;
+import com.malk.server.common.McR;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 错误抛出与拦截详见 CatchException
+ */
+@Slf4j
+@RestController
+@RequestMapping("/purchase")
+public class PurchaseController {
+
+    @Autowired
+    private PurchaseService purchaseService;
+
+    /**
+     * 查询待采购数据
+     */
+    @PostMapping("selectAllProcured")
+    public McR selectAllProcured(@RequestBody Map data){
+
+        List<Map> procureds = purchaseService.selectAllProcured(data);
+
+        return McR.success(procureds);
+    }
+    /**
+     * 自定义页面发起采购订单
+     */
+    @PostMapping("startPurchaseOrder")
+    public McR startPurchaseOrder(@RequestBody Map data){
+
+        purchaseService.startPurchaseOrder(data);
+
+        return McR.success();
+    }
+}

+ 10 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/controller/TimerController.java

@@ -129,6 +129,16 @@ public class TimerController {
     void exportBusinessAnalysis(@RequestBody Map data, HttpServletResponse response, HttpServletRequest request) {
         timerService.exportBusinessAnalysis(data,response,request);
     }
+    /**
+     * 各项目经营分析预估导出excel
+     * @param data 前端传入数据
+     * @param response 响应头
+     * @param request  请求头
+     */
+    @PostMapping("exportBusinessAnalysisTest")
+    void exportBusinessAnalysisTest(@RequestBody Map data, HttpServletResponse response, HttpServletRequest request) {
+        timerService.exportBusinessAnalysisTest(data,response,request);
+    }
     /**
      * 分组查询项目点经营分析报表
      *

+ 2 - 2
mjava-lanyun/src/main/java/com/malk/lanyun/schedule/ScheduleTask.java

@@ -152,9 +152,9 @@ public class ScheduleTask {
     }
 
     /**
-     * 每2小时全量同步账龄表
+     * 23点20分全量同步账龄表
      */
-    @Scheduled(cron = "0 0 0/2 * * ?")
+    @Scheduled(cron = "0 20 23 * * ?")
     void syncAgingTask(){
         log.info("全量同步账龄表");
         fService.syncAgingSchedule();

+ 10 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/PurchaseService.java

@@ -0,0 +1,10 @@
+package com.malk.lanyun.service;
+
+import java.util.List;
+import java.util.Map;
+
+public interface PurchaseService {
+    List<Map> selectAllProcured(Map data);
+
+    void startPurchaseOrder(Map data);
+}

+ 2 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/TimerService.java

@@ -139,4 +139,6 @@ public interface TimerService {
     Map getProjectAnalysisForContract(Map<String, Object> data);
 
     void satisfactionSurvey(String formInstanceId);
+
+    void exportBusinessAnalysisTest(Map data, HttpServletResponse response, HttpServletRequest request);
 }

+ 40 - 34
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/NCServiceImpl.java

@@ -3380,34 +3380,39 @@ public class NCServiceImpl implements NCService {
                     .build());
 
             //算薪人数
-            String status = "2,3,5,-1";
-            List<String> filterList = new ArrayList<>();
-            filterList.add("sys00-dept");
-            filterList.add("sys00-mainDept");
-            List<String> workingEmployeeIds = ddClientPersonnel.getWorkingEmployeeIds(ddClient.getAccessToken(), status);
-            List<Map> employeeInfos = ddClientPersonnel.getEmployeeInfos(ddClient.getAccessToken(), workingEmployeeIds, agentId, filterList);
-            List<String> personList = new ArrayList<>();
-            employeeInfos.forEach(e->{
-                List<Map> mapList = (List<Map>) e.get("field_data_list");
-                mapList.forEach(m->{
-                    if ("sys00-dept".equals(m.get("field_code"))){
-                        List<Map> valueList = (List<Map>) m.get("field_value_list");
-                        String value = valueList.get(0).get("value").toString();
-                        personList.add(value);
-                    }
-                });
-            });
-            Map<String, Long> collect = personList.stream().collect(Collectors.groupingBy(i -> i, Collectors.counting()));
-
-            Integer[] personSum = {0};
-            dataList.forEach(e->{
-                String name = e.get("textField_lrr3rg6i").toString();
-                if (ObjectUtil.isNotNull(collect)) {
-                    int personCount = (ObjectUtil.isNotNull(collect.get(name)) ? Math.toIntExact(collect.get(name)) : 0);
-                    personSum[0] += personCount;
-                }
-            });
-
+//            String status = "2,3,5,-1";
+//            List<String> filterList = new ArrayList<>();
+//            filterList.add("sys00-dept");
+//            filterList.add("sys00-mainDept");
+//            List<String> workingEmployeeIds = ddClientPersonnel.getWorkingEmployeeIds(ddClient.getAccessToken(), status);
+//            List<Map> employeeInfos = ddClientPersonnel.getEmployeeInfos(ddClient.getAccessToken(), workingEmployeeIds, agentId, filterList);
+//            List<String> personList = new ArrayList<>();
+//            employeeInfos.forEach(e->{
+//                List<Map> mapList = (List<Map>) e.get("field_data_list");
+//                mapList.forEach(m->{
+//                    if ("sys00-dept".equals(m.get("field_code"))){
+//                        List<Map> valueList = (List<Map>) m.get("field_value_list");
+//                        String value = valueList.get(0).get("value").toString();
+//                        personList.add(value);
+//                    }
+//                });
+//            });
+//            Map<String, Long> collect = personList.stream().collect(Collectors.groupingBy(i -> i, Collectors.counting()));
+//
+//            Integer[] personSum = {0};
+//            dataList.forEach(e->{
+//                String name = e.get("textField_lrr3rg6i").toString();
+//                if (ObjectUtil.isNotNull(collect)) {
+//                    int personCount = (ObjectUtil.isNotNull(collect.get(name)) ? Math.toIntExact(collect.get(name)) : 0);
+//                    personSum[0] += personCount;
+//                }
+//            });
+            List<Map> workingEmployeeIds = ydService.queryFormData_all(YDParam.builder()
+                    .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                    .formUuid("FORM-5F5A9EC778314542853426DC93AD474C6GWC")
+                    .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_4lnxn1m, textField_5hgys6d",timeList,"直属队")))
+                    .build());
             final Double[] zsdglfy = {0.0};
             final Double[] zsdsum = {0.0};
             //直属队
@@ -3427,7 +3432,7 @@ public class NCServiceImpl implements NCService {
                     if (workingEmployeeIds.size() == 0 || workingEmployeeIds.size() * zsdsum[0] == 0.0){
                         zsdglfy[0] = 0.0;
                     }else {
-                        zsdglfy[0] = zsdglfy[0] + (collect.get("直属队")==null||collect.get("直属队").toString().isEmpty()?0.0:Double.parseDouble(collect.get("直属队").toString()))/personSum[0]*Double.parseDouble(manageList.get(0).get("manage_compute").toString());
+                        zsdglfy[0] = zsdglfy[0] + (workingEmployeeIds.size()==0?0.0: workingEmployeeIds.size()/ personCostList.size()*Double.parseDouble(manageList.get(0).get("manage_compute").toString()));
                     }
                 }
             });
@@ -3486,7 +3491,7 @@ public class NCServiceImpl implements NCService {
             PreparedStatement preparedStatement = mysqlCon.prepareStatement(delete);
             preparedStatement.execute();
 
-            String insert = "INSERT INTO `dingtalk`.`lanyun_project_analysis_copy1`(`project_name`, `belong_project`, `month`, `status`, `predict_income`, " +
+            String insert = "INSERT INTO `dingtalk`.`lanyun_project_analysis_salary`(`project_name`, `belong_project`, `month`, `status`, `predict_income`, " +
                     "`open`, `income`, `person`, `person_cost`, `material`, `other_cost`, `cost_sum`, `taxes`, `gross_profit`, `gross_margin`, `overhead`, " +
                     "`corporate_income_tax`, `net_profit`, `net_margin`, `format`, `customer_system`, `profit_loss`, `approach_date`, `level`, `notes`, " +
                     "`monthString`, `small_income`, `six`, `sum`, `folding_repair`, `project_code`) " +
@@ -3537,16 +3542,17 @@ public class NCServiceImpl implements NCService {
 //                    });
 //                }
 //                //算薪人数
-                if (ObjectUtil.isNotNull(collect)) {
-                    person[0] = ObjectUtil.isNotNull(collect.get(name)) ? Math.toIntExact(collect.get(name)) : 0;
-                }
+//                if (ObjectUtil.isNotNull(collect)) {
+//                    person[0] = ObjectUtil.isNotNull(collect.get(name)) ? Math.toIntExact(collect.get(name)) : 0;
+//                }
                 //生产成本-工资
                 if (ObjectUtil.isNotNull(personCostList) && personCostList.size()>0) {
                     personCostList.forEach(s -> {
                         if (name.equals(s.get("textField_lr8loohg"))) {
-                            double person_cost_compute = (s.get("numberField_bjzkeii_value") == null ? 0.0 : Double.parseDouble(s.get("numberField_bjzkeii_value").toString())) +
+                            double person_cost_compute = (s.get("numberField_m2u0nhk3_value") == null ? 0.0 : Double.parseDouble(s.get("numberField_m2u0nhk3_value").toString())) +
                                     (s.get("numberField_lnc1nj0_value") == null ? 0.0 : Double.parseDouble(s.get("numberField_lnc1nj0_value").toString()));
                             sum[1] = sum[1] + person_cost_compute;
+                            person[0] =  person[0] + 1;
                         }
                     });
                 }

+ 58 - 1
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/TimerServiceImpl.java

@@ -270,6 +270,7 @@ public class TimerServiceImpl implements TimerService {
                         .appType("APP_ERBDTFS82HOVBPL3NFH0")
                         .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
                         .formInstanceId(formInstId)
+                        .useLatestVersion(true)
                         .build(),
                 YDConf.FORM_QUERY.retrieve_id).getFormData();
         log.info("formData:{}",formData);
@@ -277,7 +278,8 @@ public class TimerServiceImpl implements TimerService {
         final String[] keys = {""};
         final String[] valuses = {""};
         formData.forEach((k,v)->{
-            if (!k.toString().equals("pageSection_lr3gzi9i") && !k.toString().equals("pageSection_ltxyt76g")){
+            if (k.toString().equals("textField_lr26y1io") || k.toString().equals("textareaField_lr26l3hg")
+                    || k.toString().equals("dateField_lr26l3h2") || k.toString().equals("selectField_lr26l3h8") || k.toString().equals("selectField_lr26l3h7")){
                 keys[0] = keys[0] + k + ", ";
                 valuses[0] = valuses[0] + v.toString() + ", ";
             }
@@ -2114,6 +2116,61 @@ public class TimerServiceImpl implements TimerService {
         });
     }
 
+    @Override
+    public void exportBusinessAnalysisTest(Map data, HttpServletResponse response, HttpServletRequest request) {
+        final String[] sql = {"SELECT " +
+                " `month`," +
+                "  project_name, " +
+                "  predict_income, " +
+                "  folding_repair, " +
+                "  `open`, " +
+                "  income, " +
+                "  person, " +
+                "  person_cost, " +
+                "  material, " +
+                "  other_cost, " +
+                "  cost_sum, " +
+                "  taxes, " +
+                "  gross_profit, " +
+                "  CONCAT(ROUND(gross_margin*100,2),'%') gross_margin, " +
+                "  overhead, " +
+                "  corporate_income_tax, " +
+                "  net_profit," +
+                "  monthString," +
+                "  level, " +
+                "  status, " +
+                "  profit_loss, " +
+                "  format, " +
+                "  customer_system, " +
+                "  CONCAT(ROUND(net_margin*100,2),'%') net_margin  " +
+                "FROM " +
+                " lanyun_project_analysis_salary " +
+                " WHERE 1=1"};
+        if (data.containsKey("startDate") || data.containsKey("endDate")){
+            data.remove("month");
+        }
+        data.forEach((k,v)->{
+            if (k.equals("low") && ObjectUtil.isNotNull(v)){
+                sql[0] = sql[0] + " AND `net_margin` < 0.05" ;
+
+            } else if (ObjectUtil.isNotNull(v) && k.equals("startDate")) {
+                sql[0] = sql[0] + " AND `month` >= \"" + v +"\"" ;
+            } else if (ObjectUtil.isNotNull(v) && k.equals("endDate")) {
+                sql[0] = sql[0] + " AND `month` <= \"" + v +"\"" ;
+            } else if (ObjectUtil.isNotNull(v) && !k.equals("low")){
+                sql[0] = sql[0] + " AND `" + k +"` = \"" + v +"\"" ;
+            }
+        });
+
+        List<ProjectAnalysis> analysisList = jdbcTemplate.query(sql[0], new ProjectAnalysisMapper());
+
+//        Map<String, String> dataMain = new HashMap<>();
+        String fileName = "各项目经营分析预估测试-"+data.get("startDate") + "至" + data.get("endDate");
+
+
+        UtilExcel.exportMapAndListByTemplate(response, null, analysisList, ProjectAnalysis.class, fileName, "NC.xlsx");
+    }
+
     //    获取本年所有月时间戳
     public List<Long> getAllTimestamp(){
         LocalDate now = LocalDate.now();

+ 97 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/purchaseServiceImpl.java

@@ -0,0 +1,97 @@
+package com.malk.lanyun.service.impl;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.malk.lanyun.service.PurchaseService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Personnel;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class purchaseServiceImpl implements PurchaseService {
+
+    @Value("${dingtalk.appKey}")
+    private String dingtalkAppKey;
+    @Value("${dingtalk.appSecret}")
+    private String dingtalkAppSecret;
+    @Value("${dingtalk.agentId}")
+    private Long agentId;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+    @Autowired
+    private YDService ydService;
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private DDClient ddClient;
+
+    @Autowired
+    private DDClient_Personnel ddClientPersonnel;
+    @Override
+    public List<Map> selectAllProcured(Map data) {
+        List<Map> lastList = new ArrayList<>();
+        Map<String, Object> param = new HashMap<>();
+        param.put("selectField_mff51th7","否");
+        if (ObjectUtil.isNotNull(data.get("customer"))){
+            param.put("textField_ltxstp8h",data.get("customer"));
+        } else if (ObjectUtil.isNotNull(data.get("project"))) {
+            param.put("textField_ltxstp85",data.get("project"));
+        }
+        if ("物耗/配件".equals(data.get("type"))){
+            List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                    .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                    .formUuid("FORM-A8064C8333E24DEA88618D018DE0AE84WJPQ")
+                    .searchFieldJson(JSON.toJSONString(param))
+                    .build());
+            dataList.forEach(e->{
+                if (Double.parseDouble(e.get("numberField_ltxyjf0s_value").toString()) > 0){
+                    lastList.add(e);
+                }
+            });
+        }else {
+            List<Map>  dataList = ydService.queryFormData_all(YDParam.builder()
+                    .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                    .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                    .formUuid("FORM-0E95A616B4A54BBBB42AAEEEDCC4D9206XGA")
+                    .searchFieldJson(JSON.toJSONString(param))
+                    .build());
+            dataList.forEach(e->{
+                if (Double.parseDouble(e.get("numberField_ltxyjf0s_value").toString()) > 0){
+                    lastList.add(e);
+                }
+            });
+        }
+        return lastList;
+    }
+
+    @Override
+    public void startPurchaseOrder(Map data) {
+        log.info(":{}",data.get("records"));
+//        ydClient.operateData(YDParam.builder().userId("026150181237-1254068060")
+//                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+//                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+//                .formUuid("FORM-A4B37CFEB8524947939C00523373532BT3TH")
+//                .formDataJson(JSON.toJSONString(UtilMap.map("dateField_ls2u8mbv, departmentSelectField_ls2u8mbw, employeeField_ls2u8mbx, tableField_ls2u8mc6, associationFormField_ls2u8mcb, dateField_ls1ky8c5",
+//                        beginTime,department,header,tableList,jsonArray,sendTime)))
+//                .build(), YDConf.FORM_OPERATION.start);
+    }
+}