package com.zy.asrs.task.handler;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.service.*;
|
import com.zy.asrs.task.AbstractHandler;
|
import com.zy.asrs.task.core.ReturnT;
|
import com.zy.common.model.enums.WorkNoType;
|
import com.zy.common.service.CommonService;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Date;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
@Service
|
public class AutoReplenishmentHandler extends AbstractHandler<String> {
|
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private LocMastService locMastService;
|
@Autowired
|
private CommonService commonService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
@Autowired
|
private OrderService orderService;
|
|
|
@Transactional
|
public ReturnT<String> start(Order order) {
|
Date now = new Date();
|
|
Set<String> locNos = pakoutLoc(order);
|
for (String locNo : locNos){
|
LocMast locMast = locMastService.selectByLoc(locNo);
|
if(!"F".equals(locMast.getLocSts())){
|
throw new CoolException("库位状态已变更");
|
}
|
//生成工作档
|
WrkMast wrkMast = createWrkMast(locNo,locMast.getBarcode(),now);
|
//生成工作档明细
|
List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo);
|
createWrkDetl(locDetls, wrkMast,order.getOrderNo(),now);
|
//修改库位状态
|
locMast.setLocSts("R");
|
locMastService.updateByLocNo(locMast);
|
}
|
order.setSettle(2L);
|
orderService.updateById(order);
|
|
|
return SUCCESS;
|
}
|
|
private Set<String> pakoutLoc(Order order){
|
//需要出库的库位
|
Set<String> locNos = new HashSet<>();
|
//根据订单生成四项库出库工作档
|
List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()));
|
|
for(OrderDetl orderDetl : orderDetlList){
|
if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){
|
continue;
|
}
|
|
String matnr = orderDetl.getMatnr();
|
Double orderAnfme = orderDetl.getAnfme();
|
|
List<String> locNosSearch = locDetlService.selectLocNo(matnr);
|
|
for(String locNo : locNosSearch){
|
List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo);
|
locNos.add(locNo);
|
for (LocDetl locDetl :locDetls){
|
if(matnr.equals(locDetl.getMatnr())){
|
orderAnfme -= locDetl.getAnfme();
|
}
|
}
|
if(orderAnfme <= 0){
|
orderDetl.setQty(orderDetl.getAnfme() - orderAnfme);
|
orderDetlService.updateById(orderDetl);
|
break;
|
}
|
}
|
}
|
|
// orderDetlList.forEach(orderDetl -> {
|
//
|
// if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){
|
// cont
|
// }
|
//
|
// String matnr = orderDetl.getMatnr();
|
// Double orderAnfme = orderDetl.getAnfme();
|
//
|
// List<String> locNosSearch = locDetlService.selectLocNo(matnr);
|
//
|
// for(String locNo : locNosSearch){
|
// List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo);
|
// locNos.add(locNo);
|
// for (LocDetl locDetl :locDetls){
|
// if(matnr.equals(locDetl.getMatnr())){
|
// orderAnfme -= locDetl.getAnfme();
|
// }
|
// }
|
// if(orderAnfme <= 0){
|
// orderDetl.setQty(orderDetl.getAnfme() - orderAnfme);
|
// orderDetlService.updateById(orderDetl);
|
// break;
|
// }
|
// }
|
//
|
// });
|
|
return locNos;
|
}
|
|
private WrkMast createWrkMast(String locNo,String barCode,Date now){
|
int ioType = 101;
|
int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setWrkNo(workNo);
|
wrkMast.setIoTime(now);
|
wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务
|
wrkMast.setIoType(ioType); // 入出库状态
|
wrkMast.setIoPri(300D); // 优先级:13
|
//wrkMast.setOutMost(outMost?1:0);;
|
//wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
|
//wrkMast.setSourceStaNo(loc); // 源站
|
wrkMast.setStaNo(300); // 目标站
|
wrkMast.setSourceLocNo(locNo); // 源库位
|
wrkMast.setFullPlt("Y"); // 满板:Y
|
wrkMast.setPicking("N"); // 拣料
|
wrkMast.setExitMk("N"); // 退出
|
wrkMast.setEmptyMk("N"); // 空板
|
wrkMast.setLinkMis("N");
|
wrkMast.setBarcode(barCode);
|
//wrkMast.setAppeUser(userId); // 操作人员数据
|
wrkMast.setAppeTime(now);
|
//wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(now);
|
|
wrkMast.setMk("Y");
|
if (!wrkMastService.insert(wrkMast)) {
|
throw new CoolException("保存工作档失败,出库库位号:"+locNo);
|
}
|
return wrkMast;
|
}
|
|
private void createWrkDetl(List<LocDetl> locDetls, WrkMast wrkMast,String orderNo, Date now){
|
locDetls.forEach(locDetl -> {
|
WrkDetl wrkDetl = new WrkDetl();
|
BeanUtils.copyProperties(locDetl,wrkDetl);
|
wrkDetl.setZpallet(wrkMast.getBarcode());
|
wrkDetl.setIoTime(now);
|
wrkDetl.setWrkNo(wrkMast.getWrkNo());
|
//wrkDetl.setBatch(locDetl.getBatch());
|
wrkDetl.setOrderNo(orderNo);
|
//wrkDetl.setAnfme(locDetl.getAnfme()); // 数量
|
wrkDetl.setAppeTime(now);
|
//wrkDetl.setAppeUser(userId);
|
wrkDetl.setModiTime(now);
|
//wrkDetl.setSuppCode(locDetl.getSuppCode());
|
//wrkDetl.setModiUser(userId);
|
if (!wrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作档明细失败");
|
}
|
});
|
}
|
|
}
|