| | |
| | | @Value("${erp.address.qcppManuinspec}") |
| | | //产品检验单 |
| | | private String qcppManuinspec; |
| | | |
| | | @Value("${erp.address.omOutsourcereceiptQuery}") |
| | | //委外入库单 |
| | | private String omOutsourcereceiptQuery; |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | |
| | | jsonObject.put("org_number", null); |
| | | jsonObject.put("supplier_number", null); |
| | | path = imPurreceiveBillAddress; |
| | | break; |
| | | case "OUI_RECEIVEBIll"://委外入库单 |
| | | jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核] |
| | | jsonObject.put("auditdate_start", latestUpdateTime); |
| | | jsonObject.put("auditdate_end", sdf1.format(now)); |
| | | path = omOutsourcereceiptQuery; |
| | | break; |
| | | case "SAL_OUTSTOCK"://销售出库单查询 |
| | | path = imSaloutbill; |
| | |
| | | JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows"); |
| | | if(data.size()<=0) continue; |
| | | //商品档案同步 |
| | | if (kingDeeUtilType.formId.equals("BD_MATERIAL")) { |
| | | if(kingDeeUtilType.formId.equals("BD_MATERIAL")) { |
| | | Tag tag = tagService.selectByName("全部", 1); |
| | | // 处理分页:根据返回的totalCount和pageSize计算页数 |
| | | int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize"); |
| | |
| | | callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false); |
| | | continue; |
| | | } |
| | | if (mat.getSafeQty() == null || mat.getSafeQty() == 0) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "档案箱数量异常:" + matnr, false); |
| | | continue; |
| | | } |
| | | Double erpAnfme = anfme*mat.getSafeQty(); |
| | | Order order1 = orderService.selectByNo( billNo); |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order1.getId()); |
| | |
| | | orderDetl.setBoxType3(pOrderNo);//采购单号 |
| | | orderDetl.setMemo(memo);//英文备注 |
| | | orderDetl.setVolume(Totalvolume);//总体积 |
| | | orderDetl.setSafeQty(totalNumItems);//总件数 |
| | | orderDetl.setPrice(totalNumItems);//总件数 |
| | | orderDetl.setManu(warehouse);//仓库编码 |
| | | orderDetl.setCreateBy(9527L); |
| | | orderDetl.setCreateTime(new Date()); |
| | |
| | | if (Cools.isEmpty(mat)) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "商品不存在:" + matnr, false); |
| | | continue; |
| | | } |
| | | if (mat.getSafeQty() == null || mat.getSafeQty() == 0) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "档案箱数量异常:" + matnr, false); |
| | | continue; |
| | | } |
| | | Double erpAnfme = anfme*mat.getSafeQty(); |
| | |
| | | if (Cools.isEmpty(mat)) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "商品不存在:" + matnr, false); |
| | | continue; |
| | | } |
| | | if (mat.getSafeQty() == null || mat.getSafeQty() == 0) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "档案箱数量异常:" + matnr, false); |
| | | continue; |
| | | } |
| | | Double erpAnfme = anfme*mat.getSafeQty(); |
| | |
| | | "物料档案不存在:" + matnr, false); |
| | | continue; |
| | | } |
| | | if (mat.getSafeQty() == null || mat.getSafeQty() == 0) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "档案箱数量异常:" + matnr, false); |
| | | continue; |
| | | } |
| | | anfmeBox = Math.floor(anfme / mat.getSafeQty()); |
| | | // ========= 明细去重 ========= |
| | | List<OrderDetl> orderDetls = |
| | |
| | | "商品不存在:" + matnr, false); |
| | | continue; |
| | | } |
| | | if (mat.getSafeQty() == null || mat.getSafeQty() == 0) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | | "档案箱数量异常:" + matnr, false); |
| | | continue; |
| | | } |
| | | anfmeBox = Math.floor(anfme / mat.getSafeQty()); |
| | | // ========= 明细去重 ========= |
| | | List<OrderDetl> orderDetls = |
| | |
| | | docTypeService.updateById(docType); |
| | | } |
| | | //生产汇报单 |
| | | else if(kingDeeUtilType.formId.equals("PRD_MORPT")) { |
| | | else if(kingDeeUtilType.formId.equals("PRD_MORPT") || kingDeeUtilType.formId.equals("OUI_RECEIVEBIll")) { |
| | | int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize"); |
| | | int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount"); |
| | | int totalPages = (int) Math.ceil((double) totalCount / pageSize); |
| | |
| | | String owner = "和得科技"; |
| | | String ownerUuid = "BU-00001"; |
| | | String orderId = jsonObjectNew.getString("id"); |
| | | String manuBill = jsonObjectNew.getString("manufacturenun"); |
| | | // ========= 货主校验 ========= |
| | | LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid); |
| | | // if (locOwner == null) { |
| | |
| | | null, // 项目编号 |
| | | orderId, //收料单id |
| | | null, // 调拨项目编号 |
| | | null, // 初始票据号 |
| | | manuBill, // 初始票据号 |
| | | null, // 票据号 |
| | | null, // 项目id |
| | | owner, // 货主 |
| | |
| | | String s1 = entry.getString("eap7_textfield7"); //客户PO |
| | | String detlId = entry.getString("id"); //明细id |
| | | Long seq = entry.getLong("seq"); //分录行号 |
| | | // String suppCode = entry.getString("supplier_number"); |
| | | String manubill = entry.getString("manufacturenun"); |
| | | String manubillid = entry.getString("orderid_id"); |
| | | String manuentryid = null; |
| | | String manuentry = null; |
| | | if(kingDeeUtilType.formId.equals("PRD_MORPT")){ |
| | | manuentryid = entry.getString("mftentryid"); |
| | | |
| | | }else{ |
| | | manuentryid = entry.getString("osentryid"); |
| | | manuentry = entry.getString("manufacturerow"); |
| | | } |
| | | String suppCode = null; |
| | | if (anfme == null || anfme == 0) { |
| | | callApiLogSaveOrder(order, kingDeeUtilType, |
| | |
| | | // ========= 保存明细 ========= |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | orderDetl.sync(mat); |
| | | orderDetl.setModel(manubillid);//orderid_id |
| | | orderDetl.setBrand(manuentryid);//manuentryid |
| | | orderDetl.setSpecs(manuentry);//manufacturerow |
| | | orderDetl.setColor(manubill);//manufacturenun |
| | | orderDetl.setThreeCode(detlId); |
| | | orderDetl.setLineNumber(seq); |
| | | orderDetl.setAnfme(anfmeBox); |
| | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | public synchronized ReturnT<String> syncMaterialData(){ |
| | | SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd"); |
| | | //读取token |
| | | ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId)); |
| | | for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) { |
| | | if (!kingDeeUtilType.formId.equals("BD_MATERIAL")) { |
| | | continue; |
| | | } |
| | | DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc)); |
| | | if (Cools.isEmpty(docType) && !kingDeeUtilType.formId.equals("BD_MATERIAL")) { |
| | | docType = docTypeService.selectOrAdd(kingDeeUtilType.desc, kingDeeUtilType.pakIn.equals(1)); |
| | | } |
| | | //条件和需要获得的结果拼接 |
| | | JSONObject jsonObject = new JSONObject(); |
| | | String path = null; |
| | | Date now = new Date(); |
| | | String latestUpdateTime = sdf1.format(docType.getUpdateTime()); |
| | | switch (kingDeeUtilType.formId) { |
| | | case "BD_MATERIAL": //物料同步 |
| | | jsonObject.put("id", null);//id |
| | | jsonObject.put("number", null);//编码 |
| | | jsonObject.put("createorg_number", null);//创建组织 |
| | | jsonObject.put("start_createtime", "2025-01-01 00:00:00");//创建起始 |
| | | jsonObject.put("end_createtime", sdf1.format(now));//创建截止 |
| | | jsonObject.put("start_modifytime", latestUpdateTime);//更新起始 |
| | | jsonObject.put("end_modifytime", sdf1.format(now));//更新截止 |
| | | jsonObject.put("start_approvedate", "2025-01-01");//审核起始 |
| | | jsonObject.put("end_approvedate", sdf2.format(now));//审核截止 |
| | | jsonObject.put("status", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核] |
| | | path = matAddress; |
| | | break; |
| | | } |
| | | if (path == null) { |
| | | continue; |
| | | } |
| | | JSONObject jsonObject1 = new JSONObject(); |
| | | jsonObject1.put("data", jsonObject); |
| | | jsonObject1.put("pageSize", 20); |
| | | jsonObject1.put("pageNo", 1); |
| | | String add = jsonObject1.toJSONString(); |
| | | //上报 |
| | | String response = ""; |
| | | boolean success = false; |
| | | if (path == null) { |
| | | continue; |
| | | } |
| | | try { |
| | | //获取Cookie值 |
| | | HashMap<String, Object> headers = new HashMap<>(); |
| | | headers.put("accesstoken", erpSecret.getAccessToken()); |
| | | headers.put("x-acgw-identity", xAcfwIdentity); // 自定义请求头 |
| | | response = new HttpHandler.Builder() |
| | | .setHeaders(headers) |
| | | .setUri(URL) |
| | | .setPath(path) |
| | | .setJson(add) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonResponse = JSON.parseObject(response); |
| | | if (jsonResponse.getString("errorCode").equals("401")) { |
| | | log.error("检索失败错误信息:{}", jsonResponse.getString("message")); |
| | | loginAuthenticationHandler.start(); |
| | | continue; |
| | | } |
| | | JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows"); |
| | | if (data.size() <= 0) continue; |
| | | //商品档案同步 |
| | | if (kingDeeUtilType.formId.equals("BD_MATERIAL")) { |
| | | Tag tag = tagService.selectByName("全部", 1); |
| | | // 处理分页:根据返回的totalCount和pageSize计算页数 |
| | | int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize"); |
| | | int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount"); |
| | | int totalPages = (int) Math.ceil((double) totalCount / pageSize); |
| | | |
| | | for (int page = 1; page <= totalPages; page++) { |
| | | jsonObject1.put("pageNo", page); |
| | | add = jsonObject1.toJSONString(); |
| | | // 重新发起请求以获取该页的数据 |
| | | response = new HttpHandler.Builder() |
| | | .setHeaders(headers) |
| | | .setUri(URL) |
| | | .setPath(path) |
| | | .setJson(add) |
| | | .build() |
| | | .doPost(); |
| | | |
| | | jsonResponse = JSON.parseObject(response); |
| | | data = jsonResponse.getJSONObject("data").getJSONArray("rows"); |
| | | for (int j = 0; j < data.size(); j++) { |
| | | JSONObject jsonObjectNew = data.getJSONObject(j); |
| | | Date modifyTime = sdf1.parse(jsonObjectNew.get("modifytime").toString()); |
| | | String matnr = jsonObjectNew.get("number").toString(); |
| | | String name = jsonObjectNew.get("name").toString(); |
| | | String createTime = jsonObjectNew.get("createtime").toString(); |
| | | Double height = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield9"); |
| | | Double width = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield8"); |
| | | Double length = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield7"); |
| | | Double grossweight = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield6"); |
| | | Double netweight = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield"); |
| | | Double unit = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield2"); |
| | | // 生成商品档案 |
| | | Double height1 = height * 10; |
| | | Double width1 = width * 10; |
| | | Double length1 = length * 10; |
| | | Mat mat = matService.selectByMatnr(matnr); |
| | | if (mat == null) { |
| | | mat = new Mat(); |
| | | mat.setMatnr(matnr); |
| | | mat.setMaktx(name); |
| | | mat.setTagId(tag.getId()); |
| | | mat.setWeight(grossweight);//净重 |
| | | mat.setUnits(netweight);//毛重 |
| | | mat.setSafeQty(unit);// |
| | | mat.setManLength(length1); |
| | | mat.setHeight(height1); |
| | | mat.setWidth(width1); |
| | | mat.setCreateTime(sdf1.parse(createTime)); |
| | | mat.setUpdateTime(modifyTime); |
| | | mat.setStatus(1); |
| | | if (!matService.insert(mat)) { |
| | | callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料出错!" + mat, false); |
| | | log.info("同步新物料出错!参数:[{}]、[{}]", mat, jsonObjectNew); |
| | | } else { |
| | | callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料成功!", true); |
| | | success = true; |
| | | } |
| | | } else { |
| | | boolean isUpdated = false; |
| | | if (mat.getUpdateTime().compareTo(modifyTime) != 0) { |
| | | // 更新字段 |
| | | if (!mat.getMaktx().equals(name)) mat.setMaktx(name); |
| | | if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight); |
| | | if (mat.getUnits().compareTo(netweight) != 0) mat.setUnits(netweight); |
| | | if (mat.getSafeQty().compareTo(unit) != 0) mat.setSafeQty(unit); |
| | | if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length1); |
| | | if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height1); |
| | | if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width1); |
| | | if (mat.getCreateTime().compareTo(sdf1.parse(createTime)) != 0) |
| | | mat.setCreateTime(sdf1.parse(createTime)); |
| | | mat.setUpdateTime(modifyTime); |
| | | isUpdated = true; |
| | | } |
| | | // 执行更新操作 |
| | | if (isUpdated) { |
| | | if (!matService.updateById(mat)) { |
| | | callApiLogSaveMat(mat, kingDeeUtilType, "更新物料出错!" + mat, false); |
| | | log.info("更新物料[商品编号:{}], 更新失败!", mat.getMatnr()); |
| | | } else { |
| | | callApiLogSaveMat(mat, kingDeeUtilType, "更新物料成功!", true); |
| | | success = true; |
| | | log.info("更新物料[商品编号:{}]", mat.getMatnr()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (success) { |
| | | docType.setUpdateTime(now); |
| | | docTypeService.updateById(docType); |
| | | } |
| | | } |
| | | }catch (Exception e) { |
| | | log.error("fail", e); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | } |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | public void callApiLogSaveMat(Mat mat, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) { |
| | | apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL, |
| | | "物料编号:" + mat.getMatnr() + "、物料名称:" + mat.getMaktx() + "、毛重:" + mat.getWeight() |