Quellcode durchsuchen

绩效考核得分调整
自动发起采购订单逻辑更新

fyz vor 3 Wochen
Ursprung
Commit
fb9e4361e1

+ 31 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/Mapper/SalaryMapper.java

@@ -0,0 +1,31 @@
+package com.malk.lanyun.Mapper;
+
+import com.malk.lanyun.entity.ProjectAnalysis;
+import com.malk.lanyun.entity.Salary;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+
+public class SalaryMapper implements RowMapper<Salary> {
+    @Override
+    public Salary mapRow(ResultSet resultSet, int i) throws SQLException {
+        Salary salary = new Salary();
+        if (hasColumn(resultSet,"shichugongshi")){
+            salary.setShiChuGongShi(resultSet.getBigDecimal("shichugongshi"));
+        }
+
+        return salary;
+    }
+    public boolean hasColumn(ResultSet resultSet, String columnName) {
+        try {
+            Object value = resultSet.getObject(columnName);
+            return true;
+        } catch (SQLException e) {
+            // 表示该列不存在
+            return false;
+        }
+    }
+
+}

+ 13 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/entity/Salary.java

@@ -0,0 +1,13 @@
+package com.malk.lanyun.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class Salary implements Serializable {
+    private static final long serialVersionUID = 4820142670157009063L;
+    private BigDecimal shiChuGongShi;
+
+}

+ 54 - 7
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/TimerServiceImpl.java

@@ -7,7 +7,9 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.lanyun.Mapper.ProjectAnalysisMapper;
+import com.malk.lanyun.Mapper.SalaryMapper;
 import com.malk.lanyun.entity.ProjectAnalysis;
+import com.malk.lanyun.entity.Salary;
 import com.malk.lanyun.service.TimerService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
@@ -72,6 +74,8 @@ public class TimerServiceImpl implements TimerService {
     private DDClient_Personnel ddClientPersonnel;
 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    SimpleDateFormat monthFormat = new SimpleDateFormat("yyyy-MM");
+
 
     /**
      * 月度定额更新
@@ -2001,7 +2005,6 @@ public class TimerServiceImpl implements TimerService {
 
     @Override
     public Map getProjectAnalysisForContract(Map<String, Object> data) {
-
         List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
                 .appType("APP_ERBDTFS82HOVBPL3NFH0")
                 .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
@@ -2021,9 +2024,18 @@ public class TimerServiceImpl implements TimerService {
         // 设置日期为当月第一天
         calendar.set(Calendar.DAY_OF_MONTH, 1);
         // 调整为下月第一天
-        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);
+        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 2);
         calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
         long lastTime = calendar.getTimeInMillis();
+        final double[] workHour = {0.0};
+
+        String endMonth = monthFormat.format(new Date());
+        Calendar calendar2 = Calendar.getInstance();
+        // 年份减1
+        calendar2.add(Calendar.YEAR, -1);
+        Date lastYearDate = calendar2.getTime();
+        String lastYearMonth = monthFormat.format(lastYearDate);
 
         String sql = "SELECT\n" +
                 "\tAVG( predict_income )*10000 predict_income,\n" +
@@ -2051,19 +2063,54 @@ public class TimerServiceImpl implements TimerService {
 
         List<ProjectAnalysis> analysisList = jdbcTemplate.query(sql, new ProjectAnalysisMapper());
 
-        System.out.println(sql);
+//        sql = "WITH t1 AS (\n" +
+//                "SELECT COUNT( DISTINCT jisuannianyue ) count1 FROM `xinzi_lanyun` WHERE jisuannianyue >= '"+lastYearMonth+"' AND jisuannianyue <= '"+endMonth+"' AND RIGHT ( jisuannianyue, 1 ) != '月' \n" +
+//                ") \n" +
+//                "SELECT\n" +
+//                "SUM( shichugongshi ) / t1.count1 shichugongshi \n" +
+//                ",t1.count1\n" +
+//                "FROM\n" +
+//                "\t`xinzi_lanyun`\n" +
+//                "\tLEFT JOIN t1 ON 1 = 1 \n" +
+//                "WHERE\n" +
+//                "\tjisuannianyue >= '"+lastYearMonth+"' \n" +
+//                "\tAND jisuannianyue <= '"+endMonth+"' AND RIGHT ( jisuannianyue, 1 ) != '月'\n" +
+//                "\tGROUP BY t1.count1\n" +
+//                "\t";
+//        List<Salary> salaryList = jdbcTemplate.query(sql, new SalaryMapper());
+        List<String> dateList = new ArrayList<>();
+        dateList.add(String.valueOf(lastTimestamp.get(9)));
+        dateList.add(String.valueOf(lastTime));
+        List<Map> workList = ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formUuid("FORM-5F5A9EC778314542853426DC93AD474C6GWC")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_4lnxn1m, textField_lr8loohg",dateList,data.get("xmname"))))
+                .build());
+        log.info("开始时间:{},结束时间:{},工资核算表数据数目:{}",lastTimestamp.get(9),lastTime,workList.size());
+        Set<String> months = new HashSet<>();
+        workList.forEach(e->{
+            Date workDate = new Date(UtilMap.getLong(e,"dateField_4lnxn1m"));
+            String format = monthFormat.format(workDate);
+            workHour[0] = workHour[0] + UtilMap.getDouble(e,"numberField_v2at8od");
+            months.add(format);
+        });
+        log.info("总工时:{}", workHour[0]);
+        log.info("月数:{}", months.size());
+        log.info("平均工时:{}", workHour[0] / months.size());
+
         if (ObjectUtil.isNotNull(data.get("formInstanceId"))){
             ydClient.operateData(YDParam.builder()
                     .appType("APP_ERBDTFS82HOVBPL3NFH0")
                     .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
                     .formInstanceId(data.get("formInstanceId").toString())
                     .useLatestVersion(true)
-                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("numberField_ly418zpc, numberField_ly418zq9, numberField_m60tn0xu",
-                            analysisList.get(0).getPersonCost(),analysisList.get(0).getMaterial(),analysisList.get(0).getFoldingRepair())))
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("numberField_ly418zpc, numberField_ly418zq9, numberField_m60tn0xu, numberField_mi2jiyv5, numberField_mi2jiyvf",
+                            analysisList.get(0).getPersonCost(),analysisList.get(0).getMaterial(),analysisList.get(0).getFoldingRepair(),analysisList.get(0).getPredictIncome(),workHour[0] / months.size())))
                     .build(), YDConf.FORM_OPERATION.update);
         }
-        return UtilMap.map("numberField_ly418zpc, numberField_ly418zq9, numberField_m60tn0xu",
-                analysisList.get(0).getPersonCost(),analysisList.get(0).getMaterial(),analysisList.get(0).getFoldingRepair());
+        return UtilMap.map("numberField_ly418zpc, numberField_ly418zq9, numberField_m60tn0xu, numberField_mi2jiyv5, numberField_mi2jiyvf",
+                analysisList.get(0).getPersonCost(),analysisList.get(0).getMaterial(),analysisList.get(0).getFoldingRepair(),analysisList.get(0).getPredictIncome(),workHour[0] / months.size());
 
     }
 

+ 40 - 12
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/WorkServiceImpl.java

@@ -618,7 +618,7 @@ public class WorkServiceImpl implements WorkService {
                                     double sbgjj = list.stream()
                                             .mapToDouble(map -> ((Number) (UtilMap.getDouble(map,"numberField_kp1tzw9")
                                                     + UtilMap.getDouble(map, "numberField_lixe8q3")
-//                                                    + UtilMap.getDouble(map, "numberField_x4wvwkm")
+                                                    + UtilMap.getDouble(map, "numberField_x4wvwkm")
                                             )).doubleValue())
                                             .sum();
                                     //小业主费用
@@ -1033,24 +1033,25 @@ public class WorkServiceImpl implements WorkService {
                     double cost = UtilMap.getDouble(s,"numberField_lrru2tnu_value");
                     //收入定额
                     double income = UtilMap.getDouble(s,"numberField_lrru2tns_value");
-                    //回款金额
-                    double back = UtilMap.getDouble(s,"numberField_lrru2to3_value");
+                    //开票金额
+                    double open = "月结".equals(UtilMap.getString(e,"selectField_mejp7y3y")) ? UtilMap.getDouble(s,"numberField_lrru2to2_value") + UtilMap.getDouble(s, "numberField_m9v0yq7e") : UtilMap.getDouble(s,"numberField_lryopn7o");
+                    //开票金额
+                    dataMap.put("numberField_mfenmejr",open);
                     //工资定额分项
                     dataMap.put("numberField_mfenmehp",person);
                     //物料定额
                     dataMap.put("numberField_mfenmeih",cost);
                     //定额收入
                     dataMap.put("numberField_mfenmejp",income);
-                    //回款金额
-                    dataMap.put("numberField_mfenmek8",back);
+
                 });
                 //项目点档案子表上月
-                List<Map> sonLastMonthList = sonList.stream().filter(m -> formatNowMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
+                List<Map> sonLastMonthList = sonList.stream().filter(m -> formatLastMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
                 sonLastMonthList.forEach(s->{
-                    //开票金额
-                    double open = UtilMap.getDouble(s,"numberField_lrru2to2_value");
-                    //开票金额
-                    dataMap.put("numberField_mfenmejr",open);
+                    //回款金额
+                    double back = UtilMap.getDouble(s,"numberField_lrru2to3_value");
+                    //回款金额
+                    dataMap.put("numberField_mfenmek8",back);
                 });
                 //算薪结果表
                 salarys.forEach((k,v)->{
@@ -1119,6 +1120,8 @@ public class WorkServiceImpl implements WorkService {
                 //5-回款结算 评价得分
                 if (UtilMap.getDouble(dataMap,"numberField_mfenmek8")>0 && UtilMap.getDouble(dataMap,"numberField_mfenmek9")<=0){
                     dataMap.put("numberField_mfenmelu",5);
+                }else {
+                    dataMap.put("numberField_mfenmelu",0);
                 }
                 //物料定额
                 double wlde = UtilMap.getDouble(dataMap,"numberField_mfenmeih");
@@ -1231,13 +1234,38 @@ public class WorkServiceImpl implements WorkService {
                     dataMap.put("numberField_mfenmeit", UtilMap.getDouble(dataMap,"numberField_mfenmeis")
                             /  UtilMap.getDouble(dataMap,"numberField_mfenmeih") * 100);
                 }
+                //2-评价得分(2-物料成本)
+                Double sjfy = UtilMap.getDouble(dataMap, "numberField_mfenmeip");//实际费用
+                Double jybl = UtilMap.getDouble(dataMap, "numberField_mfenmeit");//结余比例
+                if (jybl < 0 && jybl >= -4){
+                    dataMap.put("numberField_mfenmelr","10");
+                }else if (jybl < -4) {
+                    dataMap.put("numberField_mfenmelr","0");
+                }else if (jybl/0.0002 > 20) {
+                    dataMap.put("numberField_mfenmelr","40");
+                }else {
+                    dataMap.put("numberField_mfenmelr",jybl/0.0002 + 20);
+                }
                 //结算金额-差额
                 dataMap.put("numberField_mfenmejs", UtilMap.getDouble(dataMap,"numberField_mfenmejr")
                         -  UtilMap.getDouble(dataMap,"numberField_mfenmejp"));
-                //开票状态
+                //3-结算金额得分
+                if (UtilMap.getDouble(dataMap,"numberField_mfenmejs") >= 0){
+                    dataMap.put("numberField_mfenmels","8");
+                } else if (UtilMap.getDouble(dataMap,"numberField_mfenmejs") >= -1000 && UtilMap.getDouble(dataMap,"numberField_mfenmejs") < 0) {
+                    dataMap.put("numberField_mfenmels","3");
+                }else if (UtilMap.getDouble(dataMap,"numberField_mfenmejs") >= -2000 && UtilMap.getDouble(dataMap,"numberField_mfenmejs") < -1000) {
+                    dataMap.put("numberField_mfenmels","0");
+                }else if (UtilMap.getDouble(dataMap,"numberField_mfenmejs") < -2000) {
+                    dataMap.put("numberField_mfenmels","-8");
+                } else if (UtilMap.getInt(dataMap,"textField_mfenmejq") == 3) {
+                    dataMap.put("numberField_mfenmels","8");
+                }
+
+                //开票状态  4-开票执行得分
                 if (UtilMap.getDouble(dataMap,"numberField_mfenmejr") > 0){
                     dataMap.put("textField_mgohy54u","已开票");
-                    dataMap.put("numberField_mfenmelt","7");//4-开票执行 得分
+                    dataMap.put("numberField_mfenmelt","7");
                 }else {
                     dataMap.put("textField_mgohy54u","未开票");
                     dataMap.put("numberField_mfenmelt","0");

+ 38 - 34
mjava-lanyun/src/main/java/com/malk/lanyun/service/impl/purchaseServiceImpl.java

@@ -186,7 +186,7 @@ public class purchaseServiceImpl implements PurchaseService {
                 .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_ltxstp81",dateList)))
                 .build());
         //过滤参与批量发起为否的数据
-        dataList = dataList.stream().filter(map -> "是".equals(map.get("selectField_mgswtsqu"))).collect(Collectors.toList());
+        dataList = dataList.stream().filter(map -> "是".equals(map.get("selectField_mgswtsqu")) && UtilMap.getInt(map,"numberField_ltxyjf0s") > 0).collect(Collectors.toList());
 
         //分组求和
         Map<Object, Long> groupCountMap = dataList.stream()
@@ -220,9 +220,10 @@ public class purchaseServiceImpl implements PurchaseService {
         List<Map> lastDataList = new ArrayList<>();
         for (int i = 0; i < collect.size(); i++) {
             String orderNumI = UtilMap.getString(collect.get(i), "orderNum");
+            String groupByI = UtilMap.getString(collect.get(i), "groupBy");
             //相加成功的作为一个list
-            if (!processedKeys.contains(orderNumI)) {
-                processedKeys.add(orderNumI);
+            if (!processedKeys.contains(groupByI + orderNumI)) {
+                processedKeys.add(groupByI + orderNumI);
                 List<String> orders = new ArrayList<>();
                 orders.add(orderNumI);
                 //第一层的数据条数
@@ -232,20 +233,20 @@ public class purchaseServiceImpl implements PurchaseService {
                     //数据处理
                     for (int r = collect.size() - 1; r >= 0; r--) {
                         String orderNumR = UtilMap.getString(collect.get(r), "orderNum");
-                        if (!processedKeys.contains(orderNumR) && groupBy.equals(collect.get(r).get("groupBy"))) {
+                        String groupByR = UtilMap.getString(collect.get(r), "groupBy");
+                        if (!processedKeys.contains(groupByR + orderNumR) && groupBy.equals(collect.get(r).get("groupBy"))) {
                             int countR = UtilMap.getInt(collect.get(r), "count");
                             if (countI + countR > 100) {
                                 continue;
                             } else if (countI + countR == 100) {
-                                processedKeys.add(orderNumR);
+                                processedKeys.add(groupByR + orderNumR);
                                 orders.add(orderNumR);
                                 countI += countR;
                                 break;
                             } else if (countI + countR < 100) {
-                                processedKeys.add(orderNumR);
+                                processedKeys.add(groupByR + orderNumR);
                                 orders.add(orderNumR);
                                 countI += countR;
-
                             }
                         }
                     }
@@ -258,19 +259,20 @@ public class purchaseServiceImpl implements PurchaseService {
             }
         }
         List<Map> finalDataList = dataList;
-        final int[] totalCount = {0};
+        final int[] totalCount = {0,0};
         final double[] amountSum = {0.0};
         final int[] successCount = {0};
         final int[] errorCount = {0};
-        try {
             lastDataList.forEach(e->{
                 //根据第一步拼接好的集合做发起流程操作
                 List<Map> tableList = new ArrayList<>();
                 final String[] cbzz = {"",""};
                 final String[] gys = {"",""};
                 e.forEach((k,v)->{
+                    try {
+
                     List<String> v1 = (List<String>) v;
-                    if (v1.size()>=3){
+//                    if (v1.size()>=3){
                         //供应商数据
                         String[] split = k.toString().split("-");
                         List<Map> gysList = ydService.queryFormData_all(YDParam.builder()
@@ -295,33 +297,35 @@ public class purchaseServiceImpl implements PurchaseService {
                             });
                         }
                         /*发起流程*/
-//                        ydClient.operateData(YDParam.builder()
-//                                .appType("APP_ERBDTFS82HOVBPL3NFH0")
-//                                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-//                                .formUuid("FORM-70F543E10887467188485B1E8AB3FFFDJUGK")
-//                                .formDataJson(JSON.toJSONString(UtilMap.map("selectField_lr26l3h7, textField_lus384vk, selectField_lr26l3h8, " +
-//                                                "textField_lr26l3hf, textField_lwg62y7o, numberField_lr26l3hq, numberField_lr26l3hr, tableField_ltxug6h1",
-//                                        cbzz[1], cbzz[0], "物耗/配件", gys[0], gysAss, totalCount[0], amountSum[0], tableList)))
-//                                .build(), YDConf.FORM_OPERATION.start);
+                        ydClient.operateData(YDParam.builder()
+                                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                                .formUuid("FORM-70F543E10887467188485B1E8AB3FFFDJUGK")
+                                .formDataJson(JSON.toJSONString(UtilMap.map("selectField_lr26l3h7, textField_lus384vk, selectField_lr26l3h8, " +
+                                                "textField_lr26l3hf, textField_lwg62y7o, numberField_lr26l3hq, numberField_lr26l3hr, tableField_ltxug6h1",
+                                        cbzz[1], cbzz[0], "物耗/配件", gys[0], gysAss, totalCount[0], amountSum[0], tableList)))
+                                .build(), YDConf.FORM_OPERATION.start);
+//                    }
+                    successCount[0]++;
+                    } catch (Exception ex) {
+                        errorCount[0]++;
+                        ex.printStackTrace();
+                        return;
                     }
                 });
-                successCount[0]++;
+//                totalCount[1]++;
             });
-        } catch (Exception ex) {
-            errorCount[0]++;
-            ex.printStackTrace();
-            return;
-        }
-//        ydClient.operateData(YDParam.builder()
-//                .appType("APP_ERBDTFS82HOVBPL3NFH0")
-//                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
-//                .formInstanceId(formInstanceId)
-////                    .useLatestVersion(true)
-////                    .updateFormDataJson(JSONObject.toJSONString(new HashMap<>()))
-//                .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_mhdgj16d, textField_mhdgj16e, textField_mhdgj16f, textField_mhdgj16g",
-//                        lastDataList.size(),successCount[0],errorCount[0],"同步完毕")))
-//                .build(), YDConf.FORM_OPERATION.update);
-        log.info("总条数:{} 执行成功条数:{} 失败条数:{}",lastDataList.size(),successCount[0],errorCount[0]);
+
+        ydClient.operateData(YDParam.builder()
+                .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formInstanceId(formInstanceId)
+//                    .useLatestVersion(true)
+//                    .updateFormDataJson(JSONObject.toJSONString(new HashMap<>()))
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_mhdgj16d, textField_mhdgj16e, textField_mhdgj16f, textField_mhdgj16g",
+                        dataList.size(),successCount[0],errorCount[0],"同步完毕")))
+                .build(), YDConf.FORM_OPERATION.update);
+        log.info("总条数:{} 执行成功条数:{} 失败条数:{}",dataList.size(),successCount[0],errorCount[0]);
 
     }