package com.zy.asrs.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
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.mapper.LocNormalMapper;
|
import com.zy.asrs.mapper.OutStockMapper;
|
import com.zy.asrs.service.LocNormalService;
|
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;
|
|
@Override
|
public List<LocNormal> getLocNormalData() {
|
return baseMapper.getLocNormalData();
|
}
|
|
@Override
|
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, Integer id) {
|
baseMapper.outLocNormal(matnr, modiUser, modiTime, id);
|
}
|
|
@Override
|
public void removeLocNormal(String matnr, Long modiUser, Date modiTime, Integer id) {
|
baseMapper.removeLocNormal(matnr, modiUser, modiTime, id);
|
}
|
|
@Override
|
public void locNormalIn(List<LocNormal> list) {
|
// 平仓入库后更新中间表数据,Fflag_finish改为1,表示平仓入库成功
|
if (list.size() > 0) {
|
for (Integer i = 0; i < list.size(); i++) {
|
if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新
|
String sqlSelect = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''";
|
sqlSelect = MessageFormat.format(sqlSelect, list.get(i).getMatnr(), list.get(i).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.get(i).getAnfme(), list.get(i).getMatnr(), list.get(i).getSupplier());
|
if (erpSqlServer.update(sql) > 0) {
|
sql = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''";
|
sql = MessageFormat.format(sql, list.get(i).getMatnr(), list.get(i).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.get(i).getSupplier(), list.get(i).getMatnr())) {
|
log.error("{}平仓入库单标记完成失败", list.get(i).getSupplier());
|
}
|
}
|
}
|
} else {
|
throw new CoolException("ERP查询不到对应通知单");
|
}
|
} else {
|
throw new CoolException("通知单号不可为空");
|
}
|
}
|
// 平仓入库逻辑
|
baseMapper.locNormalIn(list);
|
}
|
}
|
|
/**
|
* 成品入库单标记完成
|
*/
|
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++) {
|
if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新
|
String sqlSelect = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''";
|
sqlSelect = MessageFormat.format(sqlSelect, list.get(i).getMatnr(), list.get(i).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.get(i).getAnfme(), list.get(i).getMatnr(), list.get(i).getSupplier());
|
if (erpSqlServer.update(sql) > 0) {
|
sql = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''";
|
sql = MessageFormat.format(sql, list.get(i).getMatnr(), list.get(i).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.get(i).getSupplier(), list.get(i).getMatnr())) {
|
log.error("{}平仓入库单标记完成失败", list.get(i).getSupplier());
|
}
|
}
|
}
|
} else {
|
throw new CoolException("ERP查询不到对应通知单");
|
}
|
} else {
|
throw new CoolException("通知单号不可为空");
|
}
|
}
|
// 平仓入库逻辑
|
baseMapper.pdaLocNormalIn(list);
|
}
|
}
|
|
@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;
|
}
|
}
|