Browse Source

mdf:入库兼容混料

master_V2.0
zhangzq 2 weeks ago
parent
commit
efea91d120
  1. 30
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyMater.java
  2. 34
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java
  3. 2
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
  4. 9
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/FIFORuleHandler.java
  5. 30
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java
  6. 13
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java
  7. 1
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IInBillService.java
  8. 165
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java
  9. 25
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java
  10. 2
      nladmin-ui/src/views/wms/st/inbill/AddDialog.vue
  11. 1
      nladmin-ui/src/views/wms/st/inbill/DivDialog.vue

30
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyMater.java

@ -0,0 +1,30 @@
package org.nl.wms.basedata_manage.service.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public
class StrategyMater {
/**
* 物料标识
*/
private String material_code;
/**
* id
*/
private String material_id;
/**
* 批次
*/
private String pcsn;
/**
* 计量单位标识
*/
private String qty_unit_id;
/**
* 组盘数量
*/
private BigDecimal qty;
}

34
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java

@ -5,7 +5,7 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.math.BigDecimal; import java.util.List;
@Data @Data
@Builder @Builder
@ -20,40 +20,28 @@ public class StrategyStructParam {
* 仓位编码 * 仓位编码
*/ */
private String stor_code; private String stor_code;
/** /**
* 物料标识 * 同步单号
*/ */
private String material_code; private String ext_code;
private String material_id;
/** /**
* 批次 * 来源单据类型
*/ */
private String pcsn; private String ext_type;
/** /**
* 计量单位标识 * 出入库类型
*/ */
private String qty_unit_id; private String ioType;
/** /**
* 组盘数量 * 载具编码
*/ */
private BigDecimal qty; private String storagevehicle_code;
/** /**
* 同步单号 * 载具明细混料的话则是数组
*/ */
private String ext_code; private List<StrategyMater> strategyMaters;
/**
* 来源单据类型
*/
private String ext_type;
/**
* 出入库类型
*/
private String ioType;
} }

2
nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java

@ -356,7 +356,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
@Override @Override
public List<Structattr> inBoundSectDiv(StrategyStructParam param) { public List<Structattr> inBoundSectDiv(StrategyStructParam param) {
//批号,单据暂时不校验,具体业务具体校验 //批号,单据暂时不校验,具体业务具体校验
Assert.noNullElements(new Object[]{param.getQty(),param.getMaterial_code(),param.getSect_code()},"请求参数不能为空"); Assert.noNullElements(new Object[]{param.getStrategyMaters(),param.getStor_code(),param.getSect_code()},"请求参数不能为空");
StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper<StSectStrategy>() StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper<StSectStrategy>()
.eq(StSectStrategy::getSect_code, param.getSect_code()) .eq(StSectStrategy::getSect_code, param.getSect_code())
.eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库"))); .eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库")));

9
nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/FIFORuleHandler.java

@ -7,6 +7,7 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.MapOf; import org.nl.common.utils.MapOf;
import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto;
import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner; import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner;
@ -38,10 +39,12 @@ public class FIFORuleHandler extends Decisioner<StrategyStructMaterialVO, Strate
//分配数量 //分配数量
//当前条件只有id,批次 //当前条件只有id,批次
log.info("---------执行fifo出库分配规则---------"); log.info("---------执行fifo出库分配规则---------");
BigDecimal planQty = param.getQty(); List<StrategyMater> maters = param.getStrategyMaters();
StrategyMater strategyMater = maters.get(0);
BigDecimal planQty = strategyMater.getQty();
List<StructattrVechielDto> vechielDtos = List<StructattrVechielDto> vechielDtos =
iStructattrService.collectVechicle(MapOf.of("material_id", param.getMaterial_id() iStructattrService.collectVechicle(MapOf.of("material_id", strategyMater.getMaterial_id()
, "pcsn", param.getPcsn() , "pcsn", strategyMater.getPcsn()
, "stor_code", param.getStor_code() , "stor_code", param.getStor_code()
, "sect_code", param.getSect_code() , "sect_code", param.getSect_code()
, "plan_qty", planQty , "plan_qty", planQty

30
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosInServiceImpl.java

@ -20,6 +20,8 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.service.*; import org.nl.wms.basedata_manage.service.*;
import org.nl.wms.basedata_manage.service.dao.*; import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.basedata_manage.service.dto.MaterialQuery; import org.nl.wms.basedata_manage.service.dto.MaterialQuery;
import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService; import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService;
import org.nl.wms.pda_manage.util.PdaResponse; import org.nl.wms.pda_manage.util.PdaResponse;
import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.enums.StatusEnum;
@ -317,15 +319,25 @@ public class PdaIosInServiceImpl implements PdaIosInService {
throw new BadRequestException("该库区未找到对应仓库信息,请检查"); throw new BadRequestException("该库区未找到对应仓库信息,请检查");
} }
//分配仓位 //分配仓位
JSONObject params = new JSONObject(); StrategyMater mater = new StrategyMater();
params.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库")); mater.setMaterial_code(whereJson.getString("material_code"));
params.put("storagevehicle_code", vehicleDao.getStoragevehicle_code()); mater.setMaterial_id(whereJson.getString("material_id"));
params.put("stor_code", storeDao.getStor_code()); mater.setQty(whereJson.getBigDecimal("qty"));
params.put("sect_code", whereJson.getString("sect_code")); mater.setPcsn(whereJson.getString("pcsn"));
params.put("material_code", whereJson.getString("material_code")); List<StrategyMater> materss = new ArrayList<>();
params.put("qty", whereJson.getString("qty"));
params.put("pcsn", whereJson.getString("pcsn")); List<Structattr> structattrs = iStructattrService.inBoundSectDiv(
Structattr attrDao = iRawAssistIStorService.getStructattr(whereJson); StrategyStructParam.builder()
.ioType(StatusEnum.STRATEGY_TYPE.code("入库"))
.sect_code(whereJson.getString("sect_code"))
.stor_code(storeDao.getStor_code())
.storagevehicle_code(vehicleDao.getStoragevehicle_code())
.strategyMaters(materss)
.build());
if (CollectionUtils.isEmpty(structattrs)) {
throw new BadRequestException("无可用货位");
}
Structattr attrDao = structattrs.get(0);
//确定起点 //确定起点
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, whereJson.getString("site_code"))); SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, whereJson.getString("site_code")));
if (ObjectUtil.isEmpty(schBasePoint)) { if (ObjectUtil.isEmpty(schBasePoint)) {

13
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java

@ -22,6 +22,7 @@ import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.*; import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService; import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService;
@ -52,6 +53,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -268,13 +270,18 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id()); BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id());
whereJson.put("stor_code", storeDao.getStor_code()); whereJson.put("stor_code", storeDao.getStor_code());
whereJson.put("sect_code", sectattr.getSect_code()); whereJson.put("sect_code", sectattr.getSect_code());
StrategyMater mater = new StrategyMater();
mater.setQty(BigDecimal.valueOf(qty));
mater.setMaterial_id(whereJson.getString("material_id"));
mater.setMaterial_code(whereJson.getString("material_code"));
List<StrategyMater> maters = new ArrayList<>();
maters.add(mater);
StrategyStructParam strategyStructParam = StrategyStructParam.builder() StrategyStructParam strategyStructParam = StrategyStructParam.builder()
.ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库"))) .ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库")))
.sect_code(whereJson.getString("sect_code")) .sect_code(whereJson.getString("sect_code"))
.stor_code(whereJson.getString("stor_code")) .stor_code(whereJson.getString("stor_code"))
.material_code(whereJson.getString("material_id")) .strategyMaters(maters)
.material_code(whereJson.getString("material_code"))
.qty(BigDecimal.valueOf(qty))
.build(); .build();
List<StrategyStructMaterialVO> structList = iStructattrService.outBoundSectDiv(strategyStructParam); List<StrategyStructMaterialVO> structList = iStructattrService.outBoundSectDiv(strategyStructParam);
if (CollectionUtils.isEmpty(structList)) { if (CollectionUtils.isEmpty(structList)) {

1
nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IInBillService.java

@ -56,5 +56,4 @@ public interface IInBillService extends IService<IOStorInv> {
List<IOStorInvDisDto> getInBillTaskDtl(Map whereJson); List<IOStorInvDisDto> getInBillTaskDtl(Map whereJson);
Structattr getStructattr(JSONObject param);
} }

165
nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java

@ -25,9 +25,9 @@ import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleinfoMapper; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleinfoMapper;
import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto; import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.tasks.StInTask; import org.nl.wms.sch_manage.service.util.tasks.StInTask;
import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSConstant;
@ -53,6 +53,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author dsh * @author dsh
@ -327,11 +328,14 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
ArrayList<HashMap> rows = (ArrayList<HashMap>) param.get("tableMater"); ArrayList<HashMap> rows = (ArrayList<HashMap>) param.get("tableMater");
JSONObject mst = JSONObject.parseObject(JSON.toJSONString(param)); JSONObject mst = JSONObject.parseObject(JSON.toJSONString(param));
HashMap<String, String> map = rows.get(0); HashMap<String, String> map = rows.get(0);
String iostorinvId = map.get("iostorinv_id");
String storagevehicleCode = map.get("storagevehicle_code");
//判断该分配明细是否已经分配货位 //判断该分配明细是否已经分配货位
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class) List<IOStorInvDis> disList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id")) .eq(IOStorInvDis::getIostorinv_id, iostorinvId)
.eq(IOStorInvDis::getStoragevehicle_code, storagevehicleCode)
.isNull(IOStorInvDis::getStruct_code)); .isNull(IOStorInvDis::getStruct_code));
if (ioStorInvDis ==null){ if (CollectionUtils.isEmpty(disList)){
throw new BadRequestException("当前明细已经分配过库位"); throw new BadRequestException("当前明细已经分配过库位");
} }
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
@ -346,18 +350,23 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
//是否自动分配仓位 //是否自动分配仓位
Boolean checked = mst.getBoolean("checked"); Boolean checked = mst.getBoolean("checked");
if (ObjectUtil.isNotEmpty(checked) && checked) { if (ObjectUtil.isNotEmpty(checked) && checked) {
param.put("qty", map.get("plan_qty")); //根据载具进行分配货位
param.put("material_code", map.get("material_code")); List<StrategyMater> maters = new ArrayList<>();
param.put("pcsn", map.get("pcsn")); for (IOStorInvDis dis : disList) {
param.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库")); StrategyMater mater = new StrategyMater();
mater.setPcsn(dis.getPcsn());
mater.setMaterial_code(dis.getMaterial_code());
mater.setMaterial_id(dis.getMaterial_id());
mater.setQty(dis.getPlan_qty());
maters.add(mater);
}
List<Structattr> structattrs = iStructattrService.inBoundSectDiv( List<Structattr> structattrs = iStructattrService.inBoundSectDiv(
StrategyStructParam.builder() StrategyStructParam.builder()
.ioType(param.getString("ioType")) .ioType(param.getString("ioType"))
.sect_code(param.getString("sect_code")) .sect_code(param.getString("sect_code"))
.stor_code(param.getString("stor_code")) .stor_code(param.getString("stor_code"))
.material_code(param.getString("material_code")) .storagevehicle_code(param.getString("storagevehicle_code"))
.qty(new BigDecimal(param.getString("qty"))) .strategyMaters(maters)
.pcsn(param.getString("pcsn"))
.build()); .build());
Structattr struct = structattrs.get(0); Structattr struct = structattrs.get(0);
sect_id = struct.getSect_id(); sect_id = struct.getSect_id();
@ -386,7 +395,7 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
dis_map.put("struct_code", struct_code); dis_map.put("struct_code", struct_code);
dis_map.put("struct_name", struct_name); dis_map.put("struct_name", struct_name);
//锁定货位 //锁定货位
IOStorInv ioStorInv = ioStorInvMapper.selectById(map.get("iostorinv_id")); IOStorInv ioStorInv = ioStorInvMapper.selectById(iostorinvId);
JSONObject lock_map = new JSONObject(); JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", struct_code); lock_map.put("struct_code", struct_code);
lock_map.put("inv_id", ioStorInv.getIostorinv_id()); lock_map.put("inv_id", ioStorInv.getIostorinv_id());
@ -407,7 +416,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
.set(IOStorInvDis::getStruct_id,dis_map.getString("struct_id")) .set(IOStorInvDis::getStruct_id,dis_map.getString("struct_id"))
.set(IOStorInvDis::getStruct_code,dis_map.getString("struct_code")) .set(IOStorInvDis::getStruct_code,dis_map.getString("struct_code"))
.set(IOStorInvDis::getStruct_name,dis_map.getString("struct_name")) .set(IOStorInvDis::getStruct_name,dis_map.getString("struct_name"))
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id")) .eq(IOStorInvDis::getIostorinv_id,iostorinvId)
.eq(IOStorInvDis::getStoragevehicle_code,storagevehicleCode)
); );
//维护单据明细表里 分配数量 //维护单据明细表里 分配数量
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
@ -418,11 +428,11 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
ioStorInvDtlMapper.updateById(jsonObject.toJavaObject(IOStorInvDtl.class)); ioStorInvDtlMapper.updateById(jsonObject.toJavaObject(IOStorInvDtl.class));
//根据单据标识判断分配明细是否都已经分配完成 //根据单据标识判断分配明细是否都已经分配完成
int disCount = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) int disCount = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinv_id, map.get("iostorinv_id")) .eq(IOStorInvDis::getIostorinv_id, iostorinvId)
.and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code, ""))); .and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code, "")));
// 根据分配货位情况 更新主表单据状态 // 根据分配货位情况 更新主表单据状态
IOStorInv ios = new IOStorInv(); IOStorInv ios = new IOStorInv();
ios.setIostorinv_id(map.get("iostorinv_id")); ios.setIostorinv_id(iostorinvId);
ios.setUpdate_optid(currentUserId); ios.setUpdate_optid(currentUserId);
ios.setUpdate_optname(nickName); ios.setUpdate_optname(nickName);
ios.setUpdate_time(now); ios.setUpdate_time(now);
@ -431,33 +441,6 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
} }
/**
* 根据库区策略获取仓位
* ioType 出入库类型
* sect_code 库区编码
* stor_code 仓库编码
* material_code 物料编码
* qty 计划数量
* pcsn 批次号
*/
@Override
public Structattr getStructattr(JSONObject param) {
List<Structattr> structattrs = iStructattrService.inBoundSectDiv(
StrategyStructParam.builder()
.ioType(param.getString("ioType"))
.sect_code(param.getString("sect_code"))
.stor_code(param.getString("stor_code"))
.material_code(param.getString("material_code"))
.qty(new BigDecimal(param.getString("qty")))
.pcsn(param.getString("pcsn"))
.build());
if (CollectionUtils.isEmpty(structattrs)) {
throw new BadRequestException("无可用货位");
}
return structattrs.get(0);
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void unDivStruct(Map whereJson) { public void unDivStruct(Map whereJson) {
@ -485,7 +468,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
.set(IOStorInvDis::getStruct_id,null) .set(IOStorInvDis::getStruct_id,null)
.set(IOStorInvDis::getStruct_code,null) .set(IOStorInvDis::getStruct_code,null)
.set(IOStorInvDis::getStruct_name,null) .set(IOStorInvDis::getStruct_name,null)
.eq(IOStorInvDis::getIostorinvdis_id,jo.get("iostorinvdis_id")) .eq(IOStorInvDis::getIostorinv_id,jo.get("iostorinv_id"))
.eq(IOStorInvDis::getStoragevehicle_code,jo.get("storagevehicle_code"))
); );
//维护单据明细表里 分配数量 //维护单据明细表里 分配数量
@ -519,24 +503,20 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
HashMap<String, String> map = rows.get(0); HashMap<String, String> map = rows.get(0);
//判断是否已经分配好货位 //判断是否已经分配好货位
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class) List<IOStorInvDis> ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id")) .eq(IOStorInvDis::getIostorinv_id,map.get("iostorinv_id"))
.eq(IOStorInvDis::getStoragevehicle_code,map.get("storagevehicle_code"))
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code,""))); .and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code,"")));
if (ObjectUtil.isEmpty(ioStorInvDis)){ if (CollectionUtils.isEmpty(ioStorInvDis)){
throw new BadRequestException("该明细还没分配货位,请先分配货位"); throw new BadRequestException("该明细还没分配货位,请先分配货位");
} }
//创建任务 //创建任务
JSONObject task_form = new JSONObject(); JSONObject task_form = new JSONObject();
task_form.put("task_type", "STInTask"); task_form.put("task_type", "STInTask");
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task_form.put("PickingLocation", point_code); task_form.put("PickingLocation", point_code);
task_form.put("PlacedLocation", ioStorInvDis.getStruct_code()); task_form.put("PlacedLocation", ioStorInvDis.get(0).getStruct_code());
task_form.put("vehicle_code", map.get("storagevehicle_code")); task_form.put("vehicle_code", map.get("storagevehicle_code"));
// GroupPlate groupPlate = mdPbGroupplateMapper.selectOne(new LambdaQueryWrapper<>(GroupPlate.class)
// .eq(GroupPlate::getStoragevehicle_code,map.get("storagevehicle_code"))
// );
// task_form.put("group_id", groupPlate.getGroup_id());
StInTask stInTask = SpringContextHolder.getBean("STInTask"); StInTask stInTask = SpringContextHolder.getBean("STInTask");
String task_id = stInTask.create(task_form); String task_id = stInTask.create(task_form);
@ -548,7 +528,15 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
dis.setTask_id(task_id); dis.setTask_id(task_id);
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是")); dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
dis.setPoint_code(point_code); dis.setPoint_code(point_code);
ioStorInvDisMapper.updateById(dis); //更新详情数据
ioStorInvDisMapper.update(dis,new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("生成"))
.set(IOStorInvDis::getTask_id,task_id)
.set(IOStorInvDis::getIs_issued,BaseDataEnum.IS_YES_NOT.code("是"))
.set(IOStorInvDis::getPoint_code,point_code)
.eq(IOStorInvDis::getIostorinv_id,map.get("iostorinv_id"))
.eq(IOStorInvDis::getStoragevehicle_code,map.get("storagevehicle_code"))
.ne(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成")));
} }
@Override @Override
@ -633,63 +621,52 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void taskFinish(SchBaseTask task) { public void taskFinish(SchBaseTask task) {
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now(); String now = DateUtil.now();
List<IOStorInvDis> ioStorInvDis = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getTask_id,task.getTask_id()) .eq(IOStorInvDis::getTask_id,task.getTask_id())
); );
if (ObjectUtil.isEmpty(ioStorInvDis)){ if (CollectionUtils.isEmpty(ioStorInvDis)){
throw new BadRequestException("未找到任务对应的分配明细"); throw new BadRequestException("未找到任务对应的分配明细");
} }
// 明细 String iostorinvId = ioStorInvDis.get(0).getIostorinv_id();
IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id()); String storagevehicleCode = ioStorInvDis.get(0).getStoragevehicle_code();
if (ObjectUtil.isEmpty(ioStorInvDtl)){ String structCode = ioStorInvDis.get(0).getStruct_code();
throw new BadRequestException("未找到明细");
}
// 明细
IOStorInv ioStorInv = ioStorInvMapper.selectById(ioStorInvDis.getIostorinv_id());
if (ObjectUtil.isEmpty(ioStorInv)){
throw new BadRequestException("未找到明细");
}
// 完成当前分配明细
ioStorInvDisMapper.update(ioStorInvDis,new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成"))
.set(IOStorInvDis::getReal_qty,ioStorInvDis.getPlan_qty())
.eq(IOStorInvDis::getIostorinvdis_id,ioStorInvDis.getIostorinvdis_id())
);
//解锁库位 //解锁库位
JSONObject finish_map = new JSONObject(); JSONObject finish_map = new JSONObject();
finish_map.put("struct_code",ioStorInvDis.getStruct_code()); finish_map.put("struct_code", structCode);
finish_map.put("storagevehicle_code",ioStorInvDis.getStoragevehicle_code()); finish_map.put("storagevehicle_code", storagevehicleCode);
finish_map.put("inv_type", null); finish_map.put("inv_type", null);
finish_map.put("inv_id", null); finish_map.put("inv_id", null);
finish_map.put("inv_code", null); finish_map.put("inv_code", null);
iStructattrService.updateStatusByCode("1",finish_map); iStructattrService.updateStatusByCode("1",finish_map);
//库存变动 //库存变动
StructattrChangeDto changeDto = StructattrChangeDto.builder() StructattrChangeDto changeDto = StructattrChangeDto.builder()
.inv(ioStorInv.getIostorinv_id()) .inv(iostorinvId)
.storagevehicleCode(ioStorInvDis.getStoragevehicle_code()) .storagevehicleCode(storagevehicleCode)
.structCode(ioStorInvDis.getStruct_code()).taskType(task.getConfig_code()).inBound(true).build(); .structCode(structCode).taskType(task.getConfig_code()).inBound(true).build();
iStructattrService.changeStruct(changeDto); iStructattrService.changeStruct(changeDto);
// 完成当前分配明细
// 查询该明细下是否还有未完成的分配明细 Map<String, BigDecimal> dtlMap = new HashMap<>();
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) for (IOStorInvDis item : ioStorInvDis) {
.eq(IOStorInvDis::getIostorinvdtl_id,ioStorInvDis.getIostorinvdtl_id()) ioStorInvDisMapper.update(item,new LambdaUpdateWrapper<>(IOStorInvDis.class)
.ne(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成")) .set(IOStorInvDis::getWork_status,IOSEnum.INBILL_DIS_STATUS.code("完成"))
); .set(IOStorInvDis::getReal_qty,item.getPlan_qty())
// 如果分配明细全部完成则更新明细表状态 .eq(IOStorInvDis::getIostorinvdis_id,item.getIostorinvdis_id()));
if (countDis == 0){ dtlMap.put(item.getIostorinvdtl_id(),item.getPlan_qty());
// 更新明细表状态 }
ioStorInvDtl.setReal_qty(ioStorInvDis.getPlan_qty()); //更新明细
ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成")); for (String dtl_id : dtlMap.keySet()) {
ioStorInvDtlMapper.updateById(ioStorInvDtl); IOStorInvDtl invDtl = new IOStorInvDtl();
invDtl.setIostorinvdtl_id(dtl_id);
invDtl.setReal_qty(dtlMap.get(dtl_id));
invDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
ioStorInvDtlMapper.updateById(invDtl);
}
// 查看明细是否全部完成 // 查看明细是否全部完成
int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class) int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class)
.eq(IOStorInvDtl::getIostorinv_id,ioStorInvDtl.getIostorinv_id()) .eq(IOStorInvDtl::getIostorinv_id, iostorinvId)
.ne(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("完成")) .ne(IOStorInvDtl::getBill_status,IOSEnum.BILL_STATUS.code("完成"))
); );
// 如果明细全部完成则更新主表状态 // 如果明细全部完成则更新主表状态
@ -700,10 +677,10 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
.set(IOStorInv::getConfirm_optid,currentUserId) .set(IOStorInv::getConfirm_optid,currentUserId)
.set(IOStorInv::getConfirm_optname,nickName) .set(IOStorInv::getConfirm_optname,nickName)
.set(IOStorInv::getConfirm_time,now) .set(IOStorInv::getConfirm_time,now)
.eq(IOStorInv::getIostorinv_id,ioStorInvDtl.getIostorinv_id()) .eq(IOStorInv::getIostorinv_id,iostorinvId)
); );
} }
}
} }
@Override @Override

25
nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java

@ -23,10 +23,7 @@ import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr; import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto; import org.nl.wms.basedata_manage.service.dto.*;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto;
import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
@ -369,13 +366,17 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
String material_id = dtl.getMaterial_id(); String material_id = dtl.getMaterial_id();
String material_code = dtl.getMaterial_code(); String material_code = dtl.getMaterial_code();
// 根据物料和批次号查询库存可用 // 根据物料和批次号查询库存可用
StrategyMater mater = new StrategyMater();
mater.setQty(unassign_qty);
mater.setPcsn(pcsn);
mater.setMaterial_code(material_code);
List<StrategyMater> list = new ArrayList<>();
list.add(mater);
List<StrategyStructMaterialVO> structMaterials = iStructattrService.outBoundSectDiv( List<StrategyStructMaterialVO> structMaterials = iStructattrService.outBoundSectDiv(
StrategyStructParam.builder() StrategyStructParam.builder()
.qty(unassign_qty)
.pcsn(pcsn)
.material_code(material_code)
.stor_code(ioStorInv.getStor_code()) .stor_code(ioStorInv.getStor_code())
.sect_code(sectCode) .sect_code(sectCode)
.strategyMaters(list)
.build() .build()
); );
int seq_no = 1; int seq_no = 1;
@ -553,14 +554,18 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
BigDecimal unassign_qty = dtl.getUnassign_qty(); BigDecimal unassign_qty = dtl.getUnassign_qty();
String pcsn = dtl.getPcsn(); String pcsn = dtl.getPcsn();
String material_code = dtl.getMaterial_code(); String material_code = dtl.getMaterial_code();
StrategyMater mater = new StrategyMater();
mater.setQty(unassign_qty);
mater.setPcsn(pcsn);
mater.setMaterial_code(material_code);
List<StrategyMater> list = new ArrayList<>();
list.add(mater);
//调用分配规则获取分配的库位:如果库存不足则直接报错 //调用分配规则获取分配的库位:如果库存不足则直接报错
List<StrategyStructMaterialVO> structMaterials = iStructattrService.outBoundSectDiv( List<StrategyStructMaterialVO> structMaterials = iStructattrService.outBoundSectDiv(
StrategyStructParam.builder() StrategyStructParam.builder()
.qty(unassign_qty)
.pcsn(pcsn)
.material_code(material_code)
.stor_code(ioStorInv.getStor_code()) .stor_code(ioStorInv.getStor_code())
.sect_code(sectCode) .sect_code(sectCode)
.strategyMaters(list)
.build() .build()
); );
int seq_no = 1; int seq_no = 1;

2
nladmin-ui/src/views/wms/st/inbill/AddDialog.vue

@ -313,7 +313,7 @@ export default {
rows.forEach((item) => { rows.forEach((item) => {
let same_mater = true let same_mater = true
this.form.tableData.forEach((row) => { this.form.tableData.forEach((row) => {
if (row.pcsn === item.pcsn) { if (row.pcsn === item.pcsn && row.material_id === item.material_id) {
same_mater = false same_mater = false
} }
}) })

1
nladmin-ui/src/views/wms/st/inbill/DivDialog.vue

@ -159,6 +159,7 @@
:header-cell-style="{background:'#f5f7fa',color:'#606266'}" :header-cell-style="{background:'#f5f7fa',color:'#606266'}"
> >
<el-table-column show-overflow-tooltip type="index" label="序号" align="center" /> <el-table-column show-overflow-tooltip type="index" label="序号" align="center" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="载具编码" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" /> <el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" /> <el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" /> <el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" />

Loading…
Cancel
Save