ソースを参照

Merge remote-tracking branch 'origin/master'

xmy 1 ヶ月 前
コミット
d5ca7ed041

+ 78 - 11
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/Impl/HeiHuOrderServiceImpl.java

@@ -29,6 +29,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -43,23 +44,60 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
     @Autowired
     private DDConf ddConf;
 
+    private ConcurrentHashMap<String, LocalDateTime> tokenStore = new ConcurrentHashMap<>();
+
 
     /*登录获取黑湖登录token*/
     @Override
     public McR HeiHuAccessToken() throws JacksonException {
-        HashMap body = new HashMap();
-        body.put("type",1);//type=1,登录方式为工厂代号+账号+密码
-        body.put("code","648910");//工厂代号
-        body.put("username","FGJK");//账号
-        body.put("password","b715db070346a8a59e0eba5da27f8e4938536bb7867e09592326fde2");//密码加密
-        HashMap header = new HashMap();
-        header.put("X-CLIENT","lite-web");//固定
-        header.put("Content-Type","application/json");
-        String s = UtilHttp.doPost("https://liteweb.blacklake.cn/api/user/v1/users/_login", header, null, body);
-        String data = new ObjectMapper().readTree(s).get("data").asText();
-        return McR.success(data);
+        final String[] token = {""};
+        final boolean[] isHave = {false};
+        tokenStore.forEach((k, v) -> {
+            if (validateToken(k)) {
+                token[0] = k;
+                isHave[0] = true;
+            }
+        });
+        if (!isHave[0]) {
+            HashMap body = new HashMap();
+            body.put("type",1);//type=1,登录方式为工厂代号+账号+密码
+            body.put("code","648910");//工厂代号
+            body.put("username","FGJK");//账号
+            body.put("password","b715db070346a8a59e0eba5da27f8e4938536bb7867e09592326fde2");//密码加密
+            HashMap header = new HashMap();
+            header.put("X-CLIENT","lite-web");//固定
+            header.put("Content-Type","application/json");
+            String s = UtilHttp.doPost("https://liteweb.blacklake.cn/api/user/v1/users/_login", header, null, body);
+//            String data = new ObjectMapper().readTree(s).get("data").asText();
+            token[0] = new ObjectMapper().readTree(s).get("data").asText();
+            addToken(token[0],70);
+        }
+
+        return McR.success(token[0]);
+    }
+    /**
+     * token存储
+     * @param token
+     * @param expireHours
+     */
+    public void addToken(String token, int expireHours) {
+        LocalDateTime expirationTime = LocalDateTime.now().plusHours(expireHours);
+        tokenStore.put(token, expirationTime);
     }
 
+    /**
+     * 清理过期token
+     * @param token
+     * @return
+     */
+    public boolean validateToken(String token) {
+        LocalDateTime expirationTime = tokenStore.get(token);
+        if (expirationTime == null || expirationTime.isBefore(LocalDateTime.now())) {
+            tokenStore.remove(token); // 清理过期 Token
+            return false;
+        }
+        return true;
+    }
     /*抓取黑湖工单发起宜搭审批流程*/
     @Override
     public McR StartYidaAproval(String OrderNo,String fromUuid) throws JacksonException {
@@ -1178,6 +1216,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                                     }
                                     else if(fieldIdNode != null && fieldIdNode.asInt() == 47771){
                                         JsonNode valueNode = field.get("value");
+                                        log.info("销售订单类型:{}",valueNode.asText());
                                         if("样品订单".equals(valueNode.asText())){
                                             isSample = true;
                                         }
@@ -1300,6 +1339,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                                 }
                             } else {
                                 try {
+                                    log.info("采购订单编号:{}将不发起钉钉审批",orderCode);
                                     HashMap body1 = new HashMap();
                                     body1.put("orderCode",orderCode);//订单编号:orderCode
                                     body1.put("vendorCode",dataArray.getJSONObject(0).getString("vendorCode"));//供应商编码:gysnumber
@@ -1329,6 +1369,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                         }
 
                         List<Map<String, Object>> oldList = new ArrayList<>();
+                        List<Map<String, Object>> faxList = new ArrayList<>();
                         if (type.equals(targetValueUpdate)){
                             oldIds.forEach(h->{
                                 List<Map> oldDataList = ydService.queryFormData_all(YDParam.builder()
@@ -1352,6 +1393,21 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                                             oldList.add(map);
                                         });
                                     }
+                                    List<Map> sonFaxList = ydService.queryDetails(YDParam.builder()
+                                            .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
+                                            .formInstanceId(UtilMap.getString(oldDataList.get(0),"textField_mmx9gycu"))
+                                            .formUuid("FORM-3A54B12BE3D241218A75242B935F2987YWV2")
+                                            .tableFieldId("tableField_ml7ch2pj")
+                                            .build());
+                                    if (ObjectUtil.isNotNull(sonFaxList) && sonFaxList.size() > 0){
+                                        sonFaxList.forEach(s->{
+                                            Map<String, Object> map = new HashMap<>();
+                                            TABLEFIELD_ENUM2.forEach((k,v)->{
+                                                map.put(v,UtilMap.getString(s,k));
+                                            });
+                                            faxList.add(map);
+                                        });
+                                    }
                                 }
                             });
                         }
@@ -1369,6 +1425,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                             List<Map<String, String>> orderSummaryListHigh = calculateOrderSummary(tabledataHigh);
                             formdataHigh.put("tableField_ml7ch2pj", orderSummaryListHigh);
                             formdataHigh.put("tableField_mmx6gata", oldList);
+                            formdataHigh.put("tableField_mnekj8oq", faxList);
 
                             //数值统计毛利率
                             int szHigh = 0;
@@ -1404,6 +1461,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                             //组装数据塞到采购明细表
                             formdataLow.put("tableField_ml6g7k5d", tabledataLow);
                             formdataLow.put("tableField_mmx6gata", oldList);
+                            formdataHigh.put("tableField_mnekj8oq", faxList);
 
                             //组装数据塞到采购审批单号明细
                             List<Map<String, String>> orderSummaryListLow = calculateOrderSummary(tabledataLow);
@@ -1967,6 +2025,15 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
         TABLEFIELD_ENUM.put("numberField_ml7c3yhz","numberField_mmx6gat8");
         TABLEFIELD_ENUM.put("numberField_ml7c3yi0","numberField_mmx6gat9");
     }
+    private static final Map<String,String> TABLEFIELD_ENUM2 =new HashMap<>();//修改后:修改前
+    static {
+        TABLEFIELD_ENUM2.put("textField_mnekj8ok","textField_ml7ch2pk");
+        TABLEFIELD_ENUM2.put("numberField_mnekj8ol","numberField_ml862225");
+        TABLEFIELD_ENUM2.put("numberField_mnekj8om","numberField_ml862226");
+        TABLEFIELD_ENUM2.put("numberField_mnekj8on","numberField_ml862228");
+        TABLEFIELD_ENUM2.put("numberField_mnekj8oo","numberField_ml86222d");
+
+    }
     /**
      * 根据orderCode对tabledata进行分类求和
      * @param tableData 原始明细数据

+ 1 - 1
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdYdOrderServiceImpl.java

@@ -197,7 +197,7 @@ public class KdYdOrderServiceImpl extends ServiceImpl<KdYdOrderMapper, KdYdOrder
                     Map item = tableField.get(i);
                     Map<String, Object> table1Map = new HashMap<>();
 
-                    int detailId = parseInt(safeGetString(item, "numberField_mjzfodew"), 0);
+                    int detailId = parseInt(safeGetString(item, "numberField_mjzfodew"), 1);
                     String wlbm = safeGetString(item, "textField_mfbx1pqt");
 //                    String wlbm = "010101010003";
                     String wlmc = safeGetString(item, "textField_mfbx1pqs");

+ 18 - 0
mjava-siku/src/main/java/com/malk/siku/controller/SikuController.java

@@ -75,6 +75,16 @@ public class SikuController {
         return sikuService.saveBxReimbursement2(map);
     }
 
+    /**
+     * 采购单可用预算校验
+     * @param map
+     * @return
+     */
+    @PostMapping("/checkBudgetAmt")
+    public McR checkBudgetAmt(@RequestBody Map map){
+        return sikuService.checkBudgetAmt(map);
+    }
+
     //每刻云票收款单核销回调
     @PostMapping("/receive/callback")
     public McR callback(@RequestBody Map map){
@@ -105,6 +115,14 @@ public class SikuController {
         return McR.success();
     }
 
+    //每刻预算冻结/释放
+    @PostMapping("/updateBudget")
+    public McR updateBudget(@RequestBody Map map){
+        sikuService.updateBudget(map);
+
+        return McR.success();
+    }
+
     @GetMapping("/files/{fileId}")
     public ResponseEntity<Resource> getFileResource(
             @PathVariable String fileId,

+ 4 - 0
mjava-siku/src/main/java/com/malk/siku/service/SikuService.java

@@ -20,4 +20,8 @@ public interface SikuService {
     void invoiceWriteBack3(Map map);
 
     McR saveBxReimbursement2(Map map);
+
+    McR checkBudgetAmt(Map map);
+
+    void updateBudget(Map map);
 }

+ 127 - 1
mjava-siku/src/main/java/com/malk/siku/service/impl/SikuServiceImpl.java

@@ -1132,16 +1132,142 @@ public class SikuServiceImpl implements SikuService {
 
 
                 Map result = MkBxUtil.receiveReimburse(body);
+            }
+        }
+
+        return McR.success();
+    }
+
+    @Override
+    public McR checkBudgetAmt(Map map) {
+        String projectCode = UtilMap.getString(map, "projectCode");
+        long ldqssj = UtilMap.getLong(map, "ldqssj");//落地起始时间
+
+        //落地起始时间在几月份
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(ldqssj);
+        int month = calendar.get(Calendar.MONTH) + 1;
+
+        List<Map> list = UtilMap.getList(map, "list");
+
+        List<String> subjectCodeList = new ArrayList<>();
 
+        Map<String,Double> cgmxMap = new HashMap();
+        for (Map map1 : list) {
+            Double jscb = UtilMap.getDouble(map1, "numberField_mkkmij5e");//结算成本
+            String subjectCode = UtilMap.getString(map1, "textField_mn8nhpnz");//预算科目编号
+            subjectCodeList.add(subjectCode);
+
+            if (cgmxMap.containsKey(subjectCode)){
+                cgmxMap.put(subjectCode,UtilMap.getDouble(cgmxMap,subjectCode) + jscb);
+            }else {
+                cgmxMap.put(subjectCode,jscb);
+            }
+        }
+        Map body = new HashMap();
+        body.put("budgetPlanBizCode","全面预算");//预算方案编码
+        body.put("budgetOrgBizCodes",Arrays.asList(projectCode));//预算组织编码
+        body.put("budgetSubjectBizCodes",subjectCodeList);//预算科目编码
+        body.put("pageNum",1);
+        body.put("pageSize",50);
+
+        List<Map> budgetList = MkBxUtil.budgetInfo(body);
+        boolean flag = true;
+        StringBuilder errorMsg = new StringBuilder();
+
+        for (Map budget : budgetList) {
+            String subjectCode = UtilMap.getString(budget, "subjectBizCode");
+            String subjectName = UtilMap.getString(budget, "subjectName");
+            List<Map> budgetUnits = UtilMap.getList(budget, "budgetUnits");
+
+            for (Map budgetUnit : budgetUnits) {
+                int periodNum = UtilMap.getInt(budgetUnit, "periodNum");
+
+                if (periodNum == month) {
+                    Double usableAmount = UtilMap.getDouble(budgetUnit, "usableAmount");
+
+                    Double jscb = cgmxMap.get(subjectCode);
+                    if (jscb > usableAmount) {
+                        flag = false;
+                        errorMsg.append("[").append(subjectName).append("]预算金额不足,剩余可用预算金额[").append(usableAmount).append("];");
+                    }
+
+                    break;
+                }
             }
 
         }
 
+        Map result = new HashMap();
+        result.put("flag",flag);
+        result.put("errorMsg", errorMsg.toString());
 
+        return McR.success(result);
+    }
 
+    @Override
+    public void updateBudget(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+        String type = UtilMap.getString(map, "type");
 
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstanceId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        String projectCode = UtilMap.getString(formData, "textField_mmoh6nvx");
+
+        long ldqssj = UtilMap.getLong(formData, "dateField_mkdf8q8p");
+
+        //落地起始时间在几月份
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(ldqssj);
+        int month = calendar.get(Calendar.MONTH) + 1;
+
+        Map body = new HashMap();
+        body.put("budgetPlanBizCode","全面预算");
+        body.put("increment",false);
+        body.put("onlyError",false);
+
+        List<Map> budgets = new ArrayList<>();
+
+        if ("冻结".equals(type)){
+            //客户报价(汇总)
+            List<Map> list = UtilMap.getList(formData, "tableField_mmveqhwl");
+
+            for (Map map1 : list) {
+                Map budget = new HashMap();
+                budget.put("budgetOrgBizCode",projectCode);
+                budget.put("budgetSubjectBizCode",UtilMap.getString(map1, "textField_mmvgh1zv"));
+
+                Map budgetUnit = new HashMap();
+                budgetUnit.put("periodNum",month);
+                budgetUnit.put("budgetAmount",0);//置零 相当于冻结
+                budget.put("budgetUnits",Arrays.asList(budgetUnit));
+
+                budgets.add(budget);
+            }
+        }else {
+            //释放
+            //客户报价(汇总对照)
+            List<Map> list = UtilMap.getList(formData, "tableField_mncsu1ef");
+
+            for (Map map1 : list) {
+                Map budget = new HashMap();
+                budget.put("budgetOrgBizCode",projectCode);
+                budget.put("budgetSubjectBizCode",UtilMap.getString(map1, "textField_mncsu1ee"));
+                Double amt = UtilMap.getDouble(map1, "numberField_mncsu1ea");
+
+                Map budgetUnit = new HashMap();
+                budgetUnit.put("periodNum",month);
+                budgetUnit.put("budgetAmount",amt);
+                budget.put("budgetUnits",Arrays.asList(budgetUnit));
+
+                budgets.add(budget);
+            }
+        }
+
+        body.put("budgets",budgets);
+        MkBxUtil.batchBudget(body);
 
-        return McR.success();
     }
 
     //文件下载到本地

+ 28 - 0
mjava-siku/src/main/java/com/malk/siku/utils/MkBxUtil.java

@@ -153,6 +153,34 @@ public class MkBxUtil {
         }
     }
 
+    //预算信息查询接口
+    public static List<Map> budgetInfo(Object body){
+        log.info("body:{}",JSONObject.toJSONString(body));
+        Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/budget/page", MkBxUtil.initTokenHeader(), null, body,(Map) null));
+
+        log.info("Result:{}",result);
+
+        Map data = UtilMap.getMap(result, "data");
+
+        if (Objects.nonNull(data)){
+            List<Map> list = UtilMap.getList(data, "list");
+
+            return list;
+        }else {
+            return null;
+        }
+    }
+
+    //批量编制预算额
+    public static Map batchBudget(Map body){
+        log.info("body:{}",JSONObject.toJSONString(body));
+        Map result = (Map) JSONObject.parse(UtilHttp.doPut("https://" + host + "/api/openapi/budget/unit/batch/limit", MkBxUtil.initTokenHeader(), null, body));
+
+        log.info("Result:{}",result);
+
+        return result;
+    }
+
 
     private static String getSecret(String appCode, String appSecret, long timeMillis){
         log.info("time:{}",timeMillis);