rev: 成品入库修改

This commit is contained in:
2023-06-16 08:49:44 +08:00
parent caa6ce91b2
commit 20ab356de0
11 changed files with 378 additions and 222 deletions

View File

@@ -7,6 +7,7 @@
der.*, der.*,
mater.material_code, mater.material_code,
mater.material_name, mater.material_name,
mater.material_spec,
unit.unit_name AS qty_unit_name unit.unit_name AS qty_unit_name
FROM FROM
mps_sale_order der mps_sale_order der

View File

@@ -19,6 +19,8 @@ public enum IOSEnum {
IO_TYPE(MapOf.of("入库", "0", "出库", "1")), IO_TYPE(MapOf.of("入库", "0", "出库", "1")),
//是否 //是否
IS_USED(MapOf.of("", "1", "", "0")), IS_USED(MapOf.of("", "1", "", "0")),
//托盘超限类型
VEHICLE_OVER_TYPE(MapOf.of("标准", "00", "横向超", "01","纵向超","02")),
//单据类型 //单据类型
BILL_TYPE(MapOf.of("生产入库", "11", "手工入库", "12", "原料入库", "13" BILL_TYPE(MapOf.of("生产入库", "11", "手工入库", "12", "原料入库", "13"
, "领料出库", "21", "销售出库", "22", "手工出库", "23")), , "领料出库", "21", "销售出库", "22", "手工出库", "23")),

View File

@@ -75,11 +75,10 @@ public class IStivtlostorivnCpInController {
} }
@PostMapping("/vehicleCheck") @PostMapping("/vehicleCheck")
@Log("校验载具是否存在") @Log("生成载具")
@ApiOperation("校验载具是否存在") @ApiOperation("生成载具")
public ResponseEntity<Object> vehicleCheck(@RequestBody JSONObject whereJson){ public ResponseEntity<Object> vehicleCheck(){
iStIvtIostorinvCpService.vehicleCheck(whereJson); return new ResponseEntity<>(iStIvtIostorinvCpService.vehicleCheck(),HttpStatus.OK);
return new ResponseEntity<>(HttpStatus.OK);
} }
@PostMapping("/confirmvehicle") @PostMapping("/confirmvehicle")

View File

@@ -110,13 +110,13 @@ public interface IStIvtIostorinvCpService extends IService<StIvtIostorinvCp> {
void delete(Long[] ids); void delete(Long[] ids);
/** /**
* 校验载具是否存在 * 生成载具编码
* @param whereJson * @return JSONObject
* { * {
* "storagevehicle_code" : 载具号 * vehicle_code 编码
* } * }
*/ */
void vehicleCheck(JSONObject whereJson); JSONObject vehicleCheck();
/** /**
* 分配 * 分配

View File

@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -201,8 +202,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
1.插入分配明细表 1.插入分配明细表
2.插入分配表 2.插入分配表
3.更新明细表 3.更新明细表
4.更新扩展属性表 4.更新箱记录表 (有箱号才更新)
5.更新箱记录表 (有箱号才更新)
*/ */
JSONObject jsonDtl = whereJson.getJSONObject("dtl_row"); JSONObject jsonDtl = whereJson.getJSONObject("dtl_row");
JSONArray tableDisDtl = whereJson.getJSONArray("tableMater"); JSONArray tableDisDtl = whereJson.getJSONArray("tableMater");
@@ -210,24 +210,15 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
/* /*
处理有箱号分配明细: 要插入分配明细表 处理有箱号分配明细: 要插入分配明细表
*/ */
// 校验是否已经组盘
StIvtIostorinvdisCp disIs = iostorinvdisCpService.getOne(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdtl_id, jsonDtl.getString("iostorinvdtl_id"))
);
if (ObjectUtil.isNotEmpty(disIs)) throw new BadRequestException("此明细已组盘");
List<JSONObject> disDtlList = tableDisDtl List<JSONObject> disDtlList = tableDisDtl
.stream() .stream()
.map(row -> (JSONObject) row) .map(row -> (JSONObject) row)
.filter(row -> ObjectUtil.isNotEmpty(row.getString("bucketunique"))) .filter(row -> ObjectUtil.isNotEmpty(row.getString("bucketunique")))
.filter(row -> ObjectUtil.isEmpty(row.getString("iostorinvdis_id")))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 1.处理分配明细数据 // 1.处理分配明细数据
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("iostorinv_id",jsonDtl.getString("iostorinv_id"));
param.put("iostorinvdtl_id",jsonDtl.getString("iostorinvdtl_id"));
param.put("iostorinvdis_id",org.nl.common.utils.IdUtil.getStringId()); param.put("iostorinvdis_id",org.nl.common.utils.IdUtil.getStringId());
if (ObjectUtil.isNotEmpty(disDtlList)) { if (ObjectUtil.isNotEmpty(disDtlList)) {
@@ -238,7 +229,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
// 3.根据托盘分组 // 3.根据托盘分组
Map<String, List<StIvtIostorinvdisdtlCp>> collect = disDtlDaoListAll Map<String, List<StIvtIostorinvdisdtlCp>> collect = disDtlDaoListAll
.stream() .stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisdtlCp::getStoragevehicle_code)); .collect(Collectors.groupingBy(StIvtIostorinvdisdtlCp::getIostorinvdtl_id));
for (List<StIvtIostorinvdisdtlCp> disDtlDaoList : collect.values()) { for (List<StIvtIostorinvdisdtlCp> disDtlDaoList : collect.values()) {
// 3.调用服务插入分配明细 // 3.调用服务插入分配明细
@@ -256,8 +247,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
// 插入分配 // 插入分配
StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp() StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp()
.setIostorinvdis_id(IdUtil.getStringId()) .setIostorinvdis_id(IdUtil.getStringId())
.setIostorinv_id(param.getString("iostorinv_id")) .setIostorinv_id(disDtlDao.getIostorinv_id())
.setIostorinvdtl_id(param.getString("iostorinvdtl_id")) .setIostorinvdtl_id(disDtlDao.getIostorinvdtl_id())
.setSeq_no(1) .setSeq_no(1)
.setMaterial_id(disDtlDao.getMaterial_id()) .setMaterial_id(disDtlDao.getMaterial_id())
.setPcsn(disDtlDao.getPcsn()) .setPcsn(disDtlDao.getPcsn())
@@ -281,21 +272,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
new StIvtIostorinvdisdtlCp().setIostorinvdis_id(disDao.getIostorinvdis_id()), new StIvtIostorinvdisdtlCp().setIostorinvdis_id(disDao.getIostorinvdis_id()),
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda() new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
.eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, param.getString("iostorinvdis_id")) .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, param.getString("iostorinvdis_id"))
.eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) .eq(StIvtIostorinvdisdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id())
); );
// 6.更新载具扩展属性表
MdPbStoragevehicleext vehicleDao = new MdPbStoragevehicleext();
vehicleDao.setMaterial_id(disDtlDao.getMaterial_id());
vehicleDao.setStorage_qty(qty);
vehicleDao.setUpdate_id(SecurityUtils.getCurrentUserId());
vehicleDao.setUpdate_name(SecurityUtils.getCurrentNickName());
vehicleDao.setUpdate_time(new Date());
iMdPbStoragevehicleextService.update(
vehicleDao,new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, disDtlDao.getStoragevehicle_code())
);
} }
} }
@@ -306,6 +285,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.stream() .stream()
.map(row -> (JSONObject) row) .map(row -> (JSONObject) row)
.filter(row -> ObjectUtil.isEmpty(row.getString("bucketunique"))) .filter(row -> ObjectUtil.isEmpty(row.getString("bucketunique")))
.filter(row -> ObjectUtil.isEmpty(row.getString("iostorinvdis_id")))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(unDisDtlList)) { if (ObjectUtil.isNotEmpty(unDisDtlList)) {
@@ -320,48 +300,53 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void cancelConfirmvehicle(JSONObject whereJson) { public void cancelConfirmvehicle(JSONObject whereJson) {
String bucketunique = whereJson.getString("bucketunique");
// 1.校验是否分配了货位 // 1.校验是否分配了货位
List<StIvtIostorinvdisCp> disDaoList = iostorinvdisCpService.list( if (ObjectUtil.isNotEmpty(whereJson.getString("struct_id"))) throw new BadRequestException("已分配货位,不可取消组盘!");
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id"))
);
if (ObjectUtil.isEmpty(disDaoList)) throw new BadRequestException("没有可取消组盘的分配明细!");
boolean is_struct = disDaoList.stream()
.anyMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_id()));
if (is_struct) throw new BadRequestException("有分配明细已分配货位不可取消组盘!");
// 2.更新载具扩展属性、 箱记录
Map<String, List<StIvtIostorinvdisCp>> collect = disDaoList.stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getStoragevehicle_code));
for (String storagevehicle_code : collect.keySet()) {
// 更新载具扩展属性
iMdPbStoragevehicleextService.update(
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
.set(MdPbStoragevehicleext::getMaterial_id, "")
.set(MdPbStoragevehicleext::getStorage_qty, "0")
.eq(MdPbStoragevehicleext::getStoragevehicle_code, storagevehicle_code)
);
// 2.判断是否有箱,有则更新箱记录表、分配表
if (ObjectUtil.isNotEmpty(bucketunique)) {
// 更新箱记录表 // 更新箱记录表
iMdPbBucketrecordService.update( iMdPbBucketrecordService.update(
new UpdateWrapper<MdPbBucketrecord>().lambda() new UpdateWrapper<MdPbBucketrecord>().lambda()
.set(MdPbBucketrecord::getStoragevehicle_code, "") .set(MdPbBucketrecord::getStoragevehicle_code, "")
.set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成"))
.set(MdPbBucketrecord::getStoragevehicle_id, "") .set(MdPbBucketrecord::getStoragevehicle_id, "")
.eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘"))
.eq(MdPbBucketrecord::getStoragevehicle_code, storagevehicle_code) .eq(MdPbBucketrecord::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
);
// 删除分配明细
iStIvtIostorinvdisdtlCpService.remove(
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
.eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id"))
.eq(StIvtIostorinvdisdtlCp::getBucketunique, bucketunique)
);
// 更新分配表
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getById(whereJson.getString("iostorinvdis_id"));
BigDecimal qty = NumberUtil.sub(disDao.getReal_qty(), whereJson.getBigDecimal("qty"));
disDao.setReal_qty(qty);
disDao.setPlan_qty(qty);
if (disDao.getReal_qty().doubleValue() <= 0) {
// 删除分配
iostorinvdisCpService.removeById(disDao);
} else {
// 更新
iostorinvdisCpService.updateById(disDao);
}
} else {
// 3无箱 - 直接删除分配
iostorinvdisCpService.remove(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id"))
); );
} }
// 3.删除分配表
iostorinvdisCpService.remove(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id"))
);
} }
@@ -378,29 +363,13 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
} }
@Override @Override
public void vehicleCheck(JSONObject whereJson) { public JSONObject vehicleCheck() {
// 1.校验载具是否存在 // 生成编码返回
MdPbStoragevehicleinfo daoVehicle = iMdPbStoragevehicleinfoService.getOne( JSONObject json = new JSONObject();
new QueryWrapper<MdPbStoragevehicleinfo>().lambda() json.put("vehicle_code", CodeUtil.getNewCode("VEHICCLE_CODE_CDMTP"));
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) return json;
.eq(MdPbStoragevehicleinfo::getIs_used, true)
);
if (ObjectUtil.isEmpty(daoVehicle)) throw new BadRequestException("此载具不存在或未启用");
// 2.校验载具是否已组盘
MdPbStoragevehicleext daoVehicleExt = iMdPbStoragevehicleextService.getOne(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
);
if (ObjectUtil.isEmpty(daoVehicleExt)) {
throw new BadRequestException("此载具扩展属性不存在,请维护!");
} else {
if (ObjectUtil.isNotEmpty(daoVehicleExt.getMaterial_id()))
throw new BadRequestException("此载具已组盘!");
}
} }
@Override @Override
@@ -430,7 +399,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
/* 自动分配 */ /* 自动分配 */
// 判断载具是否超限 // 判断载具是否超限
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code(""))) { if (StrUtil.equals(whereJson.getString("vehicle_overstruct_type"),IOSEnum.VEHICLE_OVER_TYPE.code("横向超"))) {
whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_2); whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_2);
} else { } else {
whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_1); whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_1);
@@ -465,11 +434,29 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
iStIvtStructattrService.updateById(attrDao); iStIvtStructattrService.updateById(attrDao);
// 4.更新库存 // 4.更新库存
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao.getIostorinvdtl_id()); Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
)
.stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getMaterial_id));
disDao.setStruct_id(attrDao.getStruct_id()); for (List<StIvtIostorinvdisCp> list : collect.values()) {
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getSource_billdtl_id()));
BigDecimal qty = list
.stream()
.map(StIvtIostorinvdisCp::getReal_qty)
.reduce(BigDecimal.ZERO, BigDecimal::add);
StIvtIostorinvdisCp disDao_1 = list.get(0);
disDao_1.setPlan_qty(qty);
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id());
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getBase_billdtl_id()));
}
} }
@Override @Override
@@ -503,7 +490,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.setSect_code("") .setSect_code("")
.setSect_name(""), .setSect_name(""),
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda() new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
.eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id,disDao.getIostorinvdis_id()) .eq(StIvtIostorinvdisdtlCp::getIostorinv_id,disDao.getIostorinv_id())
.eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, disDao.getStoragevehicle_code())
); );
// 3.更新任务 // 3.更新任务
@@ -526,9 +514,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
); );
// 判断载具是否超限 // 判断载具是否超限
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getById(disDao.getStoragevehicle_id()); if (StrUtil.equals(whereJson.getString("vehicle_overstruct_type"),IOSEnum.VEHICLE_OVER_TYPE.code("横向超"))) {
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code(""))) {
// 解锁超限货位 // 解锁超限货位
iStIvtStructattrService.update( iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda() new UpdateWrapper<StIvtStructattr>().lambda()
@@ -538,41 +525,83 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
} }
// 更新库存 // 更新库存
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.SUBWAREHOUSING_QTY,null)); Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
)
.stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getMaterial_id));
// 4.更新分配 for (List<StIvtIostorinvdisCp> list : collect.values()) {
iostorinvdisCpService.updateById(
disDao.setStruct_name("").setStruct_code("")
.setStruct_id("").setSect_id("")
.setSect_code("").setSect_name("")
.setPoint_id("").setPoint_code("")
.setPoint_name("")
.setWork_status(IOSEnum.WORK_STATUS.code("生成"))
);
// 5.更新明细 BigDecimal qty = list
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getOne( .stream()
new QueryWrapper<StIvtIostorinvdtlCp>().lambda() .map(StIvtIostorinvdisCp::getReal_qty)
.eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id()) .reduce(BigDecimal.ZERO, BigDecimal::add);
);
StIvtIostorinvdisCp disDao_1 = list.get(0);
disDao_1.setPlan_qty(qty);
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.SUBWAREHOUSING_QTY,null));
if (StrUtil.equals(dtlDao.getBill_status(), IOSEnum.BILL_STATUS.code("生成"))) {
throw new BadRequestException("没有可取消的分配明细!");
} }
dtlDao.setAssign_qty(NumberUtil.sub(dtlDao.getAssign_qty(),disDao.getReal_qty())); // 4.更新明细
dtlDao.setUnassign_qty(disDao.getReal_qty()); Map<String, List<StIvtIostorinvdisCp>> collect2 = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
)
.stream()
.filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id()))
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
if (dtlDao.getAssign_qty().doubleValue() == 0) { for (List<StIvtIostorinvdisCp> collectList : collect2.values()) {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); // 计算已分配
} else if (dtlDao.getAssign_qty().doubleValue() > 0) { BigDecimal qty = collectList
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); .stream()
.map(StIvtIostorinvdisCp::getReal_qty)
.reduce(BigDecimal.ZERO, BigDecimal::add);
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id());
// 明细已分配数量
BigDecimal assign_qty = NumberUtil.sub(dtlDao.getAssign_qty(), qty);
// 明细未分配数量
BigDecimal unAssign_qty = NumberUtil.add(dtlDao.getUnassign_qty(), qty);
dtlDao.setAssign_qty(assign_qty);
dtlDao.setUnassign_qty(unAssign_qty);
if (assign_qty.doubleValue() == 0) {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
} else {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
}
iostorinvdtlCpService.updateById(dtlDao);
} }
iostorinvdtlCpService.updateById(dtlDao); // 5.更新分配
iostorinvdisCpService.update(
new UpdateWrapper<StIvtIostorinvdisCp>().lambda()
.set(StIvtIostorinvdisCp::getStruct_id, "")
.set(StIvtIostorinvdisCp::getStruct_code, "")
.set(StIvtIostorinvdisCp::getStruct_name,"")
.set(StIvtIostorinvdisCp::getSect_id,"")
.set(StIvtIostorinvdisCp::getSect_code,"")
.set(StIvtIostorinvdisCp::getSect_name, "")
.set(StIvtIostorinvdisCp::getPoint_id, "")
.set(StIvtIostorinvdisCp::getPoint_code, "")
.set(StIvtIostorinvdisCp::getPoint_name,"")
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成"))
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
.eq(StIvtIostorinvdisCp::getIostorinv_id,whereJson.getString("iostorinv_id"))
);
// 6.更新主表 // 6.更新主表
updateMst(dtlDao.getIostorinv_id()); updateMst(disDao.getIostorinv_id());
} }
@@ -603,12 +632,17 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
BussEventMulticaster.Publish(event); BussEventMulticaster.Publish(event);
// 3.更新分配表 // 3.更新分配表
iostorinvdisCpService.updateById( iostorinvdisCpService.update(
disDao.setPoint_id(pointDao.getPoint_id()) new UpdateWrapper<StIvtIostorinvdisCp>().lambda()
.setPoint_code(pointDao.getPoint_code()) .set(StIvtIostorinvdisCp::getPoint_id, pointDao.getPoint_id())
.setPoint_name(pointDao.getPoint_name()) .set(StIvtIostorinvdisCp::getPoint_code, pointDao.getPoint_code())
.setWork_status(IOSEnum.WORK_STATUS.code("生成")) .set(StIvtIostorinvdisCp::getPoint_name,pointDao.getPoint_name())
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成"))
.set(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id())
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code())
.eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id())
); );
} }
@Override @Override
@@ -695,9 +729,6 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
String task_id = form.getString("task_id"); String task_id = form.getString("task_id");
String status = form.getString("status"); String status = form.getString("status");
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getOne(new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getTask_id, task_id));
// 更新任务状态为完成 // 更新任务状态为完成
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 更新任务为完成 // 更新任务为完成
@@ -712,12 +743,23 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.eq(StIvtIostorinvdisCp::getTask_id, task_id) .eq(StIvtIostorinvdisCp::getTask_id, task_id)
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("完成")) .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("完成"))
); );
// 调用分配完成 // 调用分配完成
JSONObject mst_jo = new JSONObject(); Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
mst_jo.put("iostorinvdtl_id", disDao.getIostorinvdtl_id()); new QueryWrapper<StIvtIostorinvdisCp>().lambda()
mst_jo.put("iostorinv_id", disDao.getIostorinv_id()); .eq(StIvtIostorinvdisCp::getTask_id, task_id)
mst_jo.put("is_out", false); )
iostorinvdisCpService.confirm(mst_jo); .stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
for(List<StIvtIostorinvdisCp> list : collect.values()) {
StIvtIostorinvdisCp disDao_2 = list.get(0);
JSONObject mst_jo = new JSONObject();
mst_jo.put("iostorinvdtl_id", disDao_2.getIostorinvdtl_id());
mst_jo.put("iostorinv_id", disDao_2.getIostorinv_id());
mst_jo.put("is_out", false);
iostorinvdisCpService.confirm(mst_jo);
}
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { } else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 更新任务为执行中 // 更新任务为执行中
@@ -734,6 +776,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
); );
} else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) { } else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 取消任务 // 取消任务
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getOne(new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getTask_id, task_id),false);
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("iostorinvdis_id",disDao.getIostorinvdis_id()); param.put("iostorinvdis_id",disDao.getIostorinvdis_id());
delTask(param); delTask(param);
@@ -753,12 +798,16 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
); );
// 2.更新分配 // 2.更新分配
disDao.setTask_id(""); iostorinvdisCpService.update(
disDao.setPoint_code(""); new UpdateWrapper<StIvtIostorinvdisCp>().lambda()
disDao.setPoint_id(""); .set(StIvtIostorinvdisCp::getPoint_id, "")
disDao.setPoint_name(""); .set(StIvtIostorinvdisCp::getPoint_code, "")
disDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成")); .set(StIvtIostorinvdisCp::getPoint_name,"")
iostorinvdisCpService.updateById(disDao); .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("未生成"))
.set(StIvtIostorinvdisCp::getTask_id, "")
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code())
.eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id())
);
} }
@Override @Override
@@ -847,7 +896,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.setStruct_code(attrDao.getStruct_code()) .setStruct_code(attrDao.getStruct_code())
.setStruct_name(attrDao.getStruct_name()), .setStruct_name(attrDao.getStruct_name()),
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda() new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
.eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) .eq(StIvtIostorinvdisdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
); );
@@ -861,23 +910,45 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.setStruct_code(attrDao.getStruct_code()) .setStruct_code(attrDao.getStruct_code())
.setStruct_name(attrDao.getStruct_name()), .setStruct_name(attrDao.getStruct_name()),
new QueryWrapper<StIvtIostorinvdisCp>().lambda() new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
); );
// 3.更新明细表 // 3.更新明细表
BigDecimal unassign_qty = iostorinvdtlCpService.getOne( Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdtlCp>().lambda() new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
).getUnassign_qty(); .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
)
.stream()
.filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id()))
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
iostorinvdtlCpService.update( for (List<StIvtIostorinvdisCp> collectList : collect.values()) {
new StIvtIostorinvdtlCp() // 计算已分配
.setBill_status(IOSEnum.BILL_STATUS.code("分配完")) BigDecimal qty = collectList
.setAssign_qty(unassign_qty) .stream()
.setUnassign_qty(new BigDecimal(0)), .map(StIvtIostorinvdisCp::getReal_qty)
new QueryWrapper<StIvtIostorinvdtlCp>().lambda() .reduce(BigDecimal.ZERO, BigDecimal::add);
.eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id"))
); StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id());
// 明细已分配数量
BigDecimal assign_qty = NumberUtil.add(dtlDao.getAssign_qty(), qty);
// 明细未分配数量
BigDecimal unAssign_qty = NumberUtil.sub(dtlDao.getUnassign_qty(), qty);
dtlDao.setAssign_qty(assign_qty);
dtlDao.setUnassign_qty(unAssign_qty);
if (unAssign_qty.doubleValue() == 0) {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
} else {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
}
iostorinvdtlCpService.updateById(dtlDao);
}
// 4.更新主表 // 4.更新主表
updateMst(whereJson.getString("iostorinv_id")); updateMst(whereJson.getString("iostorinv_id"));

View File

@@ -92,11 +92,6 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl<StIvtIostorinvdi
List<StIvtIostorinvdisCp> result = new ArrayList<>(); List<StIvtIostorinvdisCp> result = new ArrayList<>();
list.forEach(item -> { list.forEach(item -> {
// 获取载具信息
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>()
.eq("storagevehicle_code", item.getString("storagevehicle_code"))
);
// 获取物料信息 // 获取物料信息
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne( MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne(
@@ -108,10 +103,13 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl<StIvtIostorinvdi
new QueryWrapper<MdPbMeasureunit>().eq("measure_unit_id", materDao.getBase_unit_id()) new QueryWrapper<MdPbMeasureunit>().eq("measure_unit_id", materDao.getBase_unit_id())
); );
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(item.getString("iostorinvdtl_id"));
StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp() StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp()
.setIostorinvdis_id(json.getString("iostorinvdis_id")) .setIostorinvdis_id(IdUtil.getStringId())
.setIostorinvdtl_id(json.getString("iostorinvdtl_id")) .setIostorinvdtl_id(dtlDao.getIostorinvdtl_id())
.setIostorinv_id(json.getString("iostorinv_id")) .setIostorinv_id(dtlDao.getIostorinv_id())
.setSeq_no(1) .setSeq_no(1)
.setMaterial_id(materDao.getMaterial_id()) .setMaterial_id(materDao.getMaterial_id())
.setPcsn(DateUtil.today()) .setPcsn(DateUtil.today())
@@ -119,9 +117,7 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl<StIvtIostorinvdi
.setIvt_level(IVTEnum.IVT_LEVEL.code("一级")) .setIvt_level(IVTEnum.IVT_LEVEL.code("一级"))
.setIs_active(true) .setIs_active(true)
.setWork_status(IOSEnum.WORK_STATUS.code("未生成")) .setWork_status(IOSEnum.WORK_STATUS.code("未生成"))
.setStoragevehicle_id(vehicleDao.getStoragevehicle_id()) .setStoragevehicle_code(item.getString("storagevehicle_code"))
.setStoragevehicle_code(vehicleDao.getStoragevehicle_code())
.setStoragevehicle_type(vehicleDao.getStoragevehicle_type())
.setIs_issued(false) .setIs_issued(false)
.setQty_unit_id(unitDao.getMeasure_unit_id()) .setQty_unit_id(unitDao.getMeasure_unit_id())
.setQty_unit_name(unitDao.getUnit_name()) .setQty_unit_name(unitDao.getUnit_name())
@@ -129,18 +125,6 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl<StIvtIostorinvdi
.setReal_qty(item.getBigDecimal("qty")); .setReal_qty(item.getBigDecimal("qty"));
result.add(disDao); result.add(disDao);
// 更新载具扩展属性表
MdPbStoragevehicleext vehicleExtDao = new MdPbStoragevehicleext();
vehicleExtDao.setMaterial_id(item.getString("material_id"));
vehicleExtDao.setStorage_qty(NumberUtil.add(vehicleExtDao.getStorage_qty(),item.getBigDecimal("qty")));
vehicleExtDao.setUpdate_id(SecurityUtils.getCurrentUserId());
vehicleExtDao.setUpdate_name(SecurityUtils.getCurrentNickName());
vehicleExtDao.setUpdate_time(new Date());
iMdPbStoragevehicleextService.update(
vehicleExtDao,new QueryWrapper<MdPbStoragevehicleext>().eq("storagevehicle_code", vehicleDao.getStoragevehicle_code())
);
}); });
return result; return result;
} }

View File

@@ -16,7 +16,9 @@ import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo;
import org.nl.wms.storage_manage.IVTEnum; import org.nl.wms.storage_manage.IVTEnum;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisdtlCpService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisdtlCpService;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdtlCpService;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvdisdtlCpMapper; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvdisdtlCpMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -52,6 +54,9 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
protected IMdMeMaterialbaseService iMdMeMaterialbaseService; // 物料服务 protected IMdMeMaterialbaseService iMdMeMaterialbaseService; // 物料服务
@Autowired
protected IStIvtIostorinvdtlCpService iostorinvdtlCpService; // 成品出入库明细表服务
@Override @Override
public void batchInsert(Collection<StIvtIostorinvdisdtlCp> list) { public void batchInsert(Collection<StIvtIostorinvdisdtlCp> list) {
if (!CollectionUtils.isEmpty(list)){ if (!CollectionUtils.isEmpty(list)){
@@ -69,20 +74,17 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
List<StIvtIostorinvdisdtlCp> result = new ArrayList<>(); List<StIvtIostorinvdisdtlCp> result = new ArrayList<>();
list.forEach(item -> { list.forEach(item -> {
// 获取载具信息
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>()
.eq("storagevehicle_code", item.getString("storagevehicle_code"))
);
MdMeMaterialbase mataDao = iMdMeMaterialbaseService.getOne( MdMeMaterialbase mataDao = iMdMeMaterialbaseService.getOne(
new QueryWrapper<MdMeMaterialbase>().lambda() new QueryWrapper<MdMeMaterialbase>().lambda()
.eq(MdMeMaterialbase::getMaterial_code, item.getString("material_code")) .eq(MdMeMaterialbase::getMaterial_code, item.getString("material_code"))
); );
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(item.getString("iostorinvdtl_id"));
StIvtIostorinvdisdtlCp disDtlDao = new StIvtIostorinvdisdtlCp() StIvtIostorinvdisdtlCp disDtlDao = new StIvtIostorinvdisdtlCp()
.setIostorinv_id(json.getString("iostorinv_id")) .setIostorinv_id(dtlDao.getIostorinv_id())
.setIostorinvdtl_id(json.getString("iostorinvdtl_id")) .setIostorinvdtl_id(dtlDao.getIostorinvdtl_id())
.setIostorinvdis_id(json.getString("iostorinvdis_id")) .setIostorinvdis_id(json.getString("iostorinvdis_id"))
.setIostorinvdisdtl_id(IdUtil.getStringId()) .setIostorinvdisdtl_id(IdUtil.getStringId())
.setSeq_no(new BigDecimal(1)) .setSeq_no(new BigDecimal(1))
@@ -91,9 +93,7 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
.setQuality_scode(IVTEnum.QUALITY_SCODE.code("合格品")) .setQuality_scode(IVTEnum.QUALITY_SCODE.code("合格品"))
.setIvt_level(IVTEnum.IVT_LEVEL.code("一级")) .setIvt_level(IVTEnum.IVT_LEVEL.code("一级"))
.setIs_active(true) .setIs_active(true)
.setStoragevehicle_id(vehicleDao.getStoragevehicle_id()) .setStoragevehicle_code(item.getString("storagevehicle_code"))
.setStoragevehicle_code(vehicleDao.getStoragevehicle_code())
.setStoragevehicle_type(vehicleDao.getStoragevehicle_type())
.setBucketunique(item.getString("bucketunique")) .setBucketunique(item.getString("bucketunique"))
.setQty_unit_id(item.getString("qty_unit_id")) .setQty_unit_id(item.getString("qty_unit_id"))
.setQty_unit_name(item.getString("qty_unit_name")) .setQty_unit_name(item.getString("qty_unit_name"))
@@ -103,9 +103,8 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
// 更新箱记录表 // 更新箱记录表
iMdPbBucketrecordService.update( iMdPbBucketrecordService.update(
MdPbBucketrecord.builder() MdPbBucketrecord.builder()
.storagevehicle_id(vehicleDao.getStoragevehicle_id())
.status(MasterEnum.BOX_STATUS.code("组盘")) .status(MasterEnum.BOX_STATUS.code("组盘"))
.storagevehicle_code(vehicleDao.getStoragevehicle_code()) .storagevehicle_code(item.getString("storagevehicle_code"))
.instor_optid(Long.getLong(SecurityUtils.getCurrentUserId())) .instor_optid(Long.getLong(SecurityUtils.getCurrentUserId()))
.instor_optname(SecurityUtils.getCurrentNickName()) .instor_optname(SecurityUtils.getCurrentNickName())
.instor_time(DateUtil.now()) .instor_time(DateUtil.now())

View File

@@ -1,15 +1,19 @@
package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl; package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.masterdata_manage.service.master.IMdPbMeasureunitService; import org.nl.wms.masterdata_manage.service.master.IMdPbMeasureunitService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.mps_manage.ordermanage.service.saleOrder.IMpsSaleOrderService;
import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.MpsSaleOrder;
import org.nl.wms.storage_manage.IOSEnum; import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.IVTEnum; import org.nl.wms.storage_manage.IVTEnum;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService;
@@ -50,6 +54,9 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
@Autowired @Autowired
protected IStIvtIostorinvdisCpService iostorinvdisCpService; protected IStIvtIostorinvdisCpService iostorinvdisCpService;
@Autowired
protected IMpsSaleOrderService iMpsSaleOrderService; // 销售订单服务
@Override @Override
public void batchInsert(Collection<StIvtIostorinvdtlCp> list) { public void batchInsert(Collection<StIvtIostorinvdtlCp> list) {
@@ -74,6 +81,21 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
.eq(MdMeMaterialbase::getMaterial_code, json.getString("material_code")) .eq(MdMeMaterialbase::getMaterial_code, json.getString("material_code"))
); );
if (ObjectUtil.isNotEmpty(row.getSource_bill_code())) {
MpsSaleOrder orderDao = iMpsSaleOrderService.getOne(
new QueryWrapper<MpsSaleOrder>().lambda()
.eq(MpsSaleOrder::getSale_code, row.getBase_bill_code())
.eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table())
);
if (ObjectUtil.isEmpty(orderDao))
throw new BadRequestException("销售单号错误!");
row.setBase_billdtl_id(orderDao.getSale_id().toString());
row.setBase_bill_code(orderDao.getSale_code());
row.setBase_bill_type(orderDao.getSale_type());
row.setBase_bill_table(orderDao.getSeq_no().toString());
}
row.setIostorinv_id(iostorinvCp_id); row.setIostorinv_id(iostorinvCp_id);
row.setMaterial_id(materDao.getMaterial_id()); row.setMaterial_id(materDao.getMaterial_id());
row.setIostorinvdtl_id(org.nl.common.utils.IdUtil.getStringId()); row.setIostorinvdtl_id(org.nl.common.utils.IdUtil.getStringId());

View File

@@ -146,6 +146,7 @@
<span v-show="scope.row.edit">{{ scope.row.material_code }}</span> <span v-show="scope.row.edit">{{ scope.row.material_code }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column show-overflow-tooltip prop="material_spec" label="物料规格" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" /> <el-table-column show-overflow-tooltip prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="入库数量"> <el-table-column show-overflow-tooltip prop="plan_qty" label="入库数量">
<template slot-scope="scope"> <template slot-scope="scope">
@@ -168,8 +169,33 @@
<el-input v-model="form.tableData[scope.$index].remark" size="small" /> <el-input v-model="form.tableData[scope.$index].remark" size="small" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column show-overflow-tooltip prop="source_bill_type" label="源单类型" /> <el-table-column show-overflow-tooltip prop="base_bill_type" label="源单类型" />
<el-table-column show-overflow-tooltip prop="source_bill_code" label="源单号" /> <el-table-column show-overflow-tooltip prop="base_bill_code" label="源单号">
<template slot-scope="scope">
<el-input
v-show="!scope.row.edit"
v-model="form.tableData[scope.$index].base_bill_code"
clearable
:controls="false"
controls-position="right"
size="small"
/>
<span v-show="scope.row.edit">{{ scope.row.base_bill_code }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="base_bill_table" label="源单行号">
<template slot-scope="scope">
<el-input
v-show="!scope.row.edit"
v-model="form.tableData[scope.$index].base_bill_table"
clearable
:controls="false"
controls-position="right"
size="small"
/>
<span v-show="scope.row.edit">{{ scope.row.base_bill_table }}</span>
</template>
</el-table-column>
<el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="170" fixed="right"> <el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="170" fixed="right">
<template scope="scope"> <template scope="scope">
@@ -308,6 +334,14 @@ export default {
this.crud.notify('数量不能为空', CRUD.NOTIFICATION_TYPE.INFO) this.crud.notify('数量不能为空', CRUD.NOTIFICATION_TYPE.INFO)
return false return false
} }
if (!row.base_bill_code) {
this.crud.notify('销售单号不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
if (!row.base_bill_table) {
this.crud.notify('销售单号行不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
} }
}, },
deleteRow(index, rows) { deleteRow(index, rows) {
@@ -329,6 +363,7 @@ export default {
this.nowrow.material_id = row.material_id this.nowrow.material_id = row.material_id
this.nowrow.material_code = row.material_code this.nowrow.material_code = row.material_code
this.nowrow.material_name = row.material_name this.nowrow.material_name = row.material_name
this.nowrow.material_spec = row.material_spec
this.nowrow.plan_qty = '0' this.nowrow.plan_qty = '0'
this.nowrow.qty_unit_name = row.unit_name this.nowrow.qty_unit_name = row.unit_name
this.nowrow.qty_unit_id = row.base_unit_id this.nowrow.qty_unit_id = row.base_unit_id
@@ -348,9 +383,10 @@ export default {
data.plan_qty = row.product_qty data.plan_qty = row.product_qty
data.qty_unit_name = row.qty_unit_name data.qty_unit_name = row.qty_unit_name
data.qty_unit_id = row.qty_unit_id data.qty_unit_id = row.qty_unit_id
data.source_billdtl_id = row.sale_id data.base_billdtl_id = row.sale_id
data.source_bill_type = row.sale_type data.base_bill_type = row.sale_type
data.source_bill_code = row.sale_code data.base_bill_code = row.sale_code
data.base_bill_table = row.seq_no
data.edit = true data.edit = true
this.form.tableData.splice(-1, 0, data) this.form.tableData.splice(-1, 0, data)
this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(data.plan_qty) this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(data.plan_qty)

View File

@@ -53,6 +53,7 @@
</template> </template>
</el-table-column> </el-table-column>
<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_spec" 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="plan_qty" :formatter="crud.formatNum3" label="数量" align="center" /> <el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="数量" align="center" />
<el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已分配数量" align="center" /> <el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已分配数量" align="center" />
@@ -66,14 +67,9 @@
<el-card class="box-card" shadow="never" :body-style="{padding:'20px 20px 0 20px'}"> <el-card class="box-card" shadow="never" :body-style="{padding:'20px 20px 0 20px'}">
<el-form ref="form2" :inline="true" :model="form" :rules="rules" size="mini"> <el-form ref="form2" :inline="true" :model="form" :rules="rules" size="mini">
<el-form-item label="载具号:" prop="vehicle_code"> <el-form-item label="载具号:" prop="vehicle_code">
<el-input <el-input v-model="form.vehicle_code" style="width: 200px" size="mini" disabled clearable placeholder="载具号">
v-model="form.vehicle_code" <el-button slot="append" @click="vehicleCheck" >生成</el-button>
style="width: 200px" </el-input>
size="mini"
clearable
placeholder="载具号"
@blur="vehicleCheck(form.vehicle_code)"
/>
</el-form-item> </el-form-item>
<el-form-item label="箱号:" prop="pageBox_code"> <el-form-item label="箱号:" prop="pageBox_code">
@@ -91,6 +87,7 @@
:controls="false" :controls="false"
precision="3" precision="3"
:min="0" :min="0"
@change="changeQty"
placeholder="数量" placeholder="数量"
/> />
</el-form-item> </el-form-item>
@@ -113,6 +110,23 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="载具超限类型:" prop="vehicle_overstruct_type">
<el-select
v-model="form.vehicle_overstruct_type"
size="mini"
placeholder="请选择"
class="filter-item"
style="width: 200px;"
>
<el-option
v-for="item in dict.VEHICLE_OVER_TYPE"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<div class="crud-opts2"> <div class="crud-opts2">
@@ -123,6 +137,7 @@
<el-cascader <el-cascader
placeholder="请选择" placeholder="请选择"
:options="sects" :options="sects"
v-model="defaultList"
:props="{ checkStrictly: true }" :props="{ checkStrictly: true }"
clearable clearable
@change="sectQueryChange" @change="sectQueryChange"
@@ -212,6 +227,7 @@
> >
<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="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_spec" 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="storagevehicle_code" label="托盘号" align="center" /> <el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘号" align="center" />
<el-table-column show-overflow-tooltip prop="bucketunique" label="箱号" align="center" /> <el-table-column show-overflow-tooltip prop="bucketunique" label="箱号" align="center" />
@@ -252,7 +268,7 @@ export default {
name: 'DivDialog', name: 'DivDialog',
components: { StructDiv, AddBox }, components: { StructDiv, AddBox },
mixins: [crud()], mixins: [crud()],
dicts: ['IO_BILL_STATUS', 'MD_OVERSTRUCT_TYPE'], dicts: ['IO_BILL_STATUS', 'VEHICLE_OVER_TYPE'],
props: { props: {
dialogShow: { dialogShow: {
type: Boolean, type: Boolean,
@@ -272,8 +288,8 @@ export default {
data() { data() {
return { return {
dialogVisible: false, dialogVisible: false,
stor_id: '', stor_id: '1528627995269533696',
sect_id: '', sect_id: '1528631043496742912',
sectProp: null, sectProp: null,
structShow: false, structShow: false,
bucketObj: null, bucketObj: null,
@@ -282,6 +298,7 @@ export default {
addBoxShow: false, addBoxShow: false,
bucketuniqueObj: null, bucketuniqueObj: null,
sects: [], sects: [],
defaultList: ['1528627995269533696', '1528631043496742912'],
dis_row: null, dis_row: null,
form: { form: {
dtl_row: null, dtl_row: null,
@@ -292,6 +309,7 @@ export default {
vehicle_code: '', vehicle_code: '',
bucketunique: '', bucketunique: '',
checked: true, checked: true,
vehicle_overstruct_type: '00',
tableMater: [] tableMater: []
}, },
storlist: [], storlist: [],
@@ -309,7 +327,6 @@ export default {
}, },
methods: { methods: {
disabledIos(row) { disabledIos(row) {
debugger
if (row.iostorinvdis_id === undefined) { if (row.iostorinvdis_id === undefined) {
return false return false
} else { } else {
@@ -340,22 +357,34 @@ export default {
}, },
clcikRow(row, column, event) { clcikRow(row, column, event) {
this.form.dtl_row = row this.form.dtl_row = row
this.form.storage_qty = this.form.dtl_row.plan_qty
crudProductIn.getIosInvDis({ 'iostorinv_id': row.iostorinv_id, 'iostorinvdtl_id': row.iostorinvdtl_id }).then(res => { crudProductIn.getIosInvDis({ 'iostorinv_id': row.iostorinv_id, 'iostorinvdtl_id': row.iostorinvdtl_id }).then(res => {
this.form.tableMater = res debugger
if (res.length !== 0) {
this.form.tableMater = res
}
}) })
}, },
clcikRowDis(row, column, event) { clcikRowDis(row, column, event) {
this.dis_row = row this.dis_row = row
}, },
vehicleCheck(vehicle_code) { vehicleCheck() {
this.form.bucketunique = '' // 生成托盘
// 校验载具号是否存在&&是否已被组盘 crudProductIn.vehicleCheck().then(res => {
crudProductIn.vehicleCheck({ 'storagevehicle_code': vehicle_code }).then(res => { this.form.tableMater = []
this.crud.notify('查询成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) this.form.vehicle_code = res.vehicle_code
this.crud.notify('生成成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => { }).catch(() => {
this.form.vehicle_code = ''
}) })
}, },
changeQty(val) {
debugger
if (parseFloat(this.form.dtl_row.plan_qty) < parseFloat(val)) {
this.crud.notify('放入数量不能大于明细数量!', CRUD.NOTIFICATION_TYPE.INFO)
this.$set(this.form, 'storage_qty', parseFloat(this.form.dtl_row.plan_qty))
}
},
queryBox() { queryBox() {
// 校验载具是否为空 // 校验载具是否为空
if (!this.form.vehicle_code) { if (!this.form.vehicle_code) {
@@ -393,6 +422,7 @@ export default {
}) })
if (fla) { if (fla) {
this.bucketuniqueObj.iostorinvdtl_id = this.form.dtl_row.iostorinvdtl_id
this.form.tableMater.splice(-1, 0, this.bucketuniqueObj) this.form.tableMater.splice(-1, 0, this.bucketuniqueObj)
this.form.bucketunique = '' this.form.bucketunique = ''
} }
@@ -404,12 +434,24 @@ export default {
} }
const item = { const item = {
'storagevehicle_code': this.form.vehicle_code, 'storagevehicle_code': this.form.vehicle_code,
'iostorinvdtl_id': this.form.dtl_row.iostorinvdtl_id,
'material_id': this.form.dtl_row.material_id, 'material_id': this.form.dtl_row.material_id,
'material_code': this.form.dtl_row.material_code, 'material_code': this.form.dtl_row.material_code,
'material_spec': this.form.dtl_row.material_spec,
'material_name': this.form.dtl_row.material_name, 'material_name': this.form.dtl_row.material_name,
'qty': this.form.storage_qty 'qty': this.form.storage_qty
} }
this.form.tableMater.splice(-1, 0, item)
let fla2 = true
this.form.tableMater.forEach(res => {
if (res.iostorinvdtl_id === item.iostorinvdtl_id && res.storagevehicle_code === item.storagevehicle_code) {
fla2 = false
}
})
if (fla2) {
this.form.tableMater.splice(-1, 0, item)
}
} }
}, },
deleteRow(index, rows) { deleteRow(index, rows) {
@@ -486,11 +528,11 @@ export default {
}) })
}, },
cancelConfirmvehicle() { cancelConfirmvehicle() {
if (!this.form.dtl_row) { if (!this.dis_row) {
this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) this.crud.notify('请选择一条分配明细', CRUD.NOTIFICATION_TYPE.INFO)
return return
} }
crudProductIn.cancelConfirmvehicle(this.form.dtl_row).then(res => { crudProductIn.cancelConfirmvehicle(this.dis_row).then(res => {
crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id }).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id }).then(res => {
this.form.vehicle_code = '' this.form.vehicle_code = ''
this.form.bucketunique = '' this.form.bucketunique = ''
@@ -579,6 +621,7 @@ export default {
return return
} }
this.dis_row.vehicle_overstruct_type = this.form.vehicle_overstruct_type
crudProductIn.unDivStruct(this.dis_row).then(res => { crudProductIn.unDivStruct(this.dis_row).then(res => {
crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => {
this.openParam = res this.openParam = res

View File

@@ -40,11 +40,10 @@ export function getIosInvDis(data) {
}) })
} }
export function vehicleCheck(data) { export function vehicleCheck() {
return request({ return request({
url: '/api/productIn/vehicleCheck', url: '/api/productIn/vehicleCheck',
method: 'post', method: 'post'
data
}) })
} }