zy-asrs-common/src/main/java/com/zy/asrs/common/model/MesPakinParam.java
New file @@ -0,0 +1,43 @@ package com.zy.asrs.common.model; import lombok.Data; import java.util.ArrayList; import java.util.List; /** * Created by vincent on 2022/4/21 */ @Data public class MesPakinParam { // 入库时间 private String pakinTime; // 来源地 - 写死 private String lgortFrom; // 目的地 - 写死 private String lgortTo; private List<Detl> list = new ArrayList<>(); @Data public static class Detl { // 物料条码 private String barcode; // 数量 private Double anfme; public Detl() { } public Detl(String barcode, Double anfme) { this.barcode = barcode; this.anfme = anfme; } } } zy-asrs-common/src/main/java/com/zy/asrs/common/model/MesPakoutParam.java
New file @@ -0,0 +1,71 @@ package com.zy.asrs.common.model; import com.alibaba.fastjson.JSON; import com.zy.asrs.framework.common.DateUtils; import lombok.Data; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by vincent on 2022/4/21 */ @Data public class MesPakoutParam { // true: 订单出; false: 手动出 private boolean tag; // 单据编号 private String orderNo; // 出库时间 private String pakoutTime; // 来源地 - 写死 private String lgortFrom; // 目的地 - 写死 private String lgortTo; // 客户号 private String kunnr; private List<Detl> list = new ArrayList<>(); @Data public static class Detl { // 物料条码 private String barcode; // 数量 private Double anfme; public Detl() { } public Detl(String barcode, Double anfme) { this.barcode = barcode; this.anfme = anfme; } } public static void main(String[] args) { MesPakoutParam param = new MesPakoutParam(); param.setTag(true); param.setOrderNo("8135998"); // param.setPakoutTime(DateUtils.convert(new Date())); param.setLgortFrom("5006"); param.setLgortTo("1111"); Detl detl = new Detl(); param.getList().add(detl); detl.setBarcode("1100146-10000-23132132"); detl.setAnfme(1.0D); System.out.println(JSON.toJSONString(param)); } } zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/Order.java
@@ -39,6 +39,7 @@ * ID */ @ApiModelProperty(value= "ID") @TableId(value = "id", type = IdType.AUTO) private Long id; /** zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderMapper.java
@@ -6,12 +6,16 @@ import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface OrderMapper extends BaseMapper<Order> { void updateOrder1(Long orderId,@Param("userId")Long userId); List<Order> selectComplete(); int updateSettle(@Param("orderId") Long orderId, @Param("settle") Long settle, @Param("userId") Long userId, @Param("hostId") Long hostId); } zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java
@@ -26,4 +26,7 @@ List<OrderNameListDto> selectAllorderNo(Long hostId); List<String> selectAllOutOrderNo(String orderNo,Long hostId); List<Order> selectComplete(); } zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java
@@ -38,6 +38,11 @@ private DocTypeService docTypeService; @Override public List<Order> selectComplete() { return this.baseMapper.selectComplete(); } @Override public List<OrderDetl> selectWorkingDetls(Long orderId) { return orderDetlMapper.selectWorkingDetls(orderId); } zy-asrs-common/src/main/resources/mapper/wms/OrderMapper.xml
@@ -2,6 +2,47 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.asrs.common.wms.mapper.OrderMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.common.wms.entity.Order"> <id column="id" property="id" /> <result column="uuid" property="uuid" /> <result column="order_no" property="orderNo" /> <result column="order_time" property="orderTime" /> <result column="doc_type" property="docType" /> <result column="item_id" property="itemId" /> <result column="item_name" property="itemName" /> <result column="allot_item_id" property="allotItemId" /> <result column="def_number" property="defNumber" /> <result column="number" property="number" /> <result column="cstmr" property="cstmr" /> <result column="cstmr_name" property="cstmrName" /> <result column="tel" property="tel" /> <result column="oper_memb" property="operMemb" /> <result column="total_fee" property="totalFee" /> <result column="discount" property="discount" /> <result column="discount_fee" property="discountFee" /> <result column="other_fee" property="otherFee" /> <result column="act_fee" property="actFee" /> <result column="pay_type" property="payType" /> <result column="salesman" property="salesman" /> <result column="account_day" property="accountDay" /> <result column="post_fee_type" property="postFeeType" /> <result column="post_fee" property="postFee" /> <result column="pay_time" property="payTime" /> <result column="send_time" property="sendTime" /> <result column="ship_name" property="shipName" /> <result column="ship_code" property="shipCode" /> <result column="settle" property="settle" /> <result column="status" property="status" /> <result column="create_by" property="createBy" /> <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> <result column="memo" property="memo" /> <result column="host_id" property="hostId" /> </resultMap> <update id="updateOrder1"> update wms_order set settle = 6 @@ -26,5 +67,14 @@ and host_id = #{hostId} </update> <select id="selectComplete" resultMap="BaseResultMap"> select top 5 * from man_order where 1=1 and settle = 4 and status = 1 order by create_time asc </select> </mapper> zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/OrderSyncScheduler.java
New file @@ -0,0 +1,53 @@ package com.zy.asrs.wms.task; import com.zy.asrs.common.wms.entity.Order; import com.zy.asrs.common.wms.service.*; import com.zy.asrs.wms.task.handler.OrderSyncHandler; 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 com.zy.asrs.wms.task.core.ReturnT; import java.util.List; /** * Created by vincent on 2020/7/7 */ @Slf4j @Component public class OrderSyncScheduler { @Autowired private OrderSyncHandler orderSyncHandler; @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/5 * * * * ? ") @Async("orderThreadPool") public void completeAndReport(){ // String erpReport = Parameter.get().getErpReport(); if (true) { List<Order> orders = orderService.selectComplete(); for (Order order : orders) { ReturnT<String> result = orderSyncHandler.start(order); if (!result.isSuccess()) { log.error("单据[orderNo={}]上报erp失败", order.getOrderNo()); } } } } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/OrderSyncHandler.java
New file @@ -0,0 +1,95 @@ package com.zy.asrs.wms.task.handler; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.common.openapi.service.ApiLogService; import com.zy.asrs.common.wms.entity.*; import com.zy.asrs.common.wms.service.DocTypeService; import com.zy.asrs.common.wms.service.OrderDetlService; import com.zy.asrs.common.wms.service.OrderService; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.wms.task.AbstractHandler; import com.zy.asrs.wms.task.core.ReturnT; import com.zy.asrs.wms.utils.PostMesDataUtils; 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.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; /** * Created by vincent on 2020/7/7 */ @Slf4j @Service public class OrderSyncHandler extends AbstractHandler<String> { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Value("${erp.url}") private String ERP_URL; @Value("${erp.report}") private String ERP_REPORT; @Value("${erp.login}") private String ERP_LOGIN; @Transactional public ReturnT<String> start(Order order) { DocType docType = docTypeService.getById(order.getDocType()); if (null == docType) { return new ReturnT<String>().setCode(500); } List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId,order.getId())); //上报念初ERP 【 上报三方平台 】 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); String nowFormat = dateFormat.format(new Date()); ArrayList<LinkedHashMap<String, Object>> mats = new ArrayList<>(); String orderNo = order.getOrderNo(); for (OrderDetl orderDetl:orderDetls){ LinkedHashMap<String, Object> mat = new LinkedHashMap<>(); mat.put("GoodsCode", orderDetl.getMatnr()); mat.put("Num", orderDetl.getAnfme()); if (!Cools.isEmpty(orderDetl.getBatch())) { mat.put("BatchNo", orderDetl.getBatch()); } if (!Cools.isEmpty(orderDetl.getThreeCode())) { mat.put("DepotName", orderDetl.getThreeCode()); } if (!Cools.isEmpty(orderDetl.getSupp())) { mat.put("FromDanCode", orderDetl.getSupp()); } if (!Cools.isEmpty(orderDetl.getSuppCode())) { mat.put("FromNo", orderDetl.getSuppCode()); } mats.add(mat); } LinkedHashMap<String, Object> param = new LinkedHashMap<>(); param.put("Login", ERP_LOGIN); param.put("DanType", order.getDocType$()+"SH"); param.put("Date", nowFormat); param.put("DanCode", orderNo); param.put("Data", mats); ReturnT<String> mesReturn = new PostMesDataUtils().getMesData("上报MES", ERP_URL, ERP_REPORT, param); return mesReturn; } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkLogHandler.java
@@ -73,7 +73,7 @@ while (iterator.hasNext()) { WrkDetl wrkDetl = iterator.next(); if (!Cools.isEmpty(wrkDetl.getOrderNo())) { wrkDetlsKeyOrder.add(wrkDetl); orderService.checkComplete(wrkDetl.getOrderNo(),hostId); iterator.remove(); } } @@ -118,87 +118,6 @@ } } if (!wrkDetlsKeyOrder.isEmpty()) { //上报念初ERP 【 上报三方平台 】 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); String nowFormat = dateFormat.format(new Date()); ArrayList<LinkedHashMap<String, Object>> mats = new ArrayList<>(); String orderNo = ""; for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { orderNo = wrkDetl.getOrderNo(); LinkedHashMap<String, Object> mat = new LinkedHashMap<>(); mat.put("GoodsCode", wrkDetl.getMatnr()); mat.put("Num", wrkDetl.getAnfme()); if (!Cools.isEmpty(wrkDetl.getBatch())) { mat.put("BatchNo", wrkDetl.getBatch()); } if (!Cools.isEmpty(wrkDetl.getThreeCode())) { mat.put("DepotName", wrkDetl.getThreeCode()); } if (!Cools.isEmpty(wrkDetl.getSupp())) { mat.put("FromDanCode", wrkDetl.getSupp()); } if (!Cools.isEmpty(wrkDetl.getSuppCode())) { mat.put("FromNo", wrkDetl.getSuppCode()); } mats.add(mat); } Order order = orderService.selectByNo(orderNo, hostId); if (order != null) { LinkedHashMap<String, Object> param = new LinkedHashMap<>(); param.put("Login", ERP_LOGIN); param.put("DanType", order.getDocType$()+"SH"); param.put("Date", nowFormat); param.put("DanCode", orderNo); param.put("Data", mats); String response = ""; try { response = new HttpHandler.Builder() .setUri(ERP_URL) .setPath(ERP_REPORT + Utils.ncErpDataEncode(param)) .build() .doGet(); JSONObject jsonObject = JSON.parseObject(response); JSONArray result = jsonObject.getJSONArray("result"); Object object = result.get(0); JSONObject data = JSON.parseObject(object.toString()); if (data.getBoolean("State")) { //上报成功 } else { //上报失败 exceptionHandle("上报ERP失败[workNo={0}]失败", wrkMast.getWrkNo()); } } catch (Exception e) { e.printStackTrace(); //异常上报失败 exceptionHandle("上报ERP异常失败[workNo={0}]失败", wrkMast.getWrkNo()); } finally { //记录上报数据 OperateLog operateLog = new OperateLog(); operateLog.setAction("上报ERP," + ERP_URL + ERP_REPORT); operateLog.setRequest(Utils.ncErpDataEncode(param)); operateLog.setResponse(response); operateLog.setCreateTime(new Date()); operateLog.setSystem("WMS"); operateLog.setUserId(9527L); operateLog.setIp("127.0.0.1"); operateLogService.save(operateLog); //记录上报数据 OperateLog operateLog1 = new OperateLog(); operateLog1.setAction("上报ERP," + ERP_URL + ERP_REPORT); operateLog1.setRequest(param.toString()); operateLog1.setResponse(response); operateLog1.setCreateTime(new Date()); operateLog1.setSystem("WMS"); operateLog1.setUserId(9527L); operateLog1.setIp("127.0.0.1"); operateLogService.save(operateLog1); } } } // 保存工作主档历史档 if (!wrkMastLogService.saveToHistory(wrkMast.getId())) { exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); @@ -209,16 +128,16 @@ } // 保存工作明细档历史档 if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) { // exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除工作明细档 if (!wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId))) { // exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo()); exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo()); } // 修改订单状态 作业中 ===>> 已完成 for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { orderService.checkComplete(wrkDetl.getOrderNo(), hostId); } // // 修改订单状态 作业中 ===>> 已完成 // for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { // orderService.checkComplete(wrkDetl.getOrderNo(), hostId); // } } catch (Exception e) { log.error("fail", e); e.printStackTrace(); zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/PostMesDataUtils.java
New file @@ -0,0 +1,83 @@ package com.zy.asrs.wms.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.zy.asrs.common.sys.entity.OperateLog; import com.zy.asrs.common.utils.HttpHandler; import com.zy.asrs.common.utils.Utils; import com.zy.asrs.framework.common.SpringUtils; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.common.sys.service.OperateLogService; import com.zy.asrs.wms.task.AbstractHandler; import com.zy.asrs.wms.task.core.ReturnT; import lombok.extern.slf4j.Slf4j; import java.util.Date; import java.util.LinkedHashMap; @Slf4j public class PostMesDataUtils extends AbstractHandler<String> { public ReturnT<String> getMesData(String name,String URL,String mesPath, LinkedHashMap<String, Object> combParam){ if(combParam != null){ String response = ""; boolean success = false; try { response = new HttpHandler.Builder() .setUri(URL) .setPath(mesPath + Utils.ncErpDataEncode(combParam)) .build() .doGet(); System.out.println("response:"+response); JSONObject jsonObject = JSON.parseObject(response); JSONArray result = jsonObject.getJSONArray("result"); Object object = result.get(0); JSONObject data = JSON.parseObject(object.toString()); if (data.getBoolean("State")) { //上报成功 success = true; } else { //上报失败 log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response); throw new CoolException("上报"+name); } if (jsonObject.getInteger("code").equals(200) || jsonObject.getInteger("Code").equals(200)) { } else { } } catch (Exception e) { log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } finally { try { OperateLogService operateLogService = SpringUtils.getBean(OperateLogService.class); //记录上报数据 OperateLog operateLog = new OperateLog(); operateLog.setAction("上报ERP," + URL + mesPath); operateLog.setRequest(Utils.ncErpDataEncode(combParam)); operateLog.setResponse(response); operateLog.setCreateTime(new Date()); operateLog.setSystem("WMS"); operateLog.setUserId(9527L); operateLog.setIp("127.0.0.1"); operateLogService.save(operateLog); //记录上报数据 OperateLog operateLog1 = new OperateLog(); operateLog1.setAction("上报ERP," + URL + mesPath); operateLog1.setRequest(combParam.toString()); operateLog1.setResponse(response); operateLog1.setCreateTime(new Date()); operateLog1.setSystem("WMS"); operateLog1.setUserId(9527L); operateLog1.setIp("127.0.0.1"); operateLogService.save(operateLog1); } catch (Exception e) { log.error("", e); } } } return SUCCESS; } }