| | |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.entity.result.OpenInventoryVo; |
| | | import com.zy.asrs.entity.result.OpenSummaryVo; |
| | | import com.zy.asrs.entity.result.TokenVo; |
| | | import com.zy.asrs.service.LocDetlService; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.service.OpenService; |
| | |
| | | // System.out.println(JSON.toJSONString(param1)); |
| | | // } |
| | | |
| | | /*========================================new Agreement==============================================================*/ |
| | | |
| | | /** |
| | | * 获取token |
| | | * @param param |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @PostMapping("/getToken") |
| | | public synchronized R getToken(@RequestBody(required = true) TokenParam param, |
| | | HttpServletRequest request){ |
| | | authNew(param, param, request); |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | TokenVo tokenVo = new TokenVo(); |
| | | String token = Cools.enToken(System.currentTimeMillis() + param.getAppId(), param.getAppSecret()); |
| | | tokenVo.setToken(token); |
| | | tokenVo.setValidTime(30); |
| | | return R.ok().add(tokenVo); |
| | | } |
| | | |
| | | private void authNew(TokenParam param, Object obj, HttpServletRequest request) { |
| | | log.info("{}接口被访问;appSecret:{};请求数据:{}", "open/sensorType/list/auth/v1", param.getAppSecret(), JSON.toJSONString(obj)); |
| | | request.setAttribute("cache", obj); |
| | | if (!auth) { |
| | | return; |
| | | } |
| | | if (Cools.isEmpty(param.getAppId()) || Cools.isEmpty(param.getAppSecret())) { |
| | | throw new CoolException("认证失败,请确认appId和appSecret无误!"); |
| | | } |
| | | if (!param.getAppId().contains("HLWMS")){ |
| | | throw new CoolException("认证失败,请确认appId无误!"); |
| | | } |
| | | if (!APP_KEY_LIST.contains(param.getAppSecret())) { |
| | | throw new CoolException("认证失败,请确认appSecret无误!"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 物料基础信息同步 |
| | | * @param appkey |
| | | * @param param |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @PostMapping("/erp/mat/sync") |
| | | public synchronized R syncMatInfoV2(@RequestHeader(required = false) String appkey, |
| | | @RequestBody(required = false) List<MatSyncParam.MatParam> param, |
| | | HttpServletRequest request){ |
| | | if (Cools.isEmpty(param)){ |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | MatSyncParam matSyncParam = new MatSyncParam(); |
| | | List<MatSyncParam.MatParam> objects = new ArrayList<>(); |
| | | objects = param; |
| | | matSyncParam.matDetails = objects; |
| | | openService.syncMat(matSyncParam); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 入/出库通知单下发 |
| | | * @param param |
| | | * @return |
| | | */ |
| | | @PostMapping("/erp/order/add") |
| | | public synchronized R addOrder(@RequestBody OpenOrderParam param){ |
| | | if (Cools.isEmpty(param)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | if (Cools.isEmpty(param.getOrderNo())){ |
| | | return R.error("单据编号[orderNo]不能为空"); |
| | | } |
| | | if (Cools.isEmpty(param.getOrderType())){ |
| | | return R.error("单据类型[orderType]不能为空"); |
| | | } |
| | | if (Cools.isEmpty(param.getWkType())){ |
| | | return R.error("业务类型[wkType]不能为空"); |
| | | } |
| | | if (Cools.isEmpty(param.getOrderItems())){ |
| | | return R.error("订单明细[orderItems]不能为空"); |
| | | } |
| | | openService.orderCreate(param); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 库存明细查询 |
| | | * @param param |
| | | * @return |
| | | */ |
| | | @PostMapping("/erp/inventory/details") |
| | | public synchronized R queryInventoryDetails(@RequestBody OpenInventoryParam param){ |
| | | if (Cools.isEmpty(param)){ |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | OpenInventoryVo openInventoryVo = openService.queryInventoryDetails(param); |
| | | return R.ok(openInventoryVo); |
| | | } |
| | | |
| | | /** |
| | | * 库存汇总查询 |
| | | * @param param |
| | | * @return |
| | | */ |
| | | @PostMapping("/erp/inventory/summary") |
| | | public synchronized R queryInventorySummary(@RequestBody OpenSummaryParam param){ |
| | | if (Cools.isEmpty(param)){ |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | OpenSummaryVo openSummaryVo = openService.queryInventorySummary(param); |
| | | return R.ok(openSummaryVo); |
| | | } |
| | | } |
| | |
| | | private String memo; |
| | | |
| | | /** |
| | | * 操作类型 |
| | | */ |
| | | @ApiModelProperty(value= "操作类型") |
| | | @TableField("operate_type") |
| | | private Integer operateType; |
| | | |
| | | /** |
| | | * 状态 1: 进行中 0: 初始 2:已完成 |
| | | */ |
| | | @ApiModelProperty(value= "状态 2:已完成 1: 进行中 0: 初始 ") |
| | |
| | | |
| | | public Order() {} |
| | | |
| | | public Order(String uuid,String orderNo,String orderTime,Long docType,Long itemId,String itemName,Long allotItemId,String defNumber,String number,String cstmr,String cstmrName,String tel,String operMemb,Double totalFee,Double discount,Double discountFee,Double otherFee,Double actFee,Integer payType,String salesman,Integer accountDay,Integer postFeeType,Double postFee,Date payTime,Date sendTime,String shipName,String shipCode,Long settle,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo,Integer operateType) { |
| | | this.uuid = uuid; |
| | | this.orderNo = orderNo; |
| | | this.orderTime = orderTime; |
| | | this.docType = docType; |
| | | this.itemId = itemId; |
| | | this.itemName = itemName; |
| | | this.allotItemId = allotItemId; |
| | | this.defNumber = defNumber; |
| | | this.number = number; |
| | | this.cstmr = cstmr; |
| | | this.cstmrName = cstmrName; |
| | | this.tel = tel; |
| | | this.operMemb = operMemb; |
| | | this.totalFee = totalFee; |
| | | this.discount = discount; |
| | | this.discountFee = discountFee; |
| | | this.otherFee = otherFee; |
| | | this.actFee = actFee; |
| | | this.payType = payType; |
| | | this.salesman = salesman; |
| | | this.accountDay = accountDay; |
| | | this.postFeeType = postFeeType; |
| | | this.postFee = postFee; |
| | | this.payTime = payTime; |
| | | this.sendTime = sendTime; |
| | | this.shipName = shipName; |
| | | this.shipCode = shipCode; |
| | | this.settle = settle; |
| | | this.status = status; |
| | | this.createBy = createBy; |
| | | this.createTime = createTime; |
| | | this.updateBy = updateBy; |
| | | this.updateTime = updateTime; |
| | | this.memo = memo; |
| | | this.operateType = operateType; |
| | | } |
| | | |
| | | public Order(String uuid,String orderNo,String orderTime,Long docType,Long itemId,String itemName,Long allotItemId,String defNumber,String number,String cstmr,String cstmrName,String tel,String operMemb,Double totalFee,Double discount,Double discountFee,Double otherFee,Double actFee,Integer payType,String salesman,Integer accountDay,Integer postFeeType,Double postFee,Date payTime,Date sendTime,String shipName,String shipCode,Long settle,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { |
| | | this.uuid = uuid; |
| | | this.orderNo = orderNo; |
| | |
| | | @TableField("det_id") |
| | | private Integer detId; |
| | | |
| | | /** |
| | | * 备用1 |
| | | */ |
| | | @ApiModelProperty(value= "行内码 唯一标识") |
| | | @TableField("standby1") |
| | | private String standby1; |
| | | |
| | | /** |
| | | * 备用2 |
| | | */ |
| | | @ApiModelProperty(value= "托盘码") |
| | | @TableField("standby2") |
| | | private String standby2; |
| | | |
| | | /** |
| | | * 备用3 |
| | | */ |
| | | @ApiModelProperty(value= "计划跟踪号") |
| | | @TableField("standby3") |
| | | private String standby3; |
| | | |
| | | /** |
| | | * 备用1 |
| | | */ |
| | | @ApiModelProperty(value= "建议入库仓库") |
| | | @TableField("box_type1") |
| | | private String boxType1; |
| | | |
| | | /** |
| | | * 备用2 |
| | | */ |
| | | @ApiModelProperty(value= "建议出库仓库") |
| | | @TableField("box_type2") |
| | | private String boxType2; |
| | | |
| | | /** |
| | | * 备用3 |
| | | */ |
| | | @ApiModelProperty(value= "备用3") |
| | | @TableField("box_type3") |
| | | private String boxType3 = "1"; |
| | | |
| | | |
| | | public OrderDetl() { |
| | | } |
| | |
| | | package com.zy.asrs.entity.param; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | |
| | | /** |
| | | * 商品编号 |
| | | */ |
| | | @JsonProperty("matNr") |
| | | private String matnr; |
| | | |
| | | /** |
| | | * 商品名称 |
| | | */ |
| | | @JsonProperty("makTx") |
| | | private String maktx; |
| | | |
| | | /** |
| | | * 商品分类 |
| | | */ |
| | | @JsonProperty("groupId") |
| | | private String groupCode; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 规格 |
| | | */ |
| | | @JsonProperty("spec") |
| | | private String specs; |
| | | |
| | | /** |
| | |
| | | private Integer danger; |
| | | |
| | | /** |
| | | * 状态 1: 正常 0: 禁用 |
| | | * 状态 1: 新增(默认) 2: 修改 3: 禁用 4: 启用 |
| | | */ |
| | | @JsonProperty("operateType") |
| | | private Integer status; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 备注 |
| | | */ |
| | | @JsonProperty("describle") |
| | | private String memo; |
| | | } |
| | | |
| New file |
| | |
| | | package com.zy.asrs.entity.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class OpenInventoryParam { |
| | | |
| | | /** |
| | | * 仓库编码 |
| | | */ |
| | | private String wareHouseId; |
| | | |
| | | /** |
| | | * 库位编码 |
| | | */ |
| | | private String locId; |
| | | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matNr; |
| | | |
| | | /** |
| | | * 订单号/工单号/mes工单号 |
| | | */ |
| | | private String orderNo; |
| | | |
| | | /** |
| | | * 计划跟踪号 |
| | | */ |
| | | private String planNo; |
| | | |
| | | /** |
| | | * 批次号 |
| | | */ |
| | | private String batch; |
| | | |
| | | /** |
| | | * 物料组 |
| | | */ |
| | | private String matGroup; |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity.param; |
| | | |
| | | import com.core.common.Cools; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class OpenOrderParam { |
| | | |
| | | /** |
| | | * 订单编码 |
| | | */ |
| | | private String orderNo; |
| | | |
| | | /** |
| | | * 单据内码 唯一标识 若没有可以补充订单编码 |
| | | */ |
| | | private String orderInternalCode; |
| | | |
| | | /** |
| | | * 订单类型 1 出库单 2 入库单 3 调拨单 |
| | | */ |
| | | private long orderType; |
| | | |
| | | /** |
| | | * 业务类型 枚举类型 采购入库单 销售退货单 销售出库单 调拨申请单 |
| | | */ |
| | | private String wkType; |
| | | |
| | | /** |
| | | * 业务日期 时间戳 精确到秒 |
| | | */ |
| | | private Date businessTime; |
| | | |
| | | /** |
| | | * 创建日期 |
| | | */ |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * 订单明细 |
| | | */ |
| | | private List<OrderItem> orderItems; |
| | | |
| | | /** |
| | | * 入/出库接驳站点 (出库时将物料出库后运输至该站点 入库时从该站点将物料运回库中) 需要则补充 否则不用补充 |
| | | */ |
| | | private String stationId; |
| | | |
| | | /** |
| | | * 操作类型 1 新增(默认) 2 修改 3 取消 |
| | | */ |
| | | private Integer operateType; |
| | | |
| | | @Data |
| | | @AllArgsConstructor |
| | | public static class OrderItem { |
| | | /** |
| | | * 行内码 唯一标识 |
| | | */ |
| | | private String lineId; |
| | | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matNr; |
| | | |
| | | /** |
| | | * 物料名称 |
| | | */ |
| | | private String makTx; |
| | | |
| | | /** |
| | | * 数量 小数点默认4位 |
| | | */ |
| | | private Double anfme; |
| | | |
| | | /** |
| | | * 规格 |
| | | */ |
| | | private String spec; |
| | | |
| | | /** |
| | | * 型号 |
| | | */ |
| | | private String model; |
| | | |
| | | /** |
| | | * 单位 |
| | | */ |
| | | private String unit; |
| | | |
| | | /** |
| | | * 批次号 |
| | | */ |
| | | private String batch; |
| | | |
| | | /** |
| | | * 托盘码 若订单类型为出库单时 则指定该托盘出库 |
| | | */ |
| | | private String palletId; |
| | | |
| | | /** |
| | | * 计划跟踪号 |
| | | */ |
| | | private String planNo; |
| | | |
| | | /** |
| | | * 建议入库仓库 |
| | | */ |
| | | private String targetWareHouseId; |
| | | |
| | | /** |
| | | * 建议出库仓库 |
| | | */ |
| | | private String sourceWareHouseId; |
| | | |
| | | public static boolean hasLineNumber(List<OrderItem> list, OrderItem orderItem) { |
| | | for (OrderItem item : list) { |
| | | if (item.getLineId().equals(orderItem.getLineId()) && item.getMatNr().equals(orderItem.getMatNr()) && Cools.eq(item.getModel(),orderItem.getModel()) && |
| | | Cools.eq(item.getBatch(),orderItem.getBatch()) && Cools.eq(item.getPalletId(),orderItem.getPalletId()) && Cools.eq(item.getPlanNo(),orderItem.getPlanNo()) && |
| | | Cools.eq(item.getSourceWareHouseId(),orderItem.getSourceWareHouseId()) && Cools.eq(item.getSpec(),orderItem.getSpec()) && Cools.eq(item.getUnit(),orderItem.getUnit()) && |
| | | Cools.eq(item.getTargetWareHouseId(),orderItem.getTargetWareHouseId())){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public static OrderItem findLineNumber(List<OrderItem> list, String lineId, String matNr, String makTx, Double anfme, String spec, String model, String unit, String batch, String palletId, String planNo, String targetWarehouseId, String sourceWarehouseId) { |
| | | for (OrderItem orderItem : list) { |
| | | if (orderItem.getLineId().equals(lineId) && orderItem.getMatNr().equals(matNr) && Cools.eq(orderItem.getModel(),model) && |
| | | Cools.eq(orderItem.getBatch(),batch) && Cools.eq(orderItem.getPalletId(),palletId) && Cools.eq(orderItem.getPlanNo(),planNo) && |
| | | Cools.eq(orderItem.getSourceWareHouseId(),sourceWarehouseId) && Cools.eq(orderItem.getSpec(),spec) && Cools.eq(orderItem.getUnit(),unit) && |
| | | Cools.eq(orderItem.getTargetWareHouseId(),targetWarehouseId)){ |
| | | return orderItem; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class OpenSummaryParam { |
| | | |
| | | /** |
| | | * 仓库编码 |
| | | */ |
| | | private String wareHouseId; |
| | | |
| | | /** |
| | | * 物料编码 多个以英文 , 分隔 |
| | | */ |
| | | private String matNr; |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class TokenParam { |
| | | /** |
| | | * 应用编码 wms线下分配 |
| | | */ |
| | | private String appId; |
| | | |
| | | /** |
| | | * 应用密钥 wms线下分配 |
| | | */ |
| | | private String appSecret; |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity.result; |
| | | |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.util.List; |
| | | @Data |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class OpenInventoryVo { |
| | | |
| | | private List<LocDetl> inventoryList; |
| | | |
| | | private class Inventory{ |
| | | |
| | | /** |
| | | * 库位编码 |
| | | */ |
| | | private String locId; |
| | | |
| | | /** |
| | | * 仓库编码 |
| | | */ |
| | | private String wareHouseId; |
| | | |
| | | /** |
| | | * 仓库名称 |
| | | */ |
| | | private String wareHouseName; |
| | | |
| | | /** |
| | | * 托盘码 如果一个托盘上备了2个工单号 则分为两条 |
| | | */ |
| | | private String palletId; |
| | | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matNr; |
| | | |
| | | /** |
| | | * 物料名称 |
| | | */ |
| | | private String makTx; |
| | | |
| | | /** |
| | | * 数量 若有小数点默认保留2位 |
| | | */ |
| | | private Double anfme; |
| | | |
| | | /** |
| | | * 单位 |
| | | */ |
| | | private String unit; |
| | | |
| | | /** |
| | | * 库存状态 1,正常 2.冻结 |
| | | */ |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 绑定的订单类型 1 出库单 2 入库单 3 备料单 4 调拨单 未绑定时为空 |
| | | */ |
| | | private Integer orderType; |
| | | |
| | | /** |
| | | * 订单号、备料单号 未绑定时为空 |
| | | */ |
| | | private String orderNo; |
| | | |
| | | /** |
| | | * 计划跟踪号 未绑定时为空 |
| | | */ |
| | | private String planNo; |
| | | |
| | | /** |
| | | * 批次号 |
| | | */ |
| | | private String batch; |
| | | } |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity.result; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class OpenSummaryVo { |
| | | |
| | | private List<OpenSummary> openSummaryList; |
| | | |
| | | @Data |
| | | public static class OpenSummary { |
| | | |
| | | /** |
| | | * 仓库编码 |
| | | */ |
| | | private String wareHouseId; |
| | | |
| | | /** |
| | | * 仓库名称 |
| | | */ |
| | | private String wareHouseName; |
| | | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matNr; |
| | | |
| | | /** |
| | | * 物料名称 |
| | | */ |
| | | private String matTx; |
| | | |
| | | /** |
| | | * 数量 若有小数点默认保留2位 |
| | | */ |
| | | private Double anfme; |
| | | } |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity.result; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class TokenVo { |
| | | |
| | | /** |
| | | * token值 |
| | | */ |
| | | private String token; |
| | | |
| | | /** |
| | | * 有效时间 单位:分钟 |
| | | */ |
| | | private Integer validTime; |
| | | } |
| | |
| | | List<StockStatisDTO> asrsAndErpList(Map<String, Object> condition); |
| | | |
| | | long asrsAndErpCount(Map<String, Object> condition); |
| | | |
| | | List<LocDetl> queryInventoryDetails(String locId, String matNr, String orderNo, String planNo, String batch); |
| | | |
| | | Double queryInventorySummary(String wareHouseId, String s); |
| | | } |
| | |
| | | List<LocDetl> selectLocDetlUnilateralMoveShuttle(String matnr, String batch, String grade, Integer crnNo); |
| | | |
| | | Map<String, Double> getAnfmeByLocNos(List<String> locNos); |
| | | |
| | | List<LocDetl> queryInventoryDetails(String locId, String matNr, String orderNo, String planNo, String batch); |
| | | |
| | | Double queryInventorySummary(java.lang.String wareHouseId, java.lang.String s); |
| | | } |
| | |
| | | |
| | | import com.core.common.R; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.entity.result.OpenInventoryVo; |
| | | import com.zy.asrs.entity.result.OpenOrderCompeteResult; |
| | | import com.zy.asrs.entity.result.OpenSummaryVo; |
| | | import com.zy.asrs.entity.result.StockVo; |
| | | |
| | | import java.util.List; |
| | |
| | | * @param param |
| | | */ |
| | | void syncMat(MatSyncParam param); |
| | | |
| | | void orderCreate(OpenOrderParam param); |
| | | |
| | | OpenInventoryVo queryInventoryDetails(OpenInventoryParam param); |
| | | |
| | | OpenSummaryVo queryInventorySummary(OpenSummaryParam param); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> queryInventoryDetails(String locId, String matNr, String orderNo, String planNo, String batch) { |
| | | return this.baseMapper.queryInventoryDetails(locId, matNr, orderNo, planNo, batch); |
| | | } |
| | | |
| | | @Override |
| | | public Double queryInventorySummary(String wareHouseId, String s) { |
| | | return this.baseMapper.queryInventorySummary(wareHouseId, s); |
| | | } |
| | | |
| | | @Override |
| | | public LocDetl selectItem(String locNo, WrkDetl wrkDetl) { |
| | | List<LocDetl> locDetls = this.baseMapper.selectItem3(locNo, wrkDetl.getMatnr()); |
| | | if (locDetls != null) { |
| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.BaseRes; |
| | | import com.core.common.Cools; |
| | | import com.core.common.R; |
| | | import com.core.common.SnowflakeIdWorker; |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.entity.result.OpenInventoryVo; |
| | | import com.zy.asrs.entity.result.OpenOrderCompeteResult; |
| | | import com.zy.asrs.entity.result.OpenSummaryVo; |
| | | import com.zy.asrs.entity.result.StockVo; |
| | | import com.zy.asrs.mapper.TagMapper; |
| | | import com.zy.asrs.service.*; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | |
| | | @Override |
| | | @Transactional |
| | | public void syncMat(MatSyncParam param) { |
| | | if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <= 0) { |
| | | if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <=0 ) { |
| | | throw new CoolException("商品数据为空"); |
| | | } |
| | | |
| | | for (MatSyncParam.MatParam matParam : param.getMatDetails()) { |
| | | if (Cools.isEmpty(matParam.getMatnr())) { |
| | | for(MatSyncParam.MatParam matParam : param.getMatDetails()){ |
| | | if(Cools.isEmpty(matParam.getMatnr())){ |
| | | throw new CoolException("商品编码不能为空"); |
| | | } |
| | | |
| | |
| | | } else { |
| | | tagId = tagService.getTop().getId(); |
| | | } |
| | | mat.sync(param); |
| | | mat.sync(matParam); |
| | | // mat.setMatnr(param.getMatnr()); |
| | | // mat.setMaktx(param.getMaktx()); |
| | | // mat.setSpecs(param.getSpecs()); |
| | |
| | | log.info("同步新物料[商品编号:{}]", mat.getMatnr()); |
| | | } |
| | | } else { |
| | | mat.sync(param); |
| | | if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()))) { |
| | | mat.sync(matParam); |
| | | if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) { |
| | | throw new CoolException("更新已存在商品信息失败,请联系管理员"); |
| | | } |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void orderCreate(OpenOrderParam param) { |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | if (!Cools.isEmpty(order)){ |
| | | throw new CoolException(param.getOrderNo() + "订单已存在,请勿重复创建"); |
| | | } |
| | | Date now = new Date(); |
| | | order = new Order( |
| | | String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] |
| | | param.getOrderNo(), // 订单编码[非空] |
| | | DateUtils.convert(now), //单据日期 |
| | | param.getOrderType(), //订单类型 |
| | | null, //项目编号 |
| | | null, //项目名称 客户PO号 |
| | | null, //调拨项目编号 |
| | | null, //初始票据号 |
| | | null, //票据号 |
| | | null, //客户编号 |
| | | null, //客户 |
| | | param.getOrderInternalCode(), //单据内码 |
| | | param.getWkType(), //业务类型 |
| | | null, //合计金额 |
| | | null, //优惠率 |
| | | null, //优惠金额 |
| | | null, //销售或采购费用合计 |
| | | null, //实付金额 |
| | | null, //付款类型 1: 现金 2: 记账 |
| | | null, //业务员 |
| | | null, //结算天数 |
| | | null, //邮费支付类型 1: 在线支付 2: 货到付款 |
| | | null, //邮费 |
| | | param.getBusinessTime(), //业务日期 |
| | | param.getCreateTime(), //创建日期 |
| | | null, //物流名称 |
| | | null, //物流单号 |
| | | 1L, //订单状态 |
| | | 1, //状态 1: 正常 0: 禁用 |
| | | 9527L, //添加人员 |
| | | now, //添加时间 |
| | | 9527L, //修改人员 |
| | | now, //修改时间 |
| | | param.getStationId(), //入/出库接驳站点 |
| | | param.getOperateType() // 操作类型 1.新增 2.修改 3.取消 |
| | | ); |
| | | if (!orderService.insert(order)){ |
| | | throw new CoolException("保存订单主档失败,请联系管理员!"+order); |
| | | } |
| | | List<OpenOrderParam.OrderItem> list = new ArrayList<>(); |
| | | List<OpenOrderParam.OrderItem> orderItems = param.getOrderItems(); |
| | | for (OpenOrderParam.OrderItem item : orderItems){ |
| | | OpenOrderParam.OrderItem orderItem = new OpenOrderParam.OrderItem( |
| | | item.getLineId(), |
| | | item.getMatNr(), |
| | | item.getMakTx(), |
| | | item.getAnfme(), |
| | | item.getSpec(), |
| | | item.getModel(), |
| | | item.getUnit(), |
| | | item.getBatch(), |
| | | item.getPalletId(), |
| | | item.getPlanNo(), |
| | | item.getTargetWareHouseId(), |
| | | item.getSourceWareHouseId() |
| | | ); |
| | | if (OpenOrderParam.OrderItem.hasLineNumber(list,orderItem)){ |
| | | OpenOrderParam.OrderItem oi = OpenOrderParam.OrderItem.findLineNumber( |
| | | list, |
| | | item.getLineId(), |
| | | item.getMatNr(), |
| | | item.getMakTx(), |
| | | item.getAnfme(), |
| | | item.getSpec(), |
| | | item.getModel(), |
| | | item.getUnit(), |
| | | item.getBatch(), |
| | | item.getPalletId(), |
| | | item.getPlanNo(), |
| | | item.getTargetWareHouseId(), |
| | | item.getSourceWareHouseId() |
| | | ); |
| | | assert oi != null; |
| | | oi.setAnfme(oi.getAnfme() + orderItem.getAnfme()); |
| | | } else { |
| | | list.add(orderItem); |
| | | } |
| | | } |
| | | for (OpenOrderParam.OrderItem orderItem : list) { |
| | | Mat mat = matService.selectByMatnr(orderItem.getMatNr()); |
| | | if (Cools.isEmpty(mat)){ |
| | | throw new CoolException("订单明细中的商品编号不存在:" + orderItem.getMatNr()); |
| | | } |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | orderDetl.sync(mat); |
| | | orderDetl.setOrderNo(order.getOrderNo()); // 订单编号 |
| | | orderDetl.setOrderId(order.getId()); // 订单内码 |
| | | orderDetl.setStandby1(order.getTel()); // 行内码 唯一标识 |
| | | orderDetl.setAnfme(orderItem.getAnfme()); // 订单数量 |
| | | orderDetl.setBarcode(orderItem.getBatch()); // 批次 |
| | | orderDetl.setStandby2(orderItem.getPalletId()); // 托盘码 |
| | | orderDetl.setStandby3(orderItem.getPlanNo()); // 计划跟踪号 |
| | | orderDetl.setBoxType1(orderItem.getSourceWareHouseId()); // 建议入库仓库 |
| | | orderDetl.setBoxType2(orderItem.getTargetWareHouseId()); // 建议出库仓库 |
| | | orderDetl.setCreateBy(9527L); |
| | | orderDetl.setCreateTime(now); |
| | | orderDetl.setUpdateBy(9527L); |
| | | orderDetl.setUpdateTime(now); |
| | | orderDetl.setStatus(1); |
| | | orderDetl.setQty(0.0D); |
| | | // orderDetl.setPakinPakoutStatus(1); |
| | | if (!orderDetlService.insert(orderDetl)) { |
| | | throw new CoolException("保存订单明细失败,请联系管理员!"+orderDetl); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public OpenInventoryVo queryInventoryDetails(OpenInventoryParam param) { |
| | | List<LocDetl> locDetlList = locDetlService.queryInventoryDetails(param.getLocId(), param.getMatNr(), param.getOrderNo(), param.getPlanNo(), param.getBatch()); |
| | | if (Cools.isEmpty(locDetlList)){ |
| | | return new OpenInventoryVo(); |
| | | } |
| | | return new OpenInventoryVo(locDetlList); |
| | | } |
| | | |
| | | @Override |
| | | public OpenSummaryVo queryInventorySummary(OpenSummaryParam param) { |
| | | String matNr = param.getMatNr(); |
| | | String[] split = matNr.split(","); |
| | | List<OpenSummaryVo.OpenSummary> openSummaryList = new ArrayList<>(); |
| | | for (String s : split) { |
| | | OpenSummaryVo.OpenSummary openSummary = new OpenSummaryVo.OpenSummary(); |
| | | Double summary = locDetlService.queryInventorySummary(param.getWareHouseId(), s); |
| | | openSummary.setWareHouseId(param.getWareHouseId()); // 仓库编码 |
| | | openSummary.setMatNr(s); // 物料编码 |
| | | openSummary.setAnfme(summary); // 数量 |
| | | openSummaryList.add(openSummary); |
| | | } |
| | | return new OpenSummaryVo(openSummaryList); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | //@Scheduled(cron = "0/5 * * * * ? ") |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | @Async("orderThreadPool") |
| | | public void completeAndReport(){ |
| | | // String erpReport = Parameter.get().getErpReport(); |
| | | // if (!Cools.isEmpty(erpReport) && erpReport.equals("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()); |
| | | // } |
| | | // } |
| | | // } |
| | | String erpReport = Parameter.get().getErpReport(); |
| | | if (!Cools.isEmpty(erpReport) && erpReport.equals("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()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.WrkDetlLog; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.WrkDetlLogService; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.common.model.InventoryAdjustmentParam; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class InventoryAdjustmentReportHandler extends AbstractHandler<String> { |
| | | |
| | | @Autowired |
| | | private WrkDetlLogService wrkDetlLogService; |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | | @Transactional |
| | | public ReturnT<String> report(WrkMast wrkMast){ |
| | | WrkDetlLog wrkDetlLog = wrkDetlLogService.selectOne(new EntityWrapper<WrkDetlLog>().eq("wrk_no", wrkMast.getWrkNo()).eq("io_time", wrkMast.getIoTime())); |
| | | InventoryAdjustmentParam param = new InventoryAdjustmentParam(); |
| | | param.setChangeType(wrkMast.getIoType()); // 调整类型 |
| | | param.setWareHouseId("HLWMS"); // 仓库编码 |
| | | param.setSourceLocId(wrkMast.getIoType() != 1 ? wrkMast.getSourceLocNo() : ""); // 源库位号 |
| | | param.setTargetLocId(wrkMast.getIoType() != 101 ? wrkMast.getLocNo() : ""); // 目标库位号 移库时有 |
| | | param.setMatNr(wrkDetlLog.getMatnr()); // 物料编码 |
| | | param.setQty(wrkDetlLog.getAnfme().toString()); // 调整数量 |
| | | param.setPalletId(wrkMast.getBarcode()); // 托盘号 |
| | | |
| | | String response = ""; |
| | | boolean success = false; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri("http://localhost:8080/api") |
| | | .setPath("/inventory/adjustment") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code") == 200){ |
| | | success = true; |
| | | }else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", "http://localhost:8080/api"+"/inventory/adjustment", JSON.toJSONString(param), response); |
| | | throw new CoolException("库存调整上报mes系统失败"); |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("fail",e); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | }finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "库存调整主动上报", |
| | | "http://localhost:8080/api/inventory/adjustment", |
| | | null, |
| | | "127.0.0.1", |
| | | JSON.toJSONString(param), |
| | | response, |
| | | success |
| | | ); |
| | | }catch (Exception e) { |
| | | log.error("",e); |
| | | } |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | 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.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.MesReportParam; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class MesOrderSyncHandler extends AbstractHandler<String> { |
| | | |
| | | @Autowired |
| | | private DocTypeService docTypeService; |
| | | |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | |
| | | @Autowired |
| | | private OrderService orderService; |
| | | |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | | @Transactional |
| | | public ReturnT<String> start(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | MesReportParam mesReportParam = new MesReportParam(); |
| | | mesReportParam.setOrderNo(order.getOrderNo()); // 订单编码 |
| | | mesReportParam.setPlanNo(orderDetl.getStandby3()); // 计划跟踪号 |
| | | mesReportParam.setLineId(orderDetl.getStandby1()); // 行内码 |
| | | mesReportParam.setWarehouseId("HL"); // 仓库编码 |
| | | mesReportParam.setLocId(""); // 库位号 |
| | | mesReportParam.setMatNr(orderDetl.getMatnr()); // 物料编码 |
| | | mesReportParam.setQty(orderDetl.getQty().toString()); // 本次出/入数量 |
| | | mesReportParam.setPalletId(""); // 托盘号 |
| | | mesReportParam.setBatch(orderDetl.getBatch()); // 批次 |
| | | |
| | | String response = ""; |
| | | boolean success = false; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.URL) |
| | | .setPath(MesConstant.PAKIN_URL) |
| | | .setJson(JSON.toJSONString(mesReportParam)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code") == 200) { |
| | | success = true; |
| | | // 修改订单状态 4.完成 ===>> 6.已上报 |
| | | if (!orderService.updateSettle(order.getId(), 6L, null)){ |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | }else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(mesReportParam), response); |
| | | throw new CoolException("上报mes系统失败"); |
| | | } |
| | | }catch (Exception e) { |
| | | log.error("fail", e); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | }finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "入/出库结果上报", |
| | | MesConstant.URL + MesConstant.PAKIN_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | JSON.toJSONString(mesReportParam), |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { log.error("", e); } |
| | | } |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | } |
| | |
| | | @Autowired |
| | | private DocTypeService docTypeService; |
| | | |
| | | /** |
| | | * 入出库结果上报 |
| | | * @param order |
| | | * @return |
| | | */ |
| | | |
| | | @Transactional |
| | | public ReturnT<String> start(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| New file |
| | |
| | | package com.zy.common.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class InventoryAdjustmentParam { |
| | | |
| | | /** |
| | | * 调整类型 |
| | | */ |
| | | private Integer changeType; |
| | | |
| | | /** |
| | | * 仓库编码 |
| | | */ |
| | | private String wareHouseId; |
| | | |
| | | /** |
| | | * 源库位号 |
| | | */ |
| | | private String sourceLocId; |
| | | |
| | | /** |
| | | * 目标库位号 移库时有 |
| | | */ |
| | | private String targetLocId; |
| | | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matNr; |
| | | |
| | | /** |
| | | * 调整数量 |
| | | */ |
| | | private String qty; |
| | | |
| | | /** |
| | | * 托盘号 |
| | | */ |
| | | private String palletId; |
| | | } |
| New file |
| | |
| | | package com.zy.common.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class MesReportParam { |
| | | |
| | | /** |
| | | * 订单编码 |
| | | */ |
| | | private String orderNo; |
| | | |
| | | /** |
| | | * 计划跟踪号 |
| | | */ |
| | | private String planNo; |
| | | |
| | | /** |
| | | * 行内码 |
| | | */ |
| | | private String lineId; |
| | | |
| | | /** |
| | | * 仓库编码 |
| | | */ |
| | | private String warehouseId; |
| | | |
| | | /** |
| | | * 库位号 |
| | | */ |
| | | private String locId; |
| | | |
| | | /** |
| | | * 物料编码 |
| | | */ |
| | | private String matNr; |
| | | |
| | | /** |
| | | * 本次出/入库数量 |
| | | */ |
| | | private String qty; |
| | | |
| | | /** |
| | | * 托盘号 |
| | | */ |
| | | private String palletId; |
| | | |
| | | /** |
| | | * 批次 |
| | | */ |
| | | private String batch; |
| | | } |
| | |
| | | AND outOrderNo like '%' + #{outOrderNo} + '%' |
| | | </if> |
| | | </select> |
| | | |
| | | <select id="queryInventoryDetails" parameterType="map" resultMap="BaseResultMap"> |
| | | SELECT * |
| | | FROM asr_loc_detl |
| | | <where> |
| | | <if test="locId != null and locId != ''"> |
| | | AND loc_id = #{locId} |
| | | </if> |
| | | <if test="matNr != null and matNr != ''"> |
| | | AND mat_nr = #{matNr} |
| | | </if> |
| | | <if test="orderNo != null and orderNo != ''"> |
| | | AND order_no = #{orderNo} |
| | | </if> |
| | | <if test="planNo != null and planNo != ''"> |
| | | AND plan_no = #{planNo} |
| | | </if> |
| | | <if test="batch != null and batch != ''"> |
| | | AND batch = #{batch} |
| | | </if> |
| | | </where> |
| | | </select> |
| | | |
| | | <select id="queryInventorySummary" resultType="java.lang.Double"> |
| | | SELECT SUM(anfme) FROM asr_loc_detl WHERE matnr = #{s} |
| | | </select> |
| | | </mapper> |
| | |
| | | <result column="ware_mame" property="wareName" /> |
| | | <result column="packing" property="packing" /> |
| | | <result column="det_id" property="detId"/> |
| | | <result column="standby1" property="standby1" /> |
| | | <result column="standby2" property="standby2" /> |
| | | <result column="standby3" property="standby3" /> |
| | | <result column="box_type1" property="boxType1" /> |
| | | <result column="box_type2" property="boxType2" /> |
| | | <result column="box_type3" property="boxType3" /> |
| | | </resultMap> |
| | | |
| | | <select id="selectItem" resultMap="BaseResultMap"> |
| | |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="memo" property="memo" /> |
| | | <result column="move_status" property="moveStatus" /> |
| | | <result column="operate_type" property="operateType" /> |
| | | |
| | | <result column="temp1" property="temp1" /> |
| | | <result column="temp2" property="temp2" /> |