src/main/java/com/zy/asrs/controller/MatController.java
@@ -135,6 +135,24 @@ return R.ok(); } @RequestMapping(value = "/mat/KingDeeadd/auth") @ManagerAuth public R KingDeeadd(Mat mat) { if (null != matService.selectByMatnr(mat.getMatnr())) { return R.error("编号已存在"); } Date now = new Date(); mat.setCreateBy(getUserId()); mat.setCreateTime(now); mat.setUpdateBy(getUserId()); mat.setUpdateTime(now); mat.setStatus(1); if (!matService.insert(mat)) { throw new CoolException("添加失败,请联系管理员"); } return R.ok(); } @RequestMapping(value = "/mat/update/auth") @ManagerAuth public R update(Mat mat){ src/main/java/com/zy/asrs/controller/OpenController.java
@@ -204,4 +204,7 @@ System.out.println(JSON.toJSONString(param1)); } /*********************************同步物料档案和订单****************************************************/ } src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -14,7 +14,7 @@ /** * 将已完成order和orderDetl移动到log表 */ @Scheduled(cron = "0/30 * * * * ?") //@Scheduled(cron = "0/30 * * * * ?") public void execute(){ orderMoveHistoryHandler.start(); } src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
@@ -13,7 +13,7 @@ @Autowired private InboundOrderHandler inboundOrderHandler; @Scheduled(cron = "0/3 * * * * ? ") @Scheduled(cron = "0 * * * * ?") void login(){ Boolean fig=false; if(fig){ src/main/java/com/zy/asrs/task/kingdee/OutboundOrderScheduler.java
File was deleted src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
New file @@ -0,0 +1,55 @@ package com.zy.asrs.task.kingdee; import com.core.common.Cools; import com.zy.asrs.entity.Order; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.task.handler.OrderSyncHandler; import com.zy.asrs.task.kingdee.handler.ReviewOrderSyncHandler; import com.zy.common.entity.Parameter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; /** * Created by vincent on 2020/7/7 */ @Slf4j @Component public class ReviewOrderSyncScheduler { @Autowired private ReviewOrderSyncHandler reviewOrderSyncHandler; @Autowired private OrderService orderService; @Autowired private ApiLogService apiLogService; // @Scheduled(cron = "0 0 1 * * ? ") public void clearApiLog(){ try { apiLogService.clearWeekBefore(); } catch (Exception e) { log.error("第三方接口日志自动清除失败(范围:一周之前", e); } } @Scheduled(cron = "0/3 * * * * ? ") @Async("orderThreadPool") public void completeAndReport(){ List<Order> orders = orderService.selectComplete(); for (Order order : orders) { ReturnT<String> result = reviewOrderSyncHandler.start(order); if (!result.isSuccess()) { log.error("单据[orderNo={}]上报erp失败", order.getOrderNo()); } } } } src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -71,7 +71,7 @@ @Transactional public synchronized ReturnT<String> start() { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //登录金蝶r //登录金蝶 ReturnT<String> start = loginAuthenticationHandler.start(); for(int i=0;i<14;i++) { InFormIdParam inFormIdParam = new InFormIdParam(); @@ -89,7 +89,7 @@ //生产领料 case 3 : inFormIdParam.setFormId("PRD_PickMtrl");docName=22;anfme ="FActualQty"; break; //生产退料 case 4 : inFormIdParam.setFormId("BD_MATERIAL");docName=24;anfme ="FQty"; break; case 4 : inFormIdParam.setFormId("PRD_ReturnMtrl");docName=24;anfme ="FQty"; break; //生产补料 case 5 : inFormIdParam.setFormId("PRD_FeedMtrl");docName=25;anfme ="FActualQty"; break; //直接调拨单 @@ -109,7 +109,7 @@ //销售退货 case 13 : inFormIdParam.setFormId("SAL_RETURNSTOCK");docName=33;anfme ="FRealQty"; break; } inFormIdParam.setLimit(10); inFormIdParam.setLimit(100); inFormIdParam.setStartRow("0"); Date time=new Date(); String FDocumentStatus=null; @@ -124,9 +124,9 @@ Tag tag = tagService.selectById(20); //最新时间 time=tag.getCreateTime(); //物料状态 //物料状态 FUseOrgId .FNumber FDocumentStatus="C"; jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(time)+"' and FDocumentStatus='"+FDocumentStatus+"'"); jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(time)+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='201'"); jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus"); // FName : 物料名称 ; // FNumber :物料编号; @@ -137,7 +137,7 @@ //获取最新时间 DocType docType= docTypeService.selectById(docName); //单据状态 FDocumentStatus="C"; FDocumentStatus="B"; jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"' and FDocumentStatus='"+FDocumentStatus+"'"); jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+anfme+",FDocumentStatus"); // FBillNo :单据编号; @@ -152,8 +152,6 @@ JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("data", jsonObject); String add = jsonObject1.toJSONString(); System.out.println(add); //上报 String response = ""; boolean success = false; @@ -169,6 +167,9 @@ .build() .doPost(); JSONArray data = JSON.parseArray(response); if(data.size()>0){ success = true; } if(i==0){ for (int j = 0; j < data.size(); j++) { JSONArray jsonArray = data.getJSONArray(j); @@ -181,8 +182,9 @@ mat.setMatnr(jsonArray.get(1).toString()); mat.setMaktx(jsonArray.get(0).toString()); mat.setSpecs(jsonArray.get(3).toString());//规格 mat.setTagId(20L); //对美国时间进行转换 DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(2).toString(), formatter); String format = dateFormat.format(dateTime); @@ -192,18 +194,18 @@ mat.setStatus(1); //最新抓取商品时间 tag.setCreateTime(date); // tagService.update(tag,new EntityWrapper<Tag>().eq("id",20)); // if (!matService.insert(mat)) { // throw new CoolException("服务器内部错误,请联系管理员"); // } else { // log.info("同步新物料[商品编号:{}]", mat.getMatnr()); // } tagService.update(tag,new EntityWrapper<Tag>().eq("id",20)); if (!matService.insert(mat)) { throw new CoolException("服务器内部错误,请联系管理员"); } else { log.info("同步新物料[商品编号:{}]", mat.getMatnr()); } } } }else { for(int j=0;j<data.size();j++){ JSONArray jsonArray = data.getJSONArray(j); Order order = orderService.selectByNo(jsonArray.get(0).toString()); Order order = orderService.selectByNo(jsonArray.get(0).toString()); if (Cools.isEmpty(order)) { DocType docType = docTypeService.selectById(docName); Date now = new Date(); @@ -245,23 +247,28 @@ null // 备注 ); //对美国时间进行转换 DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(1).toString(), formatter); String format = dateFormat.format(dateTime); Date date = sdf.parse(format); //最新抓取时间 docType.setCreateTime(date); // docTypeService.update(docType,new EntityWrapper<DocType>().eq("doc_id",docName)); // if (!orderService.insert(order)) { // throw new CoolException("生成单据主档失败,请联系管理员"); // } docTypeService.update(docType,new EntityWrapper<DocType>().eq("doc_id",docName)); if (!orderService.insert(order)) { throw new CoolException("生成单据主档失败,请联系管理员"); } } //物料编码 Mat mat = matService.selectByMatnr(jsonArray.get(2).toString()); if (Cools.isEmpty(mat)) { throw new CoolException(jsonArray.get(2).toString() + "编号商品检索失败,请先添加商品"); } OrderDetl orderDetl1=orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no",jsonArray.get(0).toString()).eq("matnr",jsonArray.get(2).toString())); if(!Cools.isEmpty(orderDetl1)){ continue; } DocType docType = docTypeService.selectById(docName); OrderDetl orderDetl = new OrderDetl(); orderDetl.sync(mat); orderDetl.setBatch(null); @@ -274,9 +281,16 @@ orderDetl.setUpdateTime(new Date()); orderDetl.setStatus(1); orderDetl.setQty(0.0D); // if (!orderDetlService.insert(orderDetl)) { // throw new CoolException("生成单据明细失败,请联系管理员"); // } DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; LocalDateTime dateTime = LocalDateTime.parse(jsonArray.get(1).toString(), formatter); String format = dateFormat.format(dateTime); Date date = sdf.parse(format); //最新抓取时间 docType.setCreateTime(date); if (!orderDetlService.insert(orderDetl)) { throw new CoolException("生成单据明细失败,请联系管理员"); } } } } catch (Exception e) { @@ -287,8 +301,8 @@ try { // 保存接口日志 apiLogService.save( "登录金蝶", MesConstant.URL + MesConstant.PAKIN_URL, "轮询数据", URL + inaddress, null, "127.0.0.1", add, src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java
@@ -91,7 +91,7 @@ // 保存接口日志 apiLogService.save( "登录金蝶", MesConstant.URL + MesConstant.PAKIN_URL, URL + loginaddress, null, "127.0.0.1", JSON.toJSONString(loginParam), src/main/java/com/zy/asrs/task/kingdee/handler/OutboundOrderHandler.java
File was deleted src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
New file @@ -0,0 +1,204 @@ package com.zy.asrs.task.kingdee.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.Tag; import com.zy.asrs.entity.param.InFormIdParam; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.constant.MesConstant; import com.zy.common.model.MesPakinParam; import com.zy.common.model.MesPakoutParam; import com.zy.common.utils.HttpHandler; 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 org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Set; /** * Created by vincent on 2020/7/7 */ @Slf4j @Service public class ReviewOrderSyncHandler extends AbstractHandler<String> { @Value("${erp.address.URL}") //端口 private String URL; @Value("${erp.address.outaddress}") //审核地址 private String outaddress; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Autowired private LoginAuthenticationHandler loginAuthenticationHandler; @Transactional public ReturnT<String> start(Order order) { //登录金蝶r ReturnT<String> start = loginAuthenticationHandler.start(); DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } InFormIdParam inFormIdParam = new InFormIdParam(); int docId = Long.valueOf(docType.getDocId()).intValue(); switch (docId) { //采购入库 case 13: inFormIdParam.setFormId("STK_InStock"); break; //采购退料 case 21: inFormIdParam.setFormId("PUR_MRB"); break; //生产领料 case 22: inFormIdParam.setFormId("PRD_PickMtrl"); break; //生产退料 case 24: inFormIdParam.setFormId("PRD_ReturnMtrl"); break; //生产补料 case 25: inFormIdParam.setFormId("PRD_FeedMtrl"); break; //直接调拨单 case 26: inFormIdParam.setFormId("STK_TransferDirect"); break; //盘盈单 case 28: inFormIdParam.setFormId("STK_StockCountGain"); break; //盘亏单 case 29: inFormIdParam.setFormId("STK_StockCountLoss"); break; //其他出库 case 30: inFormIdParam.setFormId("STK_MisDelivery"); break; //简单生产领料 case 31: inFormIdParam.setFormId("SP_PickMtrl"); break; //简单生产退料 case 32: inFormIdParam.setFormId("SP_ReturnMtrl"); break; //销售出库 case 14: inFormIdParam.setFormId("SAL_OUTSTOCK"); break; //销售退货 case 33: inFormIdParam.setFormId("SAL_RETURNSTOCK"); break; } //条件拼接 JSONObject jsonObject = new JSONObject(); jsonObject.put("Numbers",order.getOrderNo()); JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("data", jsonObject); jsonObject1.put("FormId",inFormIdParam.getFormId()); String add = jsonObject1.toJSONString(); //上报 String response = ""; boolean success = false; try { //获取Cookie值 HashMap<String, Object> headers = new HashMap<>(); headers.put("Cookie", start.getContent()); response = new HttpHandler.Builder() .setHeaders(headers) .setUri(URL) .setPath(outaddress) .setJson(add) .build() .doPost(); JSONObject data = JSON.parseObject(response); Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess"); String bool=IsSuccess.toString(); //上报完成订单4转6 if(bool.equals("true")){ success = true; order.setSettle(6L); orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo())); } } catch (Exception e) { log.error("fail", e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { // 保存接口日志 apiLogService.save( "审核", URL+ outaddress, null, "127.0.0.1", add, response, success ); } catch (Exception e) { log.error("", e); } } return SUCCESS; } public static Object findValueByKey(JSONObject json, String key) { Set<String> keySet = json.keySet(); for (String k : keySet) { Object v = json.get(k); if (k.equals(key)) { return v; } else if (v instanceof JSONArray) { int size = ((JSONArray) v).size(); for (int i = 0; i <= size - 1; i++) { Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key); if (result != null){ return result; } } } else if (v instanceof JSONObject){ Object result = findValueByKey((JSONObject) v, key); if (result != null){ return result; } } } return null; } }