rev:半成品盘点

This commit is contained in:
2023-09-14 16:25:28 +08:00
parent cf0c5a077e
commit 928770aa9b
10 changed files with 229 additions and 75 deletions

View File

@@ -40,6 +40,7 @@ import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.nl.wms.storage_manage.semimanagehr.service.check.IStIvtCheckmstHrBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
@@ -80,6 +81,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
private IStIvtIostorinvHrBcpInService iStIvtIostorinvHrBcpInService;
@Autowired
private IStIvtStructattrService structattrService; // 仓位服务
@Autowired
private IStIvtCheckmstHrBcpService iStIvtCheckmstHrBcpService; // 盘点主表服务
@Override
public Map<String, Object> apply(JSONObject param) {
@@ -366,61 +369,67 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
public Map<String, Object> anomaly(JSONObject json) {
/*
* 满入-4重新分配个货位有货货位锁定
* 盘点异常 - 6 更新盘点明细为异常
*/
String task_id = json.getString("task_id");
String status = json.getString("status"); // 4-满入
String status = json.getString("status");
HashMap<String, Object> result = new HashMap<>();
try {
SchBaseTask taskDao = itaskService.getById(task_id);
if (ObjectUtil.isEmpty(taskDao)) throw new BadRequestException("任务不存在!");
if (status.equals("4")) {
SchBaseTask taskDao = itaskService.getById(task_id);
if (ObjectUtil.isEmpty(taskDao)) throw new BadRequestException("任务不存在!");
// 调用入库分配规则
StIvtSectattr sect = sectattrService.getOne(
new QueryWrapper<StIvtSectattr>().lambda()
.eq(StIvtSectattr::getSect_name, "海柔半成品库区")
);
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
if (ObjectUtil.isEmpty(stIvtStructattr)) throw new BadRequestException("仓位不足!");
// 调用入库分配规则
StIvtSectattr sect = sectattrService.getOne(
new QueryWrapper<StIvtSectattr>().lambda()
.eq(StIvtSectattr::getSect_name, "海柔半成品库区")
);
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
if (ObjectUtil.isEmpty(stIvtStructattr)) throw new BadRequestException("仓位不足!");
// 更新单据入库仓位
StIvtIostorinvHrBcp invDao = iStIvtIostorinvHrBcpInService.getOne(
new QueryWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
, false
);
if (ObjectUtil.isEmpty(invDao)) throw new BadRequestException("未找到对应入库单据!");
// 更新单据入库仓位
StIvtIostorinvHrBcp invDao = iStIvtIostorinvHrBcpInService.getOne(
new QueryWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
, false
);
if (ObjectUtil.isEmpty(invDao)) throw new BadRequestException("未找到对应入库单据!");
// 锁定原仓位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_id, invDao.getStruct_id())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
);
// 锁定原仓位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_id, invDao.getStruct_id())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
);
invDao.setStruct_id(stIvtStructattr.getStruct_id());
invDao.setStruct_code(stIvtStructattr.getStruct_code());
invDao.setStruct_name(stIvtStructattr.getStruct_name());
iStIvtIostorinvHrBcpInService.updateById(invDao);
invDao.setStruct_id(stIvtStructattr.getStruct_id());
invDao.setStruct_code(stIvtStructattr.getStruct_code());
invDao.setStruct_name(stIvtStructattr.getStruct_name());
iStIvtIostorinvHrBcpInService.updateById(invDao);
// 更新任务入库仓位
taskDao.setPoint_code3(stIvtStructattr.getStruct_code());
itaskService.updateById(taskDao);
// 更新任务入库仓位
taskDao.setPoint_code3(stIvtStructattr.getStruct_code());
itaskService.updateById(taskDao);
// 锁定新货位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_id, stIvtStructattr.getStruct_id())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("入库锁"))
);
// 锁定新货位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_id, stIvtStructattr.getStruct_id())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("入库锁"))
);
result.put("point_code2", stIvtStructattr.getStruct_code());
result.put("point_code2", stIvtStructattr.getStruct_code());
} else if (status.equals("6")) {
iStIvtCheckmstHrBcpService.checkExt(json);
}
} catch (Exception e) {
result.put("status", HttpStatus.BAD_REQUEST.value());
@@ -429,7 +438,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
}
result.put("status", HttpStatus.OK.value());
result.put("message", "操作成功");
result.put("message", "成功");
return result;
}
}

View File

@@ -20,7 +20,7 @@ public enum CHECKEnum {
//单据状态
BILL_STATUS(MapOf.of("生成", "10", "盘点中", "30", "完成", "99")),
//海柔盘点结果
CHECK_RESULT(MapOf.of("正常", "0", "异常", "1")),
CHECK_RESULT(MapOf.of("正常", "0", "异常", "1","待确认","2")),
//单据状态
DTL_STATUS(MapOf.of("生成", "01", "盘点中", "04", "已盘点", "05", "异常处理中", "06", "异常处理完成"
, "07", "确认完成", "99")),

View File

@@ -80,5 +80,13 @@ public class StIvtCheckmstHrBcpController {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/extManage")
@Log("异常处理")
//("异常处理")
public ResponseEntity<Object> extManage(@RequestBody JSONObject whereJson) {
checkmstBcpService.extManage(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

View File

@@ -71,4 +71,16 @@ public interface IStIvtCheckmstHrBcpService extends IService<StIvtCheckmstHrBcp>
* @param whereJson /
*/
void checkOut(JSONObject whereJson);
/**
* 盘点异常处理
* @param whereJson /
*/
void checkExt(JSONObject whereJson);
/**
* 盘点异常处理
* @param whereJson /
*/
void extManage(JSONObject whereJson);
}

View File

@@ -13,6 +13,7 @@ import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrServ
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.storage_manage.CHECKEnum;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.semimanagehr.service.check.IStIvtCheckdtlHrBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.check.dao.StIvtCheckdtlHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.check.dao.StIvtCheckmstHrBcp;
@@ -73,10 +74,11 @@ public class StIvtCheckdtlHrBcpServiceImpl extends ServiceImpl<StIvtCheckdtlHrBc
row.setStruct_name(structDao.getStruct_name());
row.setStatus(CHECKEnum.DTL_STATUS.code("生成"));
row.setCheck_result(CHECKEnum.CHECK_RESULT.code("待确认"));
this.save(row);
//锁定货位
structattrService.update(new UpdateWrapper<StIvtStructattr>().set("lock_type", "1").set("inv_code",mst.getCheck_code()).eq("struct_id", row.getStruct_id()));
structattrService.update(new UpdateWrapper<StIvtStructattr>().set("lock_type", IOSEnum.LOCK_TYPE.code("盘点锁")).set("inv_code",mst.getCheck_code()).eq("struct_id", row.getStruct_id()));
}
}
return total_qty;

View File

@@ -198,6 +198,11 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
String task_id = form.getString("task_id");
String status = form.getString("status");
StIvtCheckdtlHrBcp dtlDao = checkdtlBcpService.getOne(
new QueryWrapper<StIvtCheckdtlHrBcp>().lambda()
.eq(StIvtCheckdtlHrBcp::getTask_id, task_id)
);
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
@@ -208,14 +213,14 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
.eq(SchBaseTask::getTask_id,task_id )
);
// 更新明细
StIvtCheckdtlHrBcp dtlDao = checkdtlBcpService.getOne(
new QueryWrapper<StIvtCheckdtlHrBcp>().lambda()
.eq(StIvtCheckdtlHrBcp::getTask_id, task_id)
);
// 更新明细 - 判断此条任务是否异常
if (dtlDao.getCheck_result().equals(CHECKEnum.CHECK_RESULT.code("异常"))) {
dtlDao.setStatus(CHECKEnum.DTL_STATUS.code("异常处理中"));
} else {
dtlDao.setCheck_result(CHECKEnum.CHECK_RESULT.code("正常"));
dtlDao.setStatus(CHECKEnum.DTL_STATUS.code("确认完成"));
dtlDao.setStatus(CHECKEnum.DTL_STATUS.code("确认完成"));
dtlDao.setCheck_result(CHECKEnum.CHECK_RESULT.code("正常"));
}
checkdtlBcpService.updateById(dtlDao);
// 更新主表
@@ -230,11 +235,12 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
.set(SchBaseTask::getTask_status,TaskStatusEnum.EXECUTING.getCode())
.eq(SchBaseTask::getTask_id,task_id )
);
// 更新明细
StIvtCheckdtlHrBcp dtlDao = checkdtlBcpService.getOne(
new QueryWrapper<StIvtCheckdtlHrBcp>().lambda()
.eq(StIvtCheckdtlHrBcp::getTask_id, task_id)
} else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 取消任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getIs_delete,true)
.eq(SchBaseTask::getTask_id,task_id )
);
}
@@ -249,10 +255,23 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
.eq(StIvtCheckdtlHrBcp::getCheckdtl_id, whereJson.getString("checkdtl_id"))
);
if (ObjectUtil.isEmpty(dtlDao.getTask_id()))
throw new BadRequestException("请先下发任务!");
if (!dtlDao.getCheck_result().equals(CHECKEnum.CHECK_RESULT.code("异常"))) {
throw new BadRequestException("此货位不是异常货位,请正常出库!");
}
if (Integer.parseInt(dtlDao.getStatus()) > Integer.parseInt(CHECKEnum.DTL_STATUS.code("异常处理中"))) {
throw new BadRequestException("已成生出库单或已处理异常!");
}
// 更新明细状态为: 异常处理完成
dtlDao.setStatus(CHECKEnum.DTL_STATUS.code("异常处理完成"));
checkdtlBcpService.updateById(dtlDao);
updateMst(dtlDao.getCheck_id());
/*
* 组织出库数据
*/
@@ -310,6 +329,51 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
iStIvtIostorinvHrBcpOutService.create(param);
}
@Override
@Transactional
public void checkExt(JSONObject whereJson) {
String task_id = whereJson.getString("task_id");
// 标记明细为异常
StIvtCheckdtlHrBcp dtlDao = checkdtlBcpService.getOne(
new QueryWrapper<StIvtCheckdtlHrBcp>().lambda()
.eq(StIvtCheckdtlHrBcp::getTask_id, task_id)
);
dtlDao.setCheck_result(CHECKEnum.CHECK_RESULT.code("异常"));
checkdtlBcpService.updateById(dtlDao);
}
@Override
@Transactional
public void extManage(JSONObject whereJson) {
// 校验
StIvtCheckdtlHrBcp dtlDao = checkdtlBcpService.getOne(
new QueryWrapper<StIvtCheckdtlHrBcp>().lambda()
.eq(StIvtCheckdtlHrBcp::getCheckdtl_id, whereJson.getString("checkdtl_id"))
);
if (Integer.parseInt(dtlDao.getStatus()) > Integer.parseInt(CHECKEnum.DTL_STATUS.code("异常处理中"))) {
throw new BadRequestException("当前状态不允许强制完成!");
}
// 更新明细
dtlDao.setStatus(CHECKEnum.DTL_STATUS.code("确认完成"));
checkdtlBcpService.updateById(dtlDao);
// 更新主表
updateMst(dtlDao.getCheck_id());
// 更新任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_id, dtlDao.getTask_id())
.ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
);
}
@Override
@Transactional
public void delete(Long[] ids) {
@@ -332,7 +396,7 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs3(param);
Map<String, Object> result = bean.issueTaskToAcs4(param);
// 反馈失败报错
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {
@@ -389,9 +453,11 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
.eq(StIvtCheckdtlHrBcp::getCheck_id, check_id)
);
// 判断是否都为完成
// 判断是否都为完成 或为异常处理完成
boolean is_status = dtlDaoList.stream()
.allMatch(row -> row.getStatus().equals(CHECKEnum.BILL_STATUS.code("完成")));
.allMatch(row -> row.getStatus().equals(CHECKEnum.DTL_STATUS.code("确认完成"))
|| row.getStatus().equals(CHECKEnum.DTL_STATUS.code("异常处理完成"))
);
if (is_status) {
// 完成单据
@@ -402,6 +468,7 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code, "")
.eq(StIvtStructattr::getStruct_id, dtlDao.getStruct_id())
);
}
@@ -410,7 +477,9 @@ public class StIvtCheckmstHrBcpServiceImpl extends ServiceImpl<StIvtCheckmstHrBc
// 判断是否都为正常
boolean is_check = dtlDaoList.stream()
.filter(row -> ObjectUtil.isNotEmpty(row.getCheck_result()))
.allMatch(row -> row.getCheck_result().equals(CHECKEnum.CHECK_RESULT.code("正常")));
.allMatch(row -> row.getCheck_result().equals(CHECKEnum.CHECK_RESULT.code("正常"))
|| row.getCheck_result().equals(CHECKEnum.CHECK_RESULT.code("待确认"))
);
mstDao.setIs_nok(!is_check);

View File

@@ -158,14 +158,6 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl<StIvtIostorinv
mst.setCreate_time(DateUtil.now());
this.save(mst);
// 更新载具扩展属性
iMdPbStoragevehicleextService.update(
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
.set(MdPbStoragevehicleext::getMaterial_id, mst.getMaterial_id())
.set(MdPbStoragevehicleext::getWeight, mst.getPlan_qty())
.eq(MdPbStoragevehicleext::getStoragevehicle_code, mst.getStoragevehicle_code())
);
// 判断是否自动下发
if (ObjectUtil.isNotEmpty(form.getString("auto_send"))) {
confirmTask(JSONObject.parseObject(JSON.toJSONString(mst)));
@@ -194,15 +186,14 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl<StIvtIostorinv
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);
if (ObjectUtil.isNotEmpty(vehicleExtDao.getMaterial_id()))
throw new BadRequestException("此载具已经绑定物料!"+vehicleDao.getStoragevehicle_code());
}
}
}
@@ -297,19 +288,29 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl<StIvtIostorinv
param.put("bill_type_scode",mst.getBill_type());
iStIvtStructivtflowService.insetIvtChange(param);
//维护载具
//更新仓位
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::getTask_code, "")
.set(StIvtStructattr::getStoragevehicle_code, mst.getStoragevehicle_code()));
// 更新载具属性对应关系
iMdPbStoragevehicleextService.update(
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, mst.getStoragevehicle_code())
.set(MdPbStoragevehicleext::getMaterial_id, mst.getMaterial_id())
.set(MdPbStoragevehicleext::getStorage_qty, mst.getPlan_qty())
);
// 更新任务为完成
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_id, mst.getTask_id())
);
return null;
}

View File

@@ -106,6 +106,17 @@
>
盘点出库
</el-button>
<el-button
slot="left"
class="filter-item"
type="primary"
icon="el-icon-plus"
size="mini"
:disabled="add_flag"
@click="extManage"
>
强制确认
</el-button>
</span>
</div>
@@ -406,6 +417,39 @@ export default {
}
check.checkOut(this.nowrow).then(res => {
this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row, 'edit', false)
if (row.status > '04') {
row.edit = true
}
this.tableData.splice(i, 1, row)
}
})
})
},
extManage() {
if (this.nowrow === null) {
this.crud.notify('请先选中一条已存在的库存明细!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
check.extManage(this.nowrow).then(res => {
this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row, 'edit', false)
if (row.status > '04') {
row.edit = true
}
this.tableData.splice(i, 1, row)
}
})
})
},
saveCheck() {

View File

@@ -127,6 +127,14 @@ export function checkOut(data) {
})
}
export function extManage(data) {
return request({
url: '/api/bcp/checkHr/extManage',
method: 'post',
data
})
}
export default {
add,
edit,
@@ -141,5 +149,6 @@ export default {
process0,
issueTask,
getOutBillDis,
process1
process1,
extManage
}

View File

@@ -263,7 +263,7 @@ export default {
if (current !== null) {
this.currentRow = current
this.downdtl_flag = false
if (current.status === '10' || current.status === '30' || current.status === '99') {
if (current.status === '10' || current.status === '30') {
this.check_flag = false
} else {
this.check_flag = true