src/main/java/com/zy/asrs/controller/AgvOpenController.java
@@ -118,7 +118,7 @@ } //出库任务 110.空板出库 if(agvWrkMast.getIoType() == 110){ agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode()); agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode()); } } src/main/java/com/zy/asrs/entity/InventoryVariance.java
New file @@ -0,0 +1,30 @@ package com.zy.asrs.entity; import com.baomidou.mybatisplus.annotations.TableName; import lombok.Data; /** * ERP - 立库 库存差异统计表 */ @Data @TableName("inventory_variance") public class InventoryVariance { //存货编码 private String matnr; //销售订单号 private String csocode; //销售订单行号 private String isoseq; //ERP存货数量 private Double iQuantity; //立库存货数量 private Double anfme; public InventoryVariance(String matnr, String csocode, String isoseq, Double iQuantity, Double anfme){ this.matnr = matnr; this.csocode = csocode; this.isoseq = isoseq; this.iQuantity = iQuantity; this.anfme = anfme; } } src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java
@@ -24,8 +24,11 @@ "\t\tROW_NUMBER() over (order by sum(a.anfme) desc) as row\n" + "\t\t, a.matnr\n" + "\t\t, sum(a.anfme) as anfme\n" + "\t\tfrom agv_loc_detl a\n" + "\t\twhere 1=1\n" + // "\t\tfrom agv_loc_detl a\n" + // "\t\twhere 1=1\n" + // "\t\t<when #{matnr} != '>" + // "\t\tAND matnr = #{matnr}" + "\t\t</when>" + "\t\tgroup by a.matnr\n" + " ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})") List<AgvLocDetl> getStockStatis(Map<String, Object> map); src/main/java/com/zy/asrs/mapper/InventoryVarianceMapper.java
New file @@ -0,0 +1,11 @@ package com.zy.asrs.mapper; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.zy.asrs.entity.InventoryVariance; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface InventoryVarianceMapper extends BaseMapper<InventoryVariance> { } src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
@@ -24,4 +24,6 @@ boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch); boolean deleteByWrkNo(int wrkNo); } src/main/java/com/zy/asrs/service/AgvWrkMastLogService.java
@@ -6,6 +6,6 @@ public interface AgvWrkMastLogService extends IService<AgvWrkMastLog> { boolean save(AgvWrkMast workNo); boolean save(AgvWrkMast agvWrkMast); } src/main/java/com/zy/asrs/service/AgvWrkMastService.java
@@ -17,4 +17,6 @@ public int containerMoveOut(List<AgvWrkMast> agvWrkMastList) throws IOException; public boolean insertByIncrease(AgvWrkMast agvWrkMast); public boolean deleteByWrkNo(int wrkNo); } src/main/java/com/zy/asrs/service/AllLocDetlService.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.AllLocDetl; import java.util.List; public interface AllLocDetlService extends IService<AllLocDetl> { public List<AllLocDetl> getByMatnrAndCsocodeAndIsoseq(String matnr, String csocode, String isoseq); } src/main/java/com/zy/asrs/service/InventoryVarianceService.java
New file @@ -0,0 +1,7 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.InventoryVariance; public interface InventoryVarianceService extends IService<InventoryVariance> { } src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -34,4 +34,6 @@ OrderDetl selectContainBatch(String batch); public OrderDetl selectByOrderNoAndMatnr(String orderNo, String matnr, String csocode, String isoseq); } src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -3,7 +3,6 @@ import com.alibaba.fastjson.JSON; 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.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; @@ -25,7 +24,6 @@ import java.util.Iterator; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; /** * Created by vincent on 2020/6/11 @@ -447,26 +445,22 @@ if (Cools.isEmpty(wrkMast)){ throw new CoolException(workNo+"工作档不存在"); } if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 29) { throw new CoolException("当前工作档已完成"); if(wrkMast.getWrkSts() > 202){ //修改AGV工作档的工作状态为205.工作完成 agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205); //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库 if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){ //修改出库站点状态 agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); } //出库任务 110.空板出库 if(wrkMast.getIoType() == 110){ agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); } } // 入库 + 库位转移 if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) { wrkMast.setWrkSts(9L); // 出库 } else if (wrkMast.getWrkSts() > 20) { wrkMast.setWrkSts(29L); } Date now = new Date(); wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true)); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); wrkMast.setModiUser(userId); // 完成操作人员记录 wrkMast.setManuType("手动完成"); if (!agvWrkMastService.updateById(wrkMast)) { throw new CoolException("修改工作档失败"); } } @Transactional @@ -475,125 +469,51 @@ if (Cools.isEmpty(wrkMast)){ throw new CoolException(workNo+"工作档不存在"); } if (wrkMast.getWrkSts() == 200) { //小车移库任务,直接删除工作档 agvWrkMastService.deleteById(wrkMast); return; //拣料入库 盘点入库不可取消 if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){ throw new CoolException("当前任务不可取消"); } String locNo = ""; // 待修改目标库位 String locSts = ""; // 待修改目标库位状态 // 入库取消(修改目标库位) if (wrkMast.getWrkSts() < 9) { locNo = wrkMast.getLocNo(); locSts = "O"; //AGV机器人未取货前取消 if(wrkMast.getWrkSts() < 203){ //入库取消 if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){ //源站点 String devNo = wrkMast.getSourceLocNo(); //目标库位 String locNo = wrkMast.getLocNo(); agvLocMastService.updateLocStsByLocNo(locNo,"O"); agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode()); // 库位转移 if (wrkMast.getIoType() == 11) { // 库位转移:源库位 AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getSourceLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,源库位不存在:"+ wrkMast.getSourceLocNo()); } locMast.setLocSts("F"); locMast.setModiTime(new Date()); locMast.setModiUser(userId); agvLocMastService.updateById(locMast); //出库取消 }else { //源库位 String locNo = wrkMast.getSourceLocNo(); //目标站点 String devNo = wrkMast.getLocNo(); agvLocMastService.updateLocStsByLocNo(locNo,"F"); agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O",""); } // 出库取消(修改源库位) } else if (wrkMast.getWrkSts() > 20) { locNo = wrkMast.getSourceLocNo(); // 出库 ===>> F.在库 if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) { locSts = "F"; // 空板出库 ===>> D.空桶/空栈板 } else if (wrkMast.getIoType() == 110) { locSts = "D"; // 库位转移 ===>> D.空桶/空栈板 } else if (wrkMast.getIoType() == 11) { locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F"; // 库位转移:目标库位 AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,目标库位不存在:"+ wrkMast.getSourceLocNo()); } locMast.setLocSts("O"); locMast.setModiTime(new Date()); locMast.setModiUser(userId); agvLocMastService.updateById(locMast); } } else { throw new CoolException("当前工作状态无法取消"); } // 订单关联 List<AgvWrkDetl> wrkDetls = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); for (AgvWrkDetl wrkDetl : wrkDetls) { if (!Cools.isEmpty(wrkDetl.getOrderNo())) { if (!BaseController.isJSON(wrkDetl.getOrderNo())) { if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { throw new CoolException("订单数据回滚失败"); } } else { // 订单合并出库 //实际取消的出库数量 Double wrkDetlAnfme = wrkDetl.getAnfme(); //订单实际出库数量 Double orderAnfme; List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class); for (OrderDto orderDto : orderDtoList) { if(wrkDetlAnfme > orderDto.getAnfme()){ orderAnfme = orderDto.getAnfme(); wrkDetlAnfme -= orderAnfme; }else { orderAnfme = wrkDetlAnfme; } if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderAnfme)) { throw new CoolException("订单数据回滚失败"); } } } } } // 取消操作人员记录 wrkMast.setManuType("手动取消"); wrkMast.setModiUser(userId); wrkMast.setModiTime(new Date()); if (!agvWrkMastService.updateById(wrkMast)) { throw new CoolException("取消工作档失败"); } // 保存工作主档历史档 if (!agvWrkMastLogService.save(wrkMast)) { throw new CoolException("保存工作历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作主档 boolean wrkMastRes = agvWrkMastService.deleteById(wrkMast); if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) { // 保存工作明细档历史档 if (!agvWrkDetlLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作档明细 boolean wrkDetlRes = agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", workNo)); } // 修改库位状态 AgvLocMast locMast = agvLocMastService.selectById(locNo); if (Cools.isEmpty(locMast)) { throw new CoolException("取消工作档失败,库位不存在:"+ locNo); //订单回滚 AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()).get(0); if(!Cools.isEmpty(agvWrkDetl.getOrderNo())){ OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(agvWrkDetl.getOrderNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime()); orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme()); orderDetlService.updateById(orderDetl); } locMast.setLocSts(locSts); locMast.setModiTime(new Date()); locMast.setModiUser(userId); boolean locMastRes = agvLocMastService.updateById(locMast); if (!wrkMastRes || !locMastRes) { throw new CoolException("保存数据失败"); //保存工作档以及明细 agvWrkMastLogService.save(wrkMast); agvWrkDetlLogService.save(wrkMast.getWrkNo()); //删除工作档以及明细 if(agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) && agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())){ throw new CoolException("删除失败,请联系管理员"); } } /* src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
@@ -1,5 +1,6 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.AgvWrkDetl; import com.zy.asrs.entity.WrkDetl; @@ -51,6 +52,7 @@ */ @Override public List<AgvWrkDetl> selectByWrkNo(Integer wrkNo) { return this.baseMapper.selectByWrkNo(wrkNo); } @@ -88,4 +90,9 @@ return baseMapper.updateOrderNo(orderNo, wrkNo, matnr, batch) > 0; } @Override public boolean deleteByWrkNo(int wrkNo) { return this.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); } } src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.exception.CoolException; import com.zy.asrs.entity.AgvWrkMast; @@ -115,6 +116,11 @@ return index > 0; } @Override public boolean deleteByWrkNo(int wrkNo) { return this.delete(new EntityWrapper<AgvWrkMast>().eq("wrk_no", wrkNo)); } private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ //往容器入场参数中放入源站点位置 for(AgvWrkMast agvWrkMast : agvWrkMastList){ src/main/java/com/zy/asrs/service/impl/AllLocDetlServiceImpl.java
@@ -1,11 +1,18 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.AllLocDetl; import com.zy.asrs.mapper.AllLocDetlMapper; import com.zy.asrs.service.AllLocDetlService; import org.springframework.stereotype.Service; import java.util.List; @Service public class AllLocDetlServiceImpl extends ServiceImpl<AllLocDetlMapper, AllLocDetl> implements AllLocDetlService { @Override public List<AllLocDetl> getByMatnrAndCsocodeAndIsoseq(String matnr, String csocode, String isoseq) { return this.selectList(new EntityWrapper<AllLocDetl>().eq("matnr",matnr).eq("three_code",csocode).eq("dead_time",isoseq)); } } src/main/java/com/zy/asrs/service/impl/InventoryVarianceServiceImpl.java
New file @@ -0,0 +1,11 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.InventoryVariance; import com.zy.asrs.mapper.InventoryVarianceMapper; import com.zy.asrs.service.InventoryVarianceService; import org.springframework.stereotype.Service; @Service public class InventoryVarianceServiceImpl extends ServiceImpl<InventoryVarianceMapper, InventoryVariance> implements InventoryVarianceService { } src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -9,6 +9,7 @@ import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.result.StockVo; import com.zy.asrs.mapper.LocDetlMapper; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.LocDetlService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.StaDescService; @@ -28,6 +29,8 @@ private StaDescService staDescService; @Autowired private LocMastService locMastService; @Autowired private BasDevpService basDevpService; @Override public Page<LocDetl> getStockOut(Page<LocDetl> page) { @@ -123,9 +126,10 @@ int ioType = anfme > issued ? 103 : 101; anfme = anfme > issued ? issued : anfme; LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderNo, anfme); List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), ioType); //List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), ioType); List<Integer> outSite = basDevpService.getAvailableOutSite(101); locDto.setStaNos(staNos); locDto.setStaNos(outSite); locDto.setCsocode(csocode); locDto.setIsoseq(isoseq); locDto.setContainerCode(locDetl.getSuppCode()); src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -1,12 +1,14 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.mapper.OrderDetlMapper; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.utils.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -104,5 +106,14 @@ // return null; } @Override public OrderDetl selectByOrderNoAndMatnr(String orderNo, String matnr, String csocode, String isoseq) { Wrapper<OrderDetl> wrapper = new EntityWrapper<OrderDetl>().eq("order_no", orderNo).eq("matnr", matnr); Utils.wapperSetCondition(wrapper,"csocode",csocode); Utils.wapperSetCondition(wrapper,"isoseq",isoseq); return this.selectOne(wrapper); } } src/main/java/com/zy/common/service/erp/ErpService.javaBinary files differ
src/main/java/com/zy/common/service/erp/entity/WlzhVStRd.java
New file @@ -0,0 +1,38 @@ package com.zy.common.service.erp.entity; import com.baomidou.mybatisplus.annotations.TableName; import lombok.Data; /* ERP中库存比对视图 */ @Data @TableName("wlzh_v_st_rd") public class WlzhVStRd { //核算主体 private String account; //仓库 private String cWhName; //存货编码 private String cInvCode; //规格型号 private String cInvStd; //计量单位 private String cComUnitName; //通用型号 private String cinvdefine4; //现存量 private Double iQuantity; //销售订单号 private String csocode; //销售订单行号 private String isoseq; } src/main/java/com/zy/common/service/erp/task/ErpScheduler.java
@@ -2,33 +2,35 @@ 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.service.*; import com.zy.asrs.entity.AllLocDetl; import com.zy.asrs.entity.InventoryVariance; import com.zy.asrs.entity.Mat; import com.zy.asrs.entity.Tag; import com.zy.asrs.service.AllLocDetlService; import com.zy.asrs.service.InventoryVarianceService; import com.zy.asrs.service.MatService; import com.zy.asrs.service.TagService; import com.zy.asrs.task.AbstractHandler; import com.zy.common.service.erp.ErpService; import com.zy.common.service.erp.dto.VoucherDto; import com.zy.common.service.erp.entity.Goods; import com.zy.common.service.erp.entity.Voucher; import com.zy.common.service.erp.entity.VoucherDetail; import com.zy.common.service.erp.entity.WlzhVStRd; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * erp任务控制器 * Created by vincent on 2020/11/27 */ @Slf4j //@Component @Component public class ErpScheduler extends AbstractHandler<Exception> { @Autowired @@ -38,15 +40,11 @@ @Autowired private MatService matService; @Autowired private OrderService orderService; private AllLocDetlService allLocDetlService; @Autowired private DocTypeService docTypeService; @Autowired private OrderDetlService orderDetlService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; private InventoryVarianceService inventoryVarianceService; @Scheduled(cron = "0/5 * * * * ? ") //@Scheduled(cron = "0/5 * * * * ? ") @Synchronized @Transactional public synchronized void syncMat() { @@ -85,126 +83,53 @@ } } @Scheduled(cron = "0/5 * * * * ? ") //@Scheduled(cron = "0/5 * * * * ? ") @Synchronized @Transactional public synchronized void syncOrder() { List<VoucherDto> list = erpService.selectOrder(0); for (VoucherDto dto : list) { Voucher voucher = dto.getVoucher(); Order order = orderService.selectByNo(voucher.getVoucherID()); if (Cools.isEmpty(order)) { public void syncLocDetl(){ String regEx = "[^0-9]"; Pattern compile = Pattern.compile(regEx); Matcher matcher = compile.matcher(voucher.getMT()); String docTypeVal = matcher.replaceAll("").trim(); List<InventoryVariance> inventoryVariances = new ArrayList<>(); DocType docType = docTypeService.selectOrAdd(docTypeVal, null); Date now = new Date(); // 单据主档 order = new Order( String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] voucher.getVoucherID(), // 订单编号 DateUtils.convert(now), // 单据日期 docType.getDocId(), // 单据类型 null, // 项目编号 null, // null, // 调拨项目编号 voucher.getBatch(), // 初始票据号 voucher.getMaterialNO(), // 票据号 null, // 客户编号 voucher.getCustomer(), // 客户 voucher.getCenterID(), // 联系方式 voucher.getPlant(), // 操作人员 voucher.getTotalNum(), // 合计金额 ******************** null, // 优惠率 null, // 优惠金额 null, // 销售或采购费用合计 null, // 实付金额 null, // 付款类型 voucher.getLoc(), // 业务员 voucher.getTotalCount(), // 结算天数 ******************** null, // 邮费支付类型 voucher.getExpectedWeight(), // 邮费 null, // 付款时间 null, // 发货时间 null, // 物流名称 null, // 物流单号 1L, // 订单状态 1, // 状态 9527L, // 添加人员 now, // 添加时间 9527L, // 修改人员 now, // 修改时间 null // 备注 ); if (!orderService.insert(order)) { throw new CoolException(order.getOrderNo() + "生成单据主档失败,请联系管理员"); } Mat mat = matService.selectByMatnr(voucher.getMaterialNO()); if (mat == null) { throw new CoolException(voucher.getMaterialNO() + "物料号不存在"); } // 繳庫單 if (docType.getPakin() == 1) { for (VoucherDetail detail : dto.getDetails()) { OrderDetl orderDetl = new OrderDetl(); orderDetl.sync(mat); orderDetl.setBatch(detail.getBarcode()); orderDetl.setAnfme(mat.getWeight()); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(9527L); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(9527L); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); if (!orderDetlService.insert(orderDetl)) { throw new CoolException(order.getOrderNo() + "生成单据明细失败,请联系管理员"); } } } else { OrderDetl orderDetl = new OrderDetl(); orderDetl.sync(mat); StringBuilder sb = new StringBuilder(); if (!Cools.isEmpty(dto.getDetails())) { for (VoucherDetail detail : dto.getDetails()) { sb.append(detail.getBarcode()).append(","); } orderDetl.setBatch(sb.toString()); } orderDetl.setAnfme(voucher.getExpectedWeight()); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(9527L); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(9527L); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); if (!orderDetlService.insert(orderDetl)) { throw new CoolException(order.getOrderNo() + "生成单据明细失败,请联系管理员"); } } // erp 同步 int state = 1; if (!erpService.updateStateForVoucher(voucher.getVoucherID(), state)) { throw new CoolException(voucher.getVoucherID() + "订单修改State为"+state+"失败"); } else { erpService.updateTimeForVoucherDetail(voucher.getVoucherID()); } } else { log.warn("{}订单已存在", voucher.getVoucherID()); int pageSize = 500; int pageNumber = 0; while (true){ List<WlzhVStRd> wlzhVStRds = erpService.selectPage(pageSize, pageNumber); if(wlzhVStRds.size() < pageSize){ break; } //ERP库存与立库库存比对 compileStock(wlzhVStRds,inventoryVariances); pageNumber ++; } inventoryVarianceService.insertBatch(inventoryVariances); } private void compileStock(List<WlzhVStRd> wlzhVStRds, List<InventoryVariance> inventoryVariances){ wlzhVStRds.forEach(wlzhVStRd -> { String matnr = wlzhVStRd.getCInvCode(); String csocode = wlzhVStRd.getCsocode(); String isoseq = wlzhVStRd.getIsoseq(); Double iQuantity = wlzhVStRd.getIQuantity(); Double anfme = 0.0; List<AllLocDetl> allLocDetlList = allLocDetlService.getByMatnrAndCsocodeAndIsoseq(matnr, csocode, isoseq); for(AllLocDetl allLocDetl : allLocDetlList){ anfme += allLocDetl.getAnfme(); } int compare = Double.compare(iQuantity, anfme); if(compare != 0){ InventoryVariance inventoryVarianceParam = new InventoryVariance(matnr,csocode,isoseq,iQuantity,anfme); inventoryVariances.add(inventoryVarianceParam); } }); } } src/main/resources/application.yml
@@ -10,9 +10,9 @@ enabled: false datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs #url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs #url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs #url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs username: sa password: sa@123 mvc: @@ -68,9 +68,9 @@ erp: db: driver_class_name: com.microsoft.sqlserver.jdbc.SQLServerDriver ur: jdbc:sqlserver://10.20.46.23:1433;databasename=POY_ASRS username: poy-asrs password: Poy@2022 ur: jdbc:sqlserver://192.168.1.55:1433;databasename=ufdata_998_2022 username: WMS password: Wlzh44338 agv: # url: localhost:8080 src/main/resources/mapper/ViewStayTimeMapper.xml
@@ -178,5 +178,4 @@ ) t ) a </select> </mapper>