| | |
| | | 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.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocNormal; |
| | | import com.zy.asrs.entity.WaitPakin; |
| | | import com.zy.asrs.entity.WaitPakinLog; |
| | | import com.zy.asrs.mapper.LocNormalMapper; |
| | | import com.zy.asrs.mapper.OutStockMapper; |
| | | import com.zy.asrs.service.LocNormalService; |
| | | import com.zy.asrs.service.WaitPakinLogService; |
| | | import com.zy.asrs.service.WaitPakinService; |
| | | import com.zy.common.service.erp.ErpSqlServer; |
| | | import com.zy.common.service.erp.entity.CPICMO; |
| | | import com.zy.common.service.erp.entity.OutStockBillEntry; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.MessageFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | | @Service("locNormalService") |
| | | public class LocNormalServiceImpl extends ServiceImpl<LocNormalMapper, LocNormal> implements LocNormalService { |
| | | @Autowired |
| | | ErpSqlServer erpSqlServer; |
| | | @Autowired |
| | | OutStockMapper outStockMapper; |
| | | @Autowired |
| | | LocNormalService locNormalService; |
| | | @Autowired |
| | | WaitPakinService waitPakinService; |
| | | @Autowired |
| | | WaitPakinLogService waitPakinLogService; |
| | | |
| | | @Override |
| | | public List<LocNormal> getLocNormalData() { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void updateLocNormal(String matnr, Double anfme, Long modiUser, Date modiTime) { |
| | | baseMapper.updateLocNormal(matnr, anfme, modiUser, modiTime); |
| | | public void updateLocNormal(String matnr, BigDecimal anfme, Long modiUser, Date modiTime, Integer id) { |
| | | baseMapper.updateLocNormal(matnr, anfme, modiUser, modiTime, id); |
| | | } |
| | | |
| | | @Override |
| | | public void outLocNormal(String matnr, Long modiUser, Date modiTime) { |
| | | baseMapper.outLocNormal(matnr, modiUser, modiTime); |
| | | public void outLocNormal(String matnr, Long modiUser, Date modiTime, Integer id) { |
| | | baseMapper.outLocNormal(matnr, modiUser, modiTime, id); |
| | | } |
| | | |
| | | @Override |
| | | public void removeLocNormal(String matnr, Long modiUser, Date modiTime) { |
| | | baseMapper.removeLocNormal(matnr, modiUser, modiTime); |
| | | } |
| | | |
| | | @Override |
| | | public void pdaLocNormalIn(List<LocNormal> list) { |
| | | baseMapper.pdaLocNormalIn(list); |
| | | public void removeLocNormal(String matnr, Long modiUser, Date modiTime, Integer id) { |
| | | baseMapper.removeLocNormal(matnr, modiUser, modiTime, id); |
| | | } |
| | | |
| | | @Override |
| | | public void locNormalIn(List<LocNormal> list) { |
| | | baseMapper.locNormalIn(list); |
| | | // 平仓入库后更新中间表数据,Fflag_finish改为1,表示平仓入库成功 |
| | | if (list.size() > 0) { |
| | | for (Integer i = 0; i < list.size(); i++) { |
| | | List<LocNormal> addList = new ArrayList<>(); |
| | | List<LocNormal> updateList = new ArrayList<>(); |
| | | if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新 |
| | | // 判断原先平仓是否存在有货,如果有货数量进行累加 |
| | | LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper<LocNormal>().eq("supplier", list.get(i).getSupplier()).and().eq("state", "1").eq("warehouse", list.get(i).getWarehouse())); |
| | | if (!Cools.isEmpty(oldLocList)) { |
| | | // erp更新 |
| | | updateCPICMO(list.get(i)); |
| | | Double updateAnfme = new Double(list.get(i).getAnfme().doubleValue()); |
| | | // 平仓入库(更新)逻辑 |
| | | list.get(i).setAnfme(oldLocList.getAnfme().add(list.get(i).getAnfme())); |
| | | updateList.add(list.get(i)); |
| | | if (baseMapper.pdaLocNormalUpdate(updateList) > 0) { |
| | | // cust_wait_pakin转cust_wait_pakin_log,并更新数量 |
| | | custWaitPakinToLog(list.get(i), updateAnfme); |
| | | } |
| | | } else { |
| | | // erp更新 |
| | | updateCPICMO(list.get(i)); |
| | | // 平仓入库逻辑 |
| | | addList.add(list.get(i)); |
| | | if (baseMapper.pdaLocNormalIn(addList) > 0) { |
| | | // cust_wait_pakin转cust_wait_pakin_log,并更新数量 |
| | | custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); |
| | | } |
| | | } |
| | | } else { |
| | | throw new CoolException("通知单号不可为空"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 成品入库单标记完成 |
| | | */ |
| | | private boolean completeCPakIn(String FBillNo, String Fnumber){ |
| | | String sql = "update CPICMO set Fflag_finish = 1 where FBillNo = ''{0}'' and Fnumber = ''{1}''"; |
| | | sql = MessageFormat.format(sql, FBillNo, Fnumber); |
| | | return erpSqlServer.update(sql) > 0; |
| | | } |
| | | |
| | | @Override |
| | | public void pdaLocNormalIn(List<LocNormal> list) { |
| | | // 平仓入库后更新中间表数据,Fflag_finish改为1,表示平仓入库成功 |
| | | if (list.size() > 0) { |
| | | for (Integer i = 0; i < list.size(); i++) { |
| | | List<LocNormal> addList = new ArrayList<>(); |
| | | List<LocNormal> updateList = new ArrayList<>(); |
| | | if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新 |
| | | // 判断原先平仓是否存在有货,如果有货数量进行累加 |
| | | LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper<LocNormal>().eq("supplier", list.get(i).getSupplier()).and().eq("state", "1").and().eq("warehouse", list.get(i).getWarehouse())); |
| | | if (!Cools.isEmpty(oldLocList)) { |
| | | // erp更新 |
| | | updateCPICMO(list.get(i)); |
| | | Double updateAnfme = new Double(list.get(i).getAnfme().doubleValue()); |
| | | // 平仓入库(更新逻辑) |
| | | list.get(i).setAnfme(oldLocList.getAnfme().add(list.get(i).getAnfme())); |
| | | updateList.add(list.get(i)); |
| | | if (baseMapper.pdaLocNormalUpdate(updateList) > 0) { |
| | | // cust_wait_pakin转cust_wait_pakin_log,并更新数量 |
| | | custWaitPakinToLog(list.get(i), updateAnfme); |
| | | } |
| | | } else { |
| | | // erp更新 |
| | | updateCPICMO(list.get(i)); |
| | | // 平仓入库逻辑 |
| | | addList.add(list.get(i)); |
| | | if (baseMapper.pdaLocNormalIn(addList) > 0){ |
| | | // cust_wait_pakin转cust_wait_pakin_log,并更新数量 |
| | | custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); |
| | | } |
| | | } |
| | | } else { |
| | | throw new CoolException("通知单号不可为空"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /* cust_wait_pakin转cust_wait_pakin_log,并更新数量 */ |
| | | private boolean custWaitPakinToLog(LocNormal list, Double updateAnfme) { |
| | | WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("supplier", list.getSupplier()).and().eq("matnr", list.getMatnr())); |
| | | WaitPakinLog waitPakinLog = new WaitPakinLog(); |
| | | waitPakinLog.setAnfme(updateAnfme); |
| | | waitPakinLog.setMatnr(waitPakin.getMatnr()); |
| | | waitPakinLog.setMaktx(waitPakin.getMaktx()); |
| | | waitPakinLog.setLgnum(waitPakin.getLgnum()); |
| | | waitPakinLog.setType(waitPakin.getType()); |
| | | waitPakinLog.setMnemonic(waitPakin.getMnemonic()); |
| | | waitPakinLog.setSupplier(waitPakin.getSupplier()); |
| | | waitPakinLog.setWarehouse(waitPakin.getWarehouse()); |
| | | waitPakinLog.setBrand(waitPakin.getBrand()); |
| | | waitPakinLog.setAltme(waitPakin.getAltme()); |
| | | waitPakinLog.setZpallet(waitPakin.getZpallet()); |
| | | waitPakinLog.setBname(waitPakin.getBname()); |
| | | waitPakinLog.setLocNo(waitPakin.getLocNo()); |
| | | waitPakinLog.setStatus(waitPakin.getStatus()); |
| | | waitPakinLog.setIoStatus(waitPakin.getIoStatus()); |
| | | waitPakinLog.setMemo(waitPakin.getMemo()); |
| | | waitPakinLog.setModiTime(waitPakin.getModiTime()); |
| | | waitPakinLog.setModiUser(waitPakin.getModiUser()); |
| | | waitPakinLog.setAppeTime(waitPakin.getAppeTime()); |
| | | waitPakinLog.setAppeUser(waitPakin.getAppeUser()); |
| | | // 转入库通知历史档 |
| | | waitPakinLogService.insert(waitPakinLog); |
| | | // 修改入库同志档物料数量 |
| | | Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>(); |
| | | wrapper.eq("supplier", list.getSupplier()) |
| | | .eq("matnr", list.getMatnr()) |
| | | .isNull("zpallet"); |
| | | WaitPakin pakin = new WaitPakin(); |
| | | pakin.setAnfme(waitPakin.getAnfme() - updateAnfme); |
| | | waitPakinService.update(pakin, wrapper); |
| | | return true; |
| | | } |
| | | |
| | | /* 更新erp入库表 */ |
| | | private boolean updateCPICMO(LocNormal list) { |
| | | String sqlSelect = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''"; |
| | | sqlSelect = MessageFormat.format(sqlSelect, list.getMatnr(), list.getSupplier()); |
| | | List<CPICMO> CPICMOList = erpSqlServer.select(sqlSelect,CPICMO.class); |
| | | if (CPICMOList.size() > 0) { // 说明erp有对应的入库单 |
| | | String sql = "update CPICMO set FAuxCommitQty = (FAuxCommitQty + {0,number,#}) where 1=1 and Fnumber = ''{1}'' and FBillNo = ''{2}''"; |
| | | sql = MessageFormat.format(sql, list.getAnfme(), list.getMatnr(), list.getSupplier()); |
| | | if (erpSqlServer.update(sql) > 0) { |
| | | sql = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''"; |
| | | sql = MessageFormat.format(sql, list.getMatnr(), list.getSupplier()); |
| | | List<CPICMO> select = erpSqlServer.select(sql, CPICMO.class); |
| | | CPICMO cpicmo = select.get(0); |
| | | boolean complete = false; |
| | | if (cpicmo.getFQty() > 0) { |
| | | if (Double.doubleToLongBits(cpicmo.getFAuxCommitQty()) == Double.doubleToLongBits(cpicmo.getFQty())) { |
| | | complete = true; |
| | | } |
| | | } else { |
| | | if (Double.doubleToLongBits(cpicmo.getFAuxCommitQty()) == Double.doubleToLongBits(cpicmo.getFAuxQty())) { |
| | | complete = true; |
| | | } |
| | | } |
| | | if (complete) { |
| | | if (!completeCPakIn(list.getSupplier(), list.getMatnr())) { |
| | | log.error("{}平仓入库单标记完成失败", list.getSupplier()); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | throw new CoolException("ERP查询不到对应通知单"); |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public List<LocNormal> pdaLocNormalQuery(String matnr, String warehouse, String billNo) { |
| | | return baseMapper.pdaLocNormalQuery(matnr, warehouse, billNo); |
| | | } |
| | | |
| | | @Override |
| | | public void pdaLocNormalOut(List<LocNormal> list) { |
| | | for (Integer i = 0; i < list.size(); i++) { |
| | | if (list.get(i).getAnfme().equals(list.get(i).getAnfmeOut())) { |
| | | baseMapper.pdaLocNormalOut1(list.get(i).getId(), list.get(i).getMatnr(), list.get(i).getModiUser(), list.get(i).getModiTime(), list.get(i).getWarehouse()); |
| | | } |
| | | if (list.get(i).getAnfmeOut().compareTo(list.get(i).getAnfme()) == -1) { |
| | | BigDecimal diff = (list.get(i).getAnfme()).subtract(list.get(i).getAnfmeOut()); |
| | | baseMapper.pdaLocNormalOut2(list.get(i).getId(), list.get(i).getMatnr(), diff, list.get(i).getModiUser(), list.get(i).getModiTime(), list.get(i).getWarehouse()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<LocNormal> pdaLocNormalWarehouseQuery(String warehouse, String matnr) { |
| | | return baseMapper.pdaLocNormalWarehouseQuery(warehouse, matnr); |
| | | } |
| | | |
| | | @Override |
| | | public void pdaLocNormalMove(List<LocNormal> list) { |
| | | baseMapper.pdaLocNormalMove(list); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocNormal> queryLocNorlMatnr(String fbillNo) { |
| | | List<OutStockBillEntry> matList = outStockMapper.queryMatnrWithBillNo(fbillNo); |
| | | List<LocNormal> locNormal = new ArrayList<>(); |
| | | List<LocNormal> locNormalResult = new ArrayList<>(); |
| | | for (Integer i = 0; i < matList.size(); i++) { |
| | | locNormal = baseMapper.queryLocNorlMatnr(matList.get(i).getFnumber()) ; |
| | | if (locNormal.size() > 0) { |
| | | for (LocNormal e:locNormal) { |
| | | LocNormal obj = new LocNormal(); |
| | | obj.setMatnr(e.getMatnr()); |
| | | obj.setMaktx(e.getMaktx()); |
| | | obj.setLgnum(e.getLgnum()); |
| | | obj.setType(e.getType()); |
| | | obj.setMnemonic(e.getMnemonic()); |
| | | obj.setSupplier(e.getSupplier()); |
| | | obj.setWarehouse(e.getWarehouse()); |
| | | obj.setBrand(e.getBrand()); |
| | | obj.setAnfme(e.getAnfme()); |
| | | obj.setBname(e.getBname()); |
| | | obj.setMemo(e.getMemo()); |
| | | obj.setModiUser(e.getModiUser()); |
| | | obj.setModiTime(e.getModiTime()); |
| | | obj.setAppeUser(e.getAppeUser()); |
| | | obj.setAppeTime(e.getAppeTime()); |
| | | obj.setState(e.getState()); |
| | | obj.setWarehouseName(e.getWarehouseName()); |
| | | obj.setId(e.getId()); |
| | | locNormalResult.add(obj); |
| | | } |
| | | } |
| | | } |
| | | return locNormalResult; |
| | | } |
| | | } |