add:新增半成品虚拟入库

This commit is contained in:
2023-10-12 17:37:55 +08:00
parent c67cd18b63
commit f07be22524
15 changed files with 562 additions and 568 deletions

View File

@@ -22,7 +22,7 @@ public enum IOSEnum {
//仓库编码
STOR_CODE(MapOf.of("原材料仓", "1528627964823080960", "半成品仓库", "15286279952695336962","成品库", "1528627995269533696","海柔半成品","15286279952695336963")),
//库区编码
SECT_CODE(MapOf.of("成品库区", "1528631043496742912", "半成品库区", "1528631044482404352")),
SECT_CODE(MapOf.of("成品库区", "1528631043496742912", "半成品库区", "1528631044482404352","半成品虚拟库区","1707219721935523840")),
//托盘超限类型
VEHICLE_OVER_TYPE(MapOf.of("标准", "00", "横向超", "01","纵向超","02")),
//单据类型

View File

@@ -67,6 +67,13 @@ public class StIvtIostorinvBcpController {
return new ResponseEntity<>(stIvtIostorinvBcpService.queryDtl(query,page), HttpStatus.OK);
}
@GetMapping("/getVirtual")
@Log("查询入库单据")
//("查询入库单据")
public ResponseEntity<Object> getVirtual(BcpIostorInvQuery query, PageQuery page) {
return new ResponseEntity<>(stIvtIostorinvBcpService.getVirtual(query,page), HttpStatus.OK);
}
@PostMapping("/create")
@Log("新增入库单")
//("新增入库单")
@@ -125,6 +132,12 @@ public class StIvtIostorinvBcpController {
return new ResponseEntity<>(stIvtIostorinvBcpService.getIoDtl(whereJson.toJavaObject(BcpIostorInvQuery.class)), HttpStatus.OK);
}
@PostMapping("/getIODtlVirtual")
@Log("查询入库分配明细")
//("查询入库分配明细")
public ResponseEntity<Object> getIODtlVirtual(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(stIvtIostorinvBcpService.getIODtlVirtual(whereJson.toJavaObject(BcpIostorInvQuery.class)), HttpStatus.OK);
}
@PostMapping("/confirm")
@Log("完成单据")
@@ -134,6 +147,14 @@ public class StIvtIostorinvBcpController {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirmVirtual")
@Log("完成单据")
//("完成单据")
public ResponseEntity<Object> confirmVirtual(@RequestBody JSONObject whereJson) {
stIvtIostorinvBcpService.confirmVirtual(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirmTask")
@Log("下发任务")
//("下发任务")

View File

@@ -63,4 +63,11 @@ public interface IStIvtIostorinvBcpService extends IService<StIvtIostorinvBcp> {
List<Map> getPdaAll(JSONObject form);
void download(BcpIostorInvQuery query, PageQuery page, HttpServletResponse response) throws IOException;
Object getVirtual(BcpIostorInvQuery query, PageQuery page);
List<Map> getIODtlVirtual(BcpIostorInvQuery query);
String confirmVirtual(JSONObject form);
}

View File

@@ -23,4 +23,7 @@ public interface StIvtIostorinvBcpMapper extends BaseMapper<StIvtIostorinvBcp> {
List<Map> getIostorinv(@Param("query") BcpIostorInvQuery query);
List<Map> getPdaAll(JSONObject form);
List<Map> getIODtlVirtual(@Param("query") BcpIostorInvQuery query);
}

View File

@@ -16,6 +16,51 @@
LEFT JOIN sch_base_task task ON task.task_id = dtl.task_id
<where>
dtl.is_delete = false
and dtl.point_code != '0'
<if test="query.stor_id != null and query.stor_id != ''">
and dtl.stor_id = #{query.stor_id}
</if>
<if test="query.iostorinv_id != null and query.iostorinv_id != ''">
and dtl.iostorinv_id = #{query.iostorinv_id}
</if>
<if test="query.bill_code != null and query.bill_code != ''">
and dtl.bill_code like #{query.bill_code}
</if>
<if test="query.bill_type != null and query.bill_type != ''">
and dtl.bill_type like #{query.bill_type}
</if>
<if test="query.bill_status != null and query.bill_status != ''">
and dtl.bill_status = #{query.bill_status}
</if>
<if test="query.io_type != null and query.io_type != ''">
and dtl.io_type = #{query.io_type}
</if>
<if test="query.start_time != null and query.start_time != ''">
and dtl.create_time >= #{query.start_time}
</if>
<if test="query.end_time != null and query.end_time != ''">
and #{query.end_time} >= dtl.create_time
</if>
</where>
order by dtl.create_time desc
</select>
<select id="getIODtlVirtual" resultType="java.util.Map">
SELECT
dtl.*,
mater.material_code,
mater.material_name,
mater.material_spec,
task.task_code,
task.task_status,
ROUND(dtl.plan_qty / dtl.unit_weight,3 ) AS qty
FROM
st_ivt_iostorinv_bcp dtl
LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id
LEFT JOIN sch_base_task task ON task.task_id = dtl.task_id
<where>
dtl.is_delete = false
and dtl.point_code = '0'
<if test="query.stor_id != null and query.stor_id != ''">
and dtl.stor_id = #{query.stor_id}
</if>

View File

@@ -155,10 +155,14 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
this.save(mst);
//锁定起点
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getInv_code,mst.getBill_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁")));
StIvtStructattr attrDao = structattrService.getById(mst.getStruct_id());
if (!attrDao.getSect_id().equals(IOSEnum.SECT_CODE.code("半成品虚拟库区"))) {
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getInv_code,mst.getBill_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁")));
}
// 判断是否自动下发
if (ObjectUtil.isNotEmpty(form.getString("auto_send"))) {
@@ -202,19 +206,62 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
StIvtStructivtBcp ivtDao = structivtBcpService.getById(mst.getStruct_id());
//删除库存
structivtBcpService.remove(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", mst.getStruct_id()));
// 判断库区是否是虚拟区
if (mst.getSect_id().equals(IOSEnum.SECT_CODE.code("半成品虚拟库区"))) {
StIvtStructivtBcp ivtDao = structivtBcpService.getOne(
new QueryWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getStruct_id, mst.getStruct_id())
.eq(StIvtStructivtBcp::getMaterial_id, mst.getMaterial_id())
);
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", 0);
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",mst.getBill_type());
iStIvtStructivtflowService.insetIvtChange(param);
BigDecimal subQty = NumberUtil.sub(ivtDao.getCanuse_qty(), mst.getPlan_qty());
if (subQty.doubleValue() > 0) {
// 更新库存
structivtBcpService.update(
new UpdateWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getMaterial_id, mst.getMaterial_id())
.eq(StIvtStructivtBcp::getStruct_id, mst.getStruct_id())
.set(StIvtStructivtBcp::getCanuse_qty, subQty)
);
} else {
// 删除库存
structivtBcpService.remove(
new QueryWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getStruct_id, mst.getStruct_id())
.eq(StIvtStructivtBcp::getMaterial_id, mst.getMaterial_id())
);
}
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY);
param.put("change_qty", mst.getPlan_qty());
param.put("result_qty", subQty.doubleValue() > 0 ? subQty : 0);
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",mst.getBill_type());
iStIvtStructivtflowService.insetIvtChange(param);
} else {
StIvtStructivtBcp ivtDao = structivtBcpService.getOne(
new QueryWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getStruct_id, mst.getStruct_id())
.eq(StIvtStructivtBcp::getMaterial_id, mst.getMaterial_id())
);
//删除库存
structivtBcpService.remove(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", mst.getStruct_id()));
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", 0);
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",mst.getBill_type());
iStIvtStructivtflowService.insetIvtChange(param);
/*structivtflowService.recordStructivtFlow(
StIvtStructivtflowDto.builder()
@@ -226,29 +273,29 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
.build()
);*/
//维护载具
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code,"")
.set(StIvtStructattr::getStoragevehicle_code, ""));
//维护载具
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code,"")
.set(StIvtStructattr::getStoragevehicle_code, ""));
// 更新任务为完成
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_id, mst.getTask_id())
);
// 更新载具扩展属性 - 释放载具对应物料关系 清空数量
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setStorage_qty(BigDecimal.valueOf(0)),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code,mst.getStoragevehicle_code())
);
// 更新任务为完成
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_id, mst.getTask_id())
);
// 更新载具扩展属性 - 释放载具对应物料关系 清空数量
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setStorage_qty(BigDecimal.valueOf(0)),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code,mst.getStoragevehicle_code())
);
}
return null;
}
@@ -461,6 +508,10 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
StIvtIostorinvBcp mst = this.getById(form.getString("iostorinv_id"));
checkParam(mst);
if (mst.getSect_id().equals(IOSEnum.SECT_CODE.code("半成品虚拟库区"))) {
throw new BadRequestException("此货位是虚拟货位,请强制完成单据!");
}
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT)
.acs_task_type("7")

View File

@@ -144,6 +144,19 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
}
仓位数据:
{
StIvtStructattr attrDao = structattrService.getById(JSONObject.parseObject(JSON.toJSONString(item)).getString("struct_id"));
if (ObjectUtil.isNotEmpty(attrDao)) {
mst.setStruct_id(attrDao.getStruct_id());
mst.setStruct_code(attrDao.getStruct_code());
mst.setStruct_name(attrDao.getStruct_name());
mst.setSect_id(attrDao.getSect_id());
mst.setSect_name(attrDao.getSect_name());
mst.setSect_code(attrDao.getSect_code());
}
}
packageRow(mst, JSONObject.parseObject(JSON.toJSONString(item)));
mst.setCreate_id(SecurityUtils.getCurrentUserId());
mst.setCreate_name(SecurityUtils.getCurrentNickName());
@@ -174,27 +187,30 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
mst.setBase_bill_code(row.getString("base_bill_code"));
mst.setQty_unit_name(row.getString("base_unit_name"));
mst.setUnit_weight(row.getBigDecimal("unit_weight"));
// 载具信息
{
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, row.getString("storagevehicle_code"))
);
if (!mst.getPoint_code().equals("0")) {
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, row.getString("storagevehicle_code"))
);
if (ObjectUtil.isEmpty(vehicleDao)) throw new BadRequestException("载具不存在!");
if (ObjectUtil.isEmpty(vehicleDao)) throw new BadRequestException("载具不存在!");
mst.setStoragevehicle_code(vehicleDao.getStoragevehicle_code());
mst.setStoragevehicle_id(vehicleDao.getStoragevehicle_id());
mst.setStoragevehicle_code(vehicleDao.getStoragevehicle_code());
mst.setStoragevehicle_id(vehicleDao.getStoragevehicle_id());
// 更新载具对应物料关系、数量
MdPbStoragevehicleext vehicleExtDao = iMdPbStoragevehicleextService.getOne(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, row.getString("storagevehicle_code"))
);
if (ObjectUtil.isNotEmpty(vehicleExtDao)) {
vehicleExtDao.setWeight(mst.getPlan_qty());
vehicleExtDao.setMaterial_id(mst.getMaterial_id());
iMdPbStoragevehicleextService.updateById(vehicleExtDao);
// 更新载具对应物料关系、数量
MdPbStoragevehicleext vehicleExtDao = iMdPbStoragevehicleextService.getOne(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, row.getString("storagevehicle_code"))
);
if (ObjectUtil.isNotEmpty(vehicleExtDao)) {
vehicleExtDao.setWeight(mst.getPlan_qty());
vehicleExtDao.setMaterial_id(mst.getMaterial_id());
iMdPbStoragevehicleextService.updateById(vehicleExtDao);
}
}
}
}
@@ -464,6 +480,93 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
FileUtil.downloadExcel(list, response);
}
@Override
public Object getVirtual(BcpIostorInvQuery query, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
TableDataInfo build = TableDataInfo.build(this.getIODtlVirtual(query));
build.setTotalElements(page.getTotal());
return build;
}
@Override
public List<Map> getIODtlVirtual(BcpIostorInvQuery query) {
return this.baseMapper.getIODtlVirtual(query);
}
@Override
@Transactional
public String confirmVirtual(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvBcp mst = this.getById(form.getString("iostorinv_id"));
if (StringUtils.isEmpty(mst.getStruct_code())) {
throw new BadRequestException("当前入库单还未分配仓位!");
}
mst.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 查看此仓位此物料的库存是否存在
StIvtStructivtBcp ivtDaoNow = structivtBcpService.getOne(
new QueryWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getMaterial_id, mst.getMaterial_id())
.eq(StIvtStructivtBcp::getStruct_id, mst.getStruct_id())
);
if (ObjectUtil.isEmpty(ivtDaoNow)) {
//新增库存
StIvtStructivtBcp ivtDao = StIvtStructivtBcp.builder()
.struct_id(mst.getStruct_id())
.struct_code(mst.getStruct_code())
.struct_name(mst.getStruct_name())
.material_id(mst.getMaterial_id())
.quality_scode(mst.getQuality_scode())
.pcsn(mst.getPcsn())
.ivt_level(mst.getIvt_level())
.is_active(mst.getIs_active())
.qty_unit_id("2")
.instorage_time(DateUtil.now())
.stor_id(mst.getStor_id())
.canuse_qty(mst.getPlan_qty())
.workshop_id(mst.getWorkshop_id())
.unit_weight(mst.getUnit_weight())
.bill_type(mst.getBill_type())
.build();
structivtBcpService.save(ivtDao);
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", ivtDao.getCanuse_qty());
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",IOSEnum.IO_TYPE.code("入库"));
iStIvtStructivtflowService.insetIvtChange(param);
} else {
// 增加库存
structivtBcpService.update(
new UpdateWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getMaterial_id, mst.getMaterial_id())
.eq(StIvtStructivtBcp::getStruct_id, mst.getStruct_id())
.set(StIvtStructivtBcp::getCanuse_qty, NumberUtil.add(ivtDaoNow.getCanuse_qty(),mst.getPlan_qty()))
);
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDaoNow));
param.put("change_type", ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY);
param.put("change_qty", mst.getPlan_qty());
param.put("result_qty", ivtDaoNow.getCanuse_qty());
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",IOSEnum.IO_TYPE.code("入库"));
iStIvtStructivtflowService.insetIvtChange(param);
}
return null;
}
private void delTask(String task_id) {
StIvtIostorinvBcp mstDao = this.getOne(

View File

@@ -211,7 +211,13 @@ public class StIvtMoreorlessmstBcpServiceImpl extends ServiceImpl<StIvtMoreorles
.eq(StIvtStructattr::getStruct_id, ivt.getStruct_id())
);
} else {
iStIvtStructivtBcpService.updateById(ivt);
// iStIvtStructivtBcpService.updateById(ivt);
iStIvtStructivtBcpService.update(
new UpdateWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getStruct_id, ivt.getStruct_id())
.eq(StIvtStructivtBcp::getMaterial_id, ivt.getMaterial_id())
.set(StIvtStructivtBcp::getCanuse_qty, NumberUtil.sub(canuse_qty, mol_qty))
);
}
});
} else {
@@ -274,7 +280,13 @@ public class StIvtMoreorlessmstBcpServiceImpl extends ServiceImpl<StIvtMoreorles
iMdPbStoragevehicleextService.updateById(vehicleDao);
}
iStIvtStructivtBcpService.updateById(ivt);
// iStIvtStructivtBcpService.updateById(ivt);
iStIvtStructivtBcpService.update(
new UpdateWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getStruct_id, ivt.getStruct_id())
.eq(StIvtStructivtBcp::getMaterial_id, ivt.getMaterial_id())
.set(StIvtStructivtBcp::getCanuse_qty, NumberUtil.add(canuse_qty, mol_qty))
);
}
//更新明细状态

View File

@@ -382,7 +382,13 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
}
in_ivt.setCanuse_qty(NumberUtil.add(in_ivt.getCanuse_qty(), dtl.getFact_qty()));
structivtBcpService.remove(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", turnout_struct_id));
structivtBcpService.updateById(in_ivt);
// structivtBcpService.updateById(in_ivt);
structivtBcpService.update(
new UpdateWrapper<StIvtStructivtBcp>().lambda()
.eq(StIvtStructivtBcp::getStruct_id, in_ivt.getStruct_id())
.set(StIvtStructivtBcp::getCanuse_qty, NumberUtil.add(in_ivt.getCanuse_qty(), dtl.getFact_qty()))
);
dtl.setWork_status(SHUTEnum.WORK_STATUS.code("完成"));
shutframedtlBcpService.updateById(dtl);