|  |  |  | 
|---|
|  |  |  | 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.DateUtils; | 
|---|
|  |  |  | import com.core.common.SnowflakeIdWorker; | 
|---|
|  |  |  | import com.core.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.entity.*; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.OpenOrderCompleteParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.OpenOrderPakinParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.OpenOrderPakoutParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.*; | 
|---|
|  |  |  | import com.zy.asrs.entity.result.OpenOrderCompeteResult; | 
|---|
|  |  |  | import com.zy.asrs.entity.result.StockVo; | 
|---|
|  |  |  | import com.zy.asrs.mapper.ReportQueryMapper; | 
|---|
|  |  |  | import com.zy.asrs.mapper.TagMapper; | 
|---|
|  |  |  | import com.zy.asrs.service.*; | 
|---|
|  |  |  | import com.zy.asrs.utils.MatUtils; | 
|---|
|  |  |  | import com.zy.common.model.DetlDto; | 
|---|
|  |  |  | import com.zy.common.utils.NodeUtils; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.util.StringUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Created by vincent on 2022/4/9 | 
|---|
|  |  |  | 
|---|
|  |  |  | private PackService packService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private TagService tagService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private TagMapper tagMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ApiLogService apiLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WaitPakinService waitPakinService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkDetlService wrkDetlService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ReportQueryMapper reportQueryMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | 
|---|
|  |  |  | for (DetlDto detail : orderDetails) { | 
|---|
|  |  |  | DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme()); | 
|---|
|  |  |  | if (DetlDto.has(list, dto)) { | 
|---|
|  |  |  | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch()); | 
|---|
|  |  |  | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),dto.getCsocode(),dto.getIsoseq(),null); | 
|---|
|  |  |  | assert detlDto != null; | 
|---|
|  |  |  | detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | result.setOrderType(order.getDocType$()); | 
|---|
|  |  |  | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetls) { | 
|---|
|  |  |  | result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (order.getSettle() == 4L) { | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | 
|---|
|  |  |  | result.setOrderType(order.getDocType$()); | 
|---|
|  |  |  | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetls) { | 
|---|
|  |  |  | result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | if (!orderService.updateSettle(order.getId(), 6L, null)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void pakoutOrderCreate(OpenOrderPakoutParam param) { | 
|---|
|  |  |  | Order order = orderService.selectByNo(param.getOrderNo()); | 
|---|
|  |  |  | // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 | 
|---|
|  |  |  | if (!Cools.isEmpty(order)) { | 
|---|
|  |  |  | throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交"); | 
|---|
|  |  |  | if (order.getSettle() > 1L) { | 
|---|
|  |  |  | throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | orderService.remove(order.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE); | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | 
|---|
|  |  |  | for (DetlDto detail : orderDetails) { | 
|---|
|  |  |  | DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme()); | 
|---|
|  |  |  | if (DetlDto.has(list, dto)) { | 
|---|
|  |  |  | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch()); | 
|---|
|  |  |  | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),dto.getCsocode(),dto.getIsoseq(),null); | 
|---|
|  |  |  | assert detlDto != null; | 
|---|
|  |  |  | detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | result.setOrderType(order.getDocType$()); | 
|---|
|  |  |  | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetls) { | 
|---|
|  |  |  | result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (order.getSettle() == 4L) { | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | 
|---|
|  |  |  | result.setOrderType(order.getDocType$()); | 
|---|
|  |  |  | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetls) { | 
|---|
|  |  |  | result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | if (!orderService.updateSettle(order.getId(), 6L, null)) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void packageUp(String barcode) { | 
|---|
|  |  |  | Pack pack = packService.selectByBarcode(barcode); | 
|---|
|  |  |  | public void packageUp(PackParam param) { | 
|---|
|  |  |  | if (Cools.isEmpty(param.getBarcode())) { | 
|---|
|  |  |  | throw new CoolException("barcode不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Mat analyse = MatUtils.analyseMat(param.getBarcode()); | 
|---|
|  |  |  | Pack pack = packService.selectByBarcode(param.getBarcode()); | 
|---|
|  |  |  | if (null != pack) { | 
|---|
|  |  |  | throw new CoolException(barcode + "重复提交"); | 
|---|
|  |  |  | throw new CoolException(param.getBarcode() + "重复提交"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | pack = new Pack( | 
|---|
|  |  |  | barcode,    // 条码[非空] | 
|---|
|  |  |  | null,    // 商品编号 | 
|---|
|  |  |  | null,    // 批号 | 
|---|
|  |  |  | param.getBarcode(),    // 条码[非空] | 
|---|
|  |  |  | analyse.getMatnr(),    // 物料号 | 
|---|
|  |  |  | analyse.getBarcode(),    // 序列码 | 
|---|
|  |  |  | 1L,    // 订单状态 | 
|---|
|  |  |  | 1,    // 状态 | 
|---|
|  |  |  | now,    // 添加时间 | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Mat analyse = MatUtils.analyseMat(barcode); | 
|---|
|  |  |  | Mat mat = matService.selectByMatnr(analyse.getMatnr()); | 
|---|
|  |  |  | if (mat == null) { | 
|---|
|  |  |  | mat = new Mat(); | 
|---|
|  |  |  | // todo | 
|---|
|  |  |  | mat.setTagId(tagService.getTop().getId()); | 
|---|
|  |  |  | // 分类 | 
|---|
|  |  |  | Long tagId; | 
|---|
|  |  |  | // 一级分类 | 
|---|
|  |  |  | if (!Cools.isEmpty(param.getGroupCode()) && !Cools.isEmpty(param.getGroupName())) { | 
|---|
|  |  |  | Tag priTag = tagService.selectByName(param.getGroupCode(), 2); | 
|---|
|  |  |  | if (priTag == null) { | 
|---|
|  |  |  | Tag top = tagService.getTop(); | 
|---|
|  |  |  | NodeUtils nodeUtils = new NodeUtils(); | 
|---|
|  |  |  | nodeUtils.executePath(top.getId()); | 
|---|
|  |  |  | priTag = new Tag( | 
|---|
|  |  |  | null,    // 编号 | 
|---|
|  |  |  | param.getGroupCode(),    // 名称 | 
|---|
|  |  |  | top.getId(),    // 父级 | 
|---|
|  |  |  | top.getName(),    // 父级名称 | 
|---|
|  |  |  | nodeUtils.path.toString(),    // 关联路径 | 
|---|
|  |  |  | nodeUtils.pathName.toString(),    // 关联路径名 | 
|---|
|  |  |  | 0,    // 类型 | 
|---|
|  |  |  | null,    // 负责人 | 
|---|
|  |  |  | null,    // 图片 | 
|---|
|  |  |  | null,    // 简要描述 | 
|---|
|  |  |  | null,    // 数量 | 
|---|
|  |  |  | 2,    // 等级 | 
|---|
|  |  |  | null,    // 排序 | 
|---|
|  |  |  | 1,    // 状态 | 
|---|
|  |  |  | now,    // 添加时间 | 
|---|
|  |  |  | null,    // 添加人员 | 
|---|
|  |  |  | now,    // 修改时间 | 
|---|
|  |  |  | null,    // 修改人员 | 
|---|
|  |  |  | null    // 备注 | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (tagMapper.insert(priTag) == 0) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 二级分类 | 
|---|
|  |  |  | Tag secTag = tagService.selectByName(param.getGroupName(), 3); | 
|---|
|  |  |  | if (secTag == null) { | 
|---|
|  |  |  | NodeUtils nodeUtils = new NodeUtils(); | 
|---|
|  |  |  | nodeUtils.executePath(priTag.getId()); | 
|---|
|  |  |  | secTag = new Tag( | 
|---|
|  |  |  | null,    // 编号 | 
|---|
|  |  |  | param.getGroupName(),    // 名称 | 
|---|
|  |  |  | priTag.getId(),    // 父级 | 
|---|
|  |  |  | priTag.getName(),    // 父级名称 | 
|---|
|  |  |  | nodeUtils.path.toString(),    // 关联路径 | 
|---|
|  |  |  | nodeUtils.pathName.toString(),    // 关联路径名 | 
|---|
|  |  |  | 0,    // 类型 | 
|---|
|  |  |  | null,    // 负责人 | 
|---|
|  |  |  | null,    // 图片 | 
|---|
|  |  |  | null,    // 简要描述 | 
|---|
|  |  |  | null,    // 数量 | 
|---|
|  |  |  | 3,    // 等级 | 
|---|
|  |  |  | null,    // 排序 | 
|---|
|  |  |  | 1,    // 状态 | 
|---|
|  |  |  | now,    // 添加时间 | 
|---|
|  |  |  | null,    // 添加人员 | 
|---|
|  |  |  | now,    // 修改时间 | 
|---|
|  |  |  | null,    // 修改人员 | 
|---|
|  |  |  | null    // 备注 | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (tagMapper.insert(secTag) == 0) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | tagId = secTag.getId(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | tagId = tagService.getTop().getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | mat.setTagId(tagId); | 
|---|
|  |  |  | mat.setMatnr(analyse.getMatnr()); | 
|---|
|  |  |  | mat.setMaktx(barcode); | 
|---|
|  |  |  | mat.setMaktx(param.getMaterialName()); | 
|---|
|  |  |  | mat.setSpecs(param.getConfigureDesc()); | 
|---|
|  |  |  | mat.setModel(analyse.getModel()); | 
|---|
|  |  |  | mat.setStatus(1); | 
|---|
|  |  |  | mat.setCreateTime(now); | 
|---|
|  |  |  | mat.setUpdateTime(now); | 
|---|
|  |  |  | mat.setMemo("打包上线"); | 
|---|
|  |  |  | if (!matService.insert(mat)) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.info("打包上线添加新物料[物料号:{}]", mat.getMatnr()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public MatSyncParam syncMat(MatSyncParam param) { | 
|---|
|  |  |  | if (Cools.isEmpty(param.getMats()) || param.getMats().size() <=0 ) { | 
|---|
|  |  |  | throw new CoolException("商品数据为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | MatSyncParam matSyncParam = new MatSyncParam(); | 
|---|
|  |  |  | ArrayList<MatSyncParam.Mats> matParams = new ArrayList<>(); | 
|---|
|  |  |  | Tag tag = tagService.selectByName("全部", 1); | 
|---|
|  |  |  | for (MatSyncParam.Mats matParam : param.getMats()){ | 
|---|
|  |  |  | Date date = new Date(); | 
|---|
|  |  |  | Mat mat = matService.selectByMatnr(matParam.getMatnr()); | 
|---|
|  |  |  | if (Cools.isEmpty(mat)) { | 
|---|
|  |  |  | Mat matNew = new Mat(); | 
|---|
|  |  |  | matNew.setTagId(tag.getId()); | 
|---|
|  |  |  | matNew.setMatnr(matParam.getMatnr());//物料编码 | 
|---|
|  |  |  | matNew.setMaktx(matParam.getMaktx());//物料名称 | 
|---|
|  |  |  | matNew.setSpecs(matParam.getSpecs());//规格 | 
|---|
|  |  |  | matNew.setModel(matParam.getModel());//型号 | 
|---|
|  |  |  | matNew.setColor(matParam.getColor());//颜色 | 
|---|
|  |  |  | matNew.setUnit(matParam.getUnit());//单位 | 
|---|
|  |  |  | matNew.setMemo(matParam.getMemo());//备注 | 
|---|
|  |  |  | matNew.setCreateBy(9999L);//9999表示erp下发 | 
|---|
|  |  |  | matNew.setCreateTime(date); | 
|---|
|  |  |  | matNew.setUpdateBy(9999L);//9999表示erp下发 | 
|---|
|  |  |  | matNew.setUpdateTime(date); | 
|---|
|  |  |  | if (matService.insert(matNew)) { | 
|---|
|  |  |  | callApiLogSave(matParam, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true); | 
|---|
|  |  |  | matParam.setType(true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | callApiLogSave(matParam, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false); | 
|---|
|  |  |  | matParam.setType(false); | 
|---|
|  |  |  | matParam.setMemo("添加ERP下发商品信息失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | callApiLogSave(matParam, "/open/asrs/mat/v1", "接收ERP下发商品信息失败!!!商品已存在!!!", false); | 
|---|
|  |  |  | matParam.setType(false); | 
|---|
|  |  |  | matParam.setMemo("商品已存在!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | matParams.add(matParam); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | matSyncParam.setMats(matParams); | 
|---|
|  |  |  | return matSyncParam; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public void callApiLogSave(MatSyncParam.Mats matParam, String tableName, String response, Boolean bool) { | 
|---|
|  |  |  | apiLogService.save("ERP下发商品信息", tableName, "null", "10.10.10.1", | 
|---|
|  |  |  | "物料编码:" + matParam.getMatnr() + "、物料名称:" + matParam.getMaktx() + "、规格:" + matParam.getSpecs() + "、备注:" + matParam.getMemo(), | 
|---|
|  |  |  | response, bool); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void combMes(CombParam param) { | 
|---|
|  |  |  | Long userId=9999l; | 
|---|
|  |  |  | if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { | 
|---|
|  |  |  | callApiLogSaveMES(null, null, BaseRes.PARAM, false); | 
|---|
|  |  |  | throw new CoolException(BaseRes.PARAM); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(param.getBarcode().length()!=8){ | 
|---|
|  |  |  | callApiLogSaveMES(param, null, param.getBarcode() + ":条码长度不是8位", false); | 
|---|
|  |  |  | throw new CoolException("条码长度不是8位===>>" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否有相同条码的数据 | 
|---|
|  |  |  | if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). | 
|---|
|  |  |  | eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { | 
|---|
|  |  |  | callApiLogSaveMES(param, null, param.getBarcode() + "数据正在进行入库", false); | 
|---|
|  |  |  | throw new CoolException(param.getBarcode() + "数据正在进行入库"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); | 
|---|
|  |  |  | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); | 
|---|
|  |  |  | if (countLoc > 0) { | 
|---|
|  |  |  | callApiLogSaveMES(param, null, param.getBarcode() + ":库存条码数据已存在", false); | 
|---|
|  |  |  | throw new CoolException("库存条码数据已存在===>>" + param.getBarcode()); | 
|---|
|  |  |  | }else if (countWrk > 0){ | 
|---|
|  |  |  | callApiLogSaveMES(param, null, param.getBarcode() + ":工作明细档已存在此数据", false); | 
|---|
|  |  |  | throw new CoolException("工作明细档已存在此数据===>>" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | // 生成入库通知档 | 
|---|
|  |  |  | List<DetlDto> detlDtos = new ArrayList<>(); | 
|---|
|  |  |  | param.getCombMats().forEach(elem -> { | 
|---|
|  |  |  | DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); | 
|---|
|  |  |  | detlDto.setContainerCode(elem.getContainerCode()); | 
|---|
|  |  |  | if (DetlDto.has(detlDtos, detlDto)) { | 
|---|
|  |  |  | DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(),detlDto.getCsocode(),detlDto.getIsoseq(),detlDto.getContainerCode()); | 
|---|
|  |  |  | assert one != null; | 
|---|
|  |  |  | one.setAnfme(one.getAnfme() + detlDto.getAnfme()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | detlDtos.add(detlDto); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (DetlDto detlDto : detlDtos) { | 
|---|
|  |  |  | Mat mat = matService.selectByMatnr(detlDto.getMatnr()); | 
|---|
|  |  |  | if (Cools.isEmpty(mat)) { | 
|---|
|  |  |  | callApiLogSaveMES(param, null,mat.getMatnr()+"商品档案不存在", false); | 
|---|
|  |  |  | throw new CoolException(detlDto.getMatnr() + "商品档案不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WaitPakin waitPakin = new WaitPakin(); | 
|---|
|  |  |  | waitPakin.sync(mat); | 
|---|
|  |  |  | waitPakin.setBatch(detlDto.getBatch()); | 
|---|
|  |  |  | waitPakin.setZpallet(param.getBarcode());   // 托盘码 | 
|---|
|  |  |  | waitPakin.setIoStatus("N");     // 入出状态 | 
|---|
|  |  |  | waitPakin.setAnfme(detlDto.getAnfme());  // 数量 | 
|---|
|  |  |  | waitPakin.setStatus("Y");    // 状态 | 
|---|
|  |  |  | waitPakin.setAppeUser(userId); | 
|---|
|  |  |  | waitPakin.setAppeTime(now); | 
|---|
|  |  |  | waitPakin.setModiUser(userId); | 
|---|
|  |  |  | waitPakin.setModiTime(now); | 
|---|
|  |  |  | if (!waitPakinService.insert(waitPakin)) { | 
|---|
|  |  |  | callApiLogSaveMES(param, null,mat.getMatnr()+"保存入库通知档失败", false); | 
|---|
|  |  |  | throw new CoolException("保存入库通知档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | callApiLogSaveMES(null, null,""+e, false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | callApiLogSaveMES(param, param.getCombMats().get(0),"组托成功", true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public void callApiLogSaveMES(CombParam combParam,CombParam.CombMat combMat, String response, Boolean bool) { | 
|---|
|  |  |  | if (Cools.isEmpty(combParam)){ | 
|---|
|  |  |  | apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1", | 
|---|
|  |  |  | "", | 
|---|
|  |  |  | response, bool); | 
|---|
|  |  |  | }else if (Cools.isEmpty(combMat)){ | 
|---|
|  |  |  | apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1", | 
|---|
|  |  |  | "托盘码:" + combParam.getBarcode(), | 
|---|
|  |  |  | response, bool); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1", | 
|---|
|  |  |  | "托盘码:" + combParam.getBarcode() + "、物料编号:" + combMat.getMatnr() + "、数量:" + combMat.getAnfme(), | 
|---|
|  |  |  | response, bool); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入库记录获取 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public List<ViewWorkInBean> inlogERP() { | 
|---|
|  |  |  | List<ViewWorkInBean> viewWorkInERP = reportQueryMapper.getViewWorkInERP(); | 
|---|
|  |  |  | ArrayList<ViewWorkInBean> viewWorkInBeans = new ArrayList<>(); | 
|---|
|  |  |  | for (ViewWorkInBean viewWorkInBean:viewWorkInERP){ | 
|---|
|  |  |  | viewWorkInBean.sype(); | 
|---|
|  |  |  | viewWorkInBeans.add(viewWorkInBean); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return viewWorkInBeans; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 出库记录获取 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public List<ViewWorkInBean> outlogERP() { | 
|---|
|  |  |  | List<ViewWorkInBean> viewWorkInERP = reportQueryMapper.getViewWorkOutERP(); | 
|---|
|  |  |  | ArrayList<ViewWorkInBean> viewWorkInBeans = new ArrayList<>(); | 
|---|
|  |  |  | for (ViewWorkInBean viewWorkInBean:viewWorkInERP){ | 
|---|
|  |  |  | viewWorkInBean.sype(); | 
|---|
|  |  |  | viewWorkInBeans.add(viewWorkInBean); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return viewWorkInBeans; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public boolean syncMat(MatInfoParam param) { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | Mat mat = matService.selectByMatnr(param.getCinvcode()); | 
|---|
|  |  |  | boolean update = true; | 
|---|
|  |  |  | if(Cools.isEmpty(matService.selectByMatnr(param.getCinvcode()))){ | 
|---|
|  |  |  | //物料号 | 
|---|
|  |  |  | mat = new Mat(); | 
|---|
|  |  |  | mat.setMatnr(param.getCinvcode()); | 
|---|
|  |  |  | mat.setCreateTime(now); | 
|---|
|  |  |  | mat.setCreateBy(9999L); | 
|---|
|  |  |  | update = false; | 
|---|
|  |  |  | //            callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息失败!!!商品已存在!!!", false); | 
|---|
|  |  |  | //            param.setType(false); | 
|---|
|  |  |  | //            param.setMemo("商品已存在!"); | 
|---|
|  |  |  | //            return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //Mat mat = new Mat(); | 
|---|
|  |  |  | //物料号 | 
|---|
|  |  |  | //mat.setMatnr(param.getCinvcode()); | 
|---|
|  |  |  | //物料名称 | 
|---|
|  |  |  | mat.setMaktx(param.getCinvname()); | 
|---|
|  |  |  | //规格型号 | 
|---|
|  |  |  | mat.setSpecs(param.getCInvStd()); | 
|---|
|  |  |  | //存货分类编码 | 
|---|
|  |  |  | mat.setBrand(param.getCinvccode()); | 
|---|
|  |  |  | //存货分类名称 | 
|---|
|  |  |  | mat.setColor(param.getCInvCName()); | 
|---|
|  |  |  | //计量单位 | 
|---|
|  |  |  | mat.setUnit(param.getCComUnitName()); | 
|---|
|  |  |  | //进项税 | 
|---|
|  |  |  | mat.setPrice(param.getIImpTaxRate()); | 
|---|
|  |  |  | //销项税 | 
|---|
|  |  |  | mat.setUnits(param.getITaxRate()); | 
|---|
|  |  |  | //启用日期 | 
|---|
|  |  |  | mat.setDsDate(param.getDSDate()); | 
|---|
|  |  |  | //建档人 | 
|---|
|  |  |  | mat.setSupp(param.getCCreatePerson()); | 
|---|
|  |  |  | //建档日期 | 
|---|
|  |  |  | mat.setDInvCreateDatetime(param.getDInvCreateDatetime()); | 
|---|
|  |  |  | //通用型号 | 
|---|
|  |  |  | mat.setModel(param.getCinvdefine4()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //9999表示erp下发 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | mat.setUpdateBy(9999L); | 
|---|
|  |  |  | mat.setTagId(1L); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | mat.setUpdateTime(now); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(update){ | 
|---|
|  |  |  | if (matService.updateById(mat)){ | 
|---|
|  |  |  | callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true); | 
|---|
|  |  |  | param.setUpdate(true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | callApiLogSave(param, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false); | 
|---|
|  |  |  | param.setError(true); | 
|---|
|  |  |  | param.setMemo("添加ERP下发商品信息失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | if (matService.insert(mat)) { | 
|---|
|  |  |  | callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true); | 
|---|
|  |  |  | param.setInsert(true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | callApiLogSave(param, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false); | 
|---|
|  |  |  | param.setError(true); | 
|---|
|  |  |  | param.setMemo("添加ERP下发商品信息失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public boolean syncOrder(Map<String, Object> param, boolean pakin) { | 
|---|
|  |  |  | if(Cools.isEmpty(param) || Cools.isEmpty(param.get("orderDetails"))){ | 
|---|
|  |  |  | throw new CoolException("单据参数为空或者单据详情为空,无法生成单据信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(!Cools.isEmpty(orderService.selectByNo(param.get("id").toString()))){ | 
|---|
|  |  |  | throw new CoolException("该单据已存在,无法生成单据信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | Order order = orderMapping(param,now,pakin); | 
|---|
|  |  |  | orderService.insert(order); | 
|---|
|  |  |  | List<Map<String, Object>> orderDetails = (List<Map<String, Object>>) param.get("orderDetails"); | 
|---|
|  |  |  | orderDetails.forEach(odParam -> { | 
|---|
|  |  |  | OrderDetl od = orderDetlMapping(order,odParam,now); | 
|---|
|  |  |  | orderDetlService.insert(od); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public boolean orderDelete(String orderNo) { | 
|---|
|  |  |  | Order order = orderService.selectByNo(orderNo); | 
|---|
|  |  |  | if(Cools.isEmpty(order)){ | 
|---|
|  |  |  | throw new CoolException("单据不存在,无法删除单据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(order.getSettle() != 1){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | orderService.deleteById(order); | 
|---|
|  |  |  | orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no",orderNo)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private Order orderMapping(Map<String, Object> param, Date now, boolean pakin){ | 
|---|
|  |  |  | Order order = new Order(); | 
|---|
|  |  |  | //uuid | 
|---|
|  |  |  | order.setUuid(String.valueOf(snowflakeIdWorker.nextId())); | 
|---|
|  |  |  | //核算主体 | 
|---|
|  |  |  | //order.setItemName(param.get("account").toString()); | 
|---|
|  |  |  | order.setItemName(toString(param.get("account"))); | 
|---|
|  |  |  | //单据唯一表示 | 
|---|
|  |  |  | //order.setOrderNo(param.get("id").toString()); | 
|---|
|  |  |  | order.setOrderNo(toString(param.get("id"))); | 
|---|
|  |  |  | //业务类型 | 
|---|
|  |  |  | //order.setDefNumber(param.get("cBusType").toString()); | 
|---|
|  |  |  | order.setDefNumber(toString(param.get("cVouchType"))); | 
|---|
|  |  |  | //单据类型 | 
|---|
|  |  |  | DocType docType = docTypeService.selectOrAdd(param.get("cBusType").toString(), pakin); | 
|---|
|  |  |  | order.setDocType(docType.getDocId()); | 
|---|
|  |  |  | //单据日期 | 
|---|
|  |  |  | //order.setOrderTime(param.get("dDate").toString()); | 
|---|
|  |  |  | order.setOrderTime(toString(param.get("dDate"))); | 
|---|
|  |  |  | //供应商/客户编码 | 
|---|
|  |  |  | //order.setCstmrName(param.get("ks").toString()); | 
|---|
|  |  |  | order.setCstmrName(toString(param.get("ks"))); | 
|---|
|  |  |  | //仓库 | 
|---|
|  |  |  | //order.setTel(param.get("cWhName").toString()); | 
|---|
|  |  |  | order.setTel(toString(param.get("cWhName"))); | 
|---|
|  |  |  | //出入库类别 | 
|---|
|  |  |  | //setOperMemb(param.get("cRdName").toString()); | 
|---|
|  |  |  | order.setOperMemb(toString(param.get("cRdName"))); | 
|---|
|  |  |  | //部门 | 
|---|
|  |  |  | //order.setSalesman(param.get("cDepCode").toString()); | 
|---|
|  |  |  | order.setSalesman(toString(param.get("cDepCode"))); | 
|---|
|  |  |  | //备注 | 
|---|
|  |  |  | //order.setMemo(param.get("cMemo").toString()); | 
|---|
|  |  |  | order.setMemo(toString(param.get("cMemo"))); | 
|---|
|  |  |  | //制单人 | 
|---|
|  |  |  | //order.setShipCode(param.get("cMaker").toString()); | 
|---|
|  |  |  | order.setShipCode(toString(param.get("cMaker"))); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | order.setCreateTime(now); | 
|---|
|  |  |  | order.setUpdateTime(now); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //订单状态 | 
|---|
|  |  |  | order.setSettle(1L); | 
|---|
|  |  |  | //状态 | 
|---|
|  |  |  | order.setStatus(1); | 
|---|
|  |  |  | return order; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private OrderDetl orderDetlMapping(Order order, Map<String, Object> odParam, Date now){ | 
|---|
|  |  |  | OrderDetl od = new OrderDetl(); | 
|---|
|  |  |  | od.setOrderId(order.getId()); | 
|---|
|  |  |  | od.setOrderNo(order.getOrderNo()); | 
|---|
|  |  |  | //行唯一标识 | 
|---|
|  |  |  | //od.setItemNum(odParam.get("autoId").toString()); | 
|---|
|  |  |  | od.setItemNum(toString(odParam.get("autoId"))); | 
|---|
|  |  |  | //存货编码 | 
|---|
|  |  |  | //od.setMatnr(odParam.get("cInvCode").toString()); | 
|---|
|  |  |  | od.setMatnr(toString(odParam.get("cInvCode"))); | 
|---|
|  |  |  | //存货名称 | 
|---|
|  |  |  | //od.setMaktx(odParam.get("cInvName").toString()); | 
|---|
|  |  |  | od.setMaktx(toString(odParam.get("cInvName"))); | 
|---|
|  |  |  | //规格型号 | 
|---|
|  |  |  | //od.setSpecs(odParam.get("cInvStd").toString()); | 
|---|
|  |  |  | od.setSpecs(toString(odParam.get("cInvStd"))); | 
|---|
|  |  |  | //计量单位 | 
|---|
|  |  |  | //od.setUnit(odParam.get("cComUnitName").toString()); | 
|---|
|  |  |  | od.setUnit(toString(odParam.get("cComUnitName"))); | 
|---|
|  |  |  | //数量 | 
|---|
|  |  |  | od.setAnfme(Double.parseDouble(odParam.get("iQuantity").toString())); | 
|---|
|  |  |  | //od.setAnfme(toString(odParam.get("iQuantity"))); | 
|---|
|  |  |  | //行号 | 
|---|
|  |  |  | //od.setBrand(odParam.get("irowno").toString()); | 
|---|
|  |  |  | //od.setBrand(toString(odParam.get("irowno"))); | 
|---|
|  |  |  | od.setManu(toString(odParam.get("irowno"))); | 
|---|
|  |  |  | //销售订单号 | 
|---|
|  |  |  | //od.setColor(odParam.get("csocode").toString()); | 
|---|
|  |  |  | //od.setColor(toString(odParam.get("csocode"))); | 
|---|
|  |  |  | od.setThreeCode(toString(odParam.get("csocode"))); | 
|---|
|  |  |  | //销售订单行号 | 
|---|
|  |  |  | //od.setOrigin(odParam.get("isoseq").toString()); | 
|---|
|  |  |  | //od.setOrigin(toString(odParam.get("isoseq"))); | 
|---|
|  |  |  | od.setDeadTime(toString(odParam.get("isoseq"))); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | od.setStatus(1); | 
|---|
|  |  |  | od.setQty(0.0D); | 
|---|
|  |  |  | od.setCreateBy(9999L); | 
|---|
|  |  |  | od.setCreateTime(now); | 
|---|
|  |  |  | od.setUpdateBy(9999L); | 
|---|
|  |  |  | od.setUpdateTime(now); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return od; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private String toString(Object o){ | 
|---|
|  |  |  | if(StringUtils.isEmpty(o)){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | return o.toString(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void callApiLogSave(MatInfoParam matParam, String tableName, String response, Boolean bool) { | 
|---|
|  |  |  | apiLogService.save("ERP下发商品信息", tableName, "null", "10.10.10.1", | 
|---|
|  |  |  | "物料编码:" + matParam.getCinvcode() + "、物料名称:" + matParam.getCinvname() + "、规格:" + matParam.getCInvStd() + "、备注:" + matParam.getMemo(), | 
|---|
|  |  |  | response, bool); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void main(String[] args) { | 
|---|
|  |  |  | Object s = null; | 
|---|
|  |  |  | if(StringUtils.isEmpty(s)){ | 
|---|
|  |  |  | System.out.println("null"); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | System.out.println(s.toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|