add:新增需求
This commit is contained in:
@@ -0,0 +1,86 @@
|
|||||||
|
package org.nl.wms.basedata_manage.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.nl.common.base.TableDataInfo;
|
||||||
|
import org.nl.common.domain.query.PageQuery;
|
||||||
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.logging.annotation.Log;
|
||||||
|
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||||
|
import org.nl.wms.basedata_manage.service.IStockManageService;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RequestMapping("/api/stockManage")
|
||||||
|
public class StockManageController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private final IStockManageService stockManageService;
|
||||||
|
@Resource
|
||||||
|
private final IStructattrService structattrService;
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@Log("查询库存管理")
|
||||||
|
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
|
||||||
|
return new ResponseEntity<>(TableDataInfo.build(stockManageService.queryAll(whereJson, page)), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/updateLock")
|
||||||
|
@Log("库存管理修改仓位锁定类型")
|
||||||
|
public ResponseEntity<Object> updateLock(@RequestBody List<JSONObject> updateAttrList) {
|
||||||
|
if (updateAttrList == null || updateAttrList.isEmpty()) {
|
||||||
|
throw new BadRequestException("请选择需要操作的库存数据");
|
||||||
|
}
|
||||||
|
String targetLockType = updateAttrList.get(0).getString("lock_type");
|
||||||
|
Set<String> structCodes = updateAttrList.stream()
|
||||||
|
.map(row -> row.getString("struct_code"))
|
||||||
|
.filter(code -> code != null && !code.isEmpty())
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
List<Structattr> attrs = structattrService.list(new QueryWrapper<Structattr>().lambda()
|
||||||
|
.in(Structattr::getStruct_code, structCodes));
|
||||||
|
if ("99".equals(targetLockType)) {
|
||||||
|
List<String> invalidCodes = attrs.stream()
|
||||||
|
.filter(row -> row.getLock_type() != null && !"0".equals(row.getLock_type()))
|
||||||
|
.map(Structattr::getStruct_code)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (!invalidCodes.isEmpty()) {
|
||||||
|
throw new BadRequestException("仓位已锁定,不能重复锁定:" + String.join("、", invalidCodes));
|
||||||
|
}
|
||||||
|
} else if ("0".equals(targetLockType)) {
|
||||||
|
List<String> invalidCodes = attrs.stream()
|
||||||
|
.filter(row -> !"99".equals(row.getLock_type()))
|
||||||
|
.map(Structattr::getStruct_code)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (!invalidCodes.isEmpty()) {
|
||||||
|
throw new BadRequestException("仅其它锁仓位允许解锁:" + String.join("、", invalidCodes));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Map<String, Structattr> attrMap = attrs.stream().collect(Collectors.toMap(Structattr::getStruct_code, row -> row));
|
||||||
|
for (JSONObject row : updateAttrList) {
|
||||||
|
Structattr attr = attrMap.get(row.getString("struct_code"));
|
||||||
|
if (attr == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
attr.setLock_type(row.getString("lock_type"));
|
||||||
|
attr.setRemark(row.getString("remark"));
|
||||||
|
structattrService.updateById(attr);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,4 +74,11 @@ public class StructattrController {
|
|||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/updateLock")
|
||||||
|
@Log("修改仓位锁定类型")
|
||||||
|
public ResponseEntity<Object> updateLock(@RequestBody List<JSONObject> updateAttrList) {
|
||||||
|
structattrService.updateLock(updateAttrList);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package org.nl.wms.basedata_manage.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import org.nl.common.domain.query.PageQuery;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface IStockManageService extends IService<MdPbStoragevehicleext> {
|
||||||
|
|
||||||
|
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package org.nl.wms.basedata_manage.service.dao.mapper;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface StockManageMapper extends BaseMapper<MdPbStoragevehicleext> {
|
||||||
|
|
||||||
|
IPage<JSONObject> queryAllByPage(Page<JSONObject> page, @Param("param") Map whereJson);
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.nl.wms.basedata_manage.service.dao.mapper.StockManageMapper">
|
||||||
|
|
||||||
|
<select id="queryAllByPage" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT DISTINCT
|
||||||
|
ext.group_id AS storagevehicleext_id,
|
||||||
|
ext.storagevehicle_code,
|
||||||
|
ext.pcsn,
|
||||||
|
ext.qty_unit_name,
|
||||||
|
ext.qty,
|
||||||
|
ext.frozen_qty,
|
||||||
|
attr.lock_type,
|
||||||
|
attr.remark,
|
||||||
|
ext.create_time,
|
||||||
|
ext.supp_code,
|
||||||
|
ext.supp_name,
|
||||||
|
attr.struct_code,
|
||||||
|
attr.struct_name,
|
||||||
|
attr.stor_name,
|
||||||
|
attr.sect_name,
|
||||||
|
mater.material_code,
|
||||||
|
mater.material_name
|
||||||
|
FROM
|
||||||
|
md_pb_groupplate ext
|
||||||
|
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
|
||||||
|
INNER JOIN md_me_materialbase mater ON mater.material_id = ext.material_id
|
||||||
|
<where>
|
||||||
|
1 = 1
|
||||||
|
AND ext.`status` = '02'
|
||||||
|
AND attr.occupancy_state = 3
|
||||||
|
<if test="param.stor_id != null and param.stor_id != ''">
|
||||||
|
AND attr.stor_id = #{param.stor_id}
|
||||||
|
</if>
|
||||||
|
<if test="param.sect_id != null and param.sect_id != ''">
|
||||||
|
AND attr.sect_id = #{param.sect_id}
|
||||||
|
</if>
|
||||||
|
<if test="param.sect_code != null and param.sect_code != ''">
|
||||||
|
AND attr.sect_code = #{param.sect_code}
|
||||||
|
</if>
|
||||||
|
<if test="param.struct_code != null and param.struct_code != ''">
|
||||||
|
AND (attr.struct_code LIKE #{param.struct_code} OR attr.struct_name LIKE #{param.struct_code})
|
||||||
|
</if>
|
||||||
|
<if test="param.material_code != null and param.material_code != ''">
|
||||||
|
AND (mater.material_code LIKE CONCAT('%', #{param.material_code}, '%') OR
|
||||||
|
mater.material_name LIKE CONCAT('%', #{param.material_code}, '%'))
|
||||||
|
</if>
|
||||||
|
<if test="param.pcsn != null and param.pcsn != ''">
|
||||||
|
AND ext.pcsn LIKE #{param.pcsn}
|
||||||
|
</if>
|
||||||
|
<if test="param.storagevehicle_code != null and param.storagevehicle_code != ''">
|
||||||
|
AND ext.storagevehicle_code LIKE CONCAT('%', #{param.storagevehicle_code}, '%')
|
||||||
|
</if>
|
||||||
|
<if test="param.is_lock != null and param.is_lock != ''">
|
||||||
|
<choose>
|
||||||
|
<when test="param.is_lock == '0'">
|
||||||
|
AND IFNULL(attr.lock_type, '0') = '0'
|
||||||
|
</when>
|
||||||
|
<when test="param.is_lock == '1'">
|
||||||
|
AND IFNULL(attr.lock_type, '0') != '0'
|
||||||
|
</when>
|
||||||
|
</choose>
|
||||||
|
</if>
|
||||||
|
AND 0 = (
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM sch_base_task t
|
||||||
|
WHERE t.task_status <![CDATA[ < ]]> '5'
|
||||||
|
AND t.is_delete = '0'
|
||||||
|
AND (t.vehicle_code = ext.storagevehicle_code OR t.vehicle_code2 = ext.storagevehicle_code)
|
||||||
|
)
|
||||||
|
</where>
|
||||||
|
ORDER BY ext.create_time DESC
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package org.nl.wms.basedata_manage.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.nl.common.domain.query.PageQuery;
|
||||||
|
import org.nl.wms.basedata_manage.service.IStockManageService;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.mapper.StockManageMapper;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class StockManageServiceImpl extends ServiceImpl<StockManageMapper, MdPbStoragevehicleext> implements IStockManageService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
|
||||||
|
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()), whereJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy;
|
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -11,6 +12,8 @@ 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.decision_manage.service.strategyConfig.decisioner.Decisioner;
|
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner;
|
||||||
import org.nl.wms.sch_manage.enums.StatusEnum;
|
import org.nl.wms.sch_manage.enums.StatusEnum;
|
||||||
|
import org.nl.wms.system_manage.service.param.ISysParamService;
|
||||||
|
import org.nl.wms.system_manage.service.param.dao.Param;
|
||||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
||||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -34,6 +37,9 @@ public class UnpackingRuleHandler extends Decisioner<Structattr, JSONObject> {
|
|||||||
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
||||||
@Resource
|
@Resource
|
||||||
private IOStorInvDisMapper disMapper;
|
private IOStorInvDisMapper disMapper;
|
||||||
|
@Resource
|
||||||
|
private ISysParamService paramService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||||
IOStorInvDis dis = disMapper.selectById(param.getString("dis_id"));
|
IOStorInvDis dis = disMapper.selectById(param.getString("dis_id"));
|
||||||
@@ -73,19 +79,52 @@ public class UnpackingRuleHandler extends Decisioner<Structattr, JSONObject> {
|
|||||||
}
|
}
|
||||||
return outPoints;
|
return outPoints;
|
||||||
} else {
|
} else {
|
||||||
// 获取仓库中对应托盘类型的可出的空桶点位
|
List<Structattr> outPoints;
|
||||||
List<Structattr> outPoints = iStructattrService.list(new LambdaQueryWrapper<Structattr>()
|
if (requiresEmptyBucketForUnpacking()) {
|
||||||
.eq(Structattr::getOccupancy_state, 2)
|
// 只有走 JbDownAgvTask 的场景才要求目标仓位已存在同类型空桶。
|
||||||
.eq(Structattr::getStoragevehicle_type, vinfo.getStoragevehicle_type())
|
outPoints = iStructattrService.list(new LambdaQueryWrapper<Structattr>()
|
||||||
.eq(Structattr::getLock_type, "0")
|
.eq(Structattr::getOccupancy_state, 2)
|
||||||
.eq(Structattr::getSect_code, param.getString("sect_code"))
|
.eq(Structattr::getStoragevehicle_type, vinfo.getStoragevehicle_type())
|
||||||
.eq(Structattr::getStor_id, param.getString("stor_code"))
|
.eq(Structattr::getLock_type, "0")
|
||||||
.isNotNull(Structattr::getStoragevehicle_code)
|
.eq(Structattr::getSect_code, param.getString("sect_code"))
|
||||||
.isNull(Structattr::getTask_code));
|
.eq(Structattr::getStor_id, param.getString("stor_code"))
|
||||||
if (outPoints.size() == 0) {
|
.isNotNull(Structattr::getStoragevehicle_code)
|
||||||
throw new BadRequestException("当前出库策略:解包入库,库存分配失败,失败原因:料桶缓存库无空桶!");
|
.isNull(Structattr::getTask_code));
|
||||||
|
if (outPoints.size() == 0) {
|
||||||
|
throw new BadRequestException("当前出库策略:解包入库,库存分配失败,失败原因:料桶缓存库无空桶!");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 走其它 AGV 分支时不需要空桶,直接找可用空位即可。
|
||||||
|
outPoints = iStructattrService.list(new LambdaQueryWrapper<Structattr>()
|
||||||
|
.eq(Structattr::getOccupancy_state, 1)
|
||||||
|
.eq(Structattr::getLock_type, "0")
|
||||||
|
.eq(Structattr::getSect_code, param.getString("sect_code"))
|
||||||
|
.eq(Structattr::getStor_id, param.getString("stor_code"))
|
||||||
|
.isNull(Structattr::getStoragevehicle_code)
|
||||||
|
.isNull(Structattr::getTask_code));
|
||||||
|
if (outPoints.size() == 0) {
|
||||||
|
throw new BadRequestException("当前出库策略:解包入库,库存分配失败,失败原因:料桶缓存库无空位!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return outPoints;
|
return outPoints;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean requiresEmptyBucketForUnpacking() {
|
||||||
|
String openCbj = getBinaryParamStrict("is_open_cbj");
|
||||||
|
String openUnsealing = getBinaryParamStrict("is_open_unsealing");
|
||||||
|
return "1".equals(openCbj) && "1".equals(openUnsealing);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getBinaryParamStrict(String code) {
|
||||||
|
Param sysParam = paramService.findByCode(code);
|
||||||
|
if (ObjectUtil.isEmpty(sysParam) || StrUtil.isBlank(sysParam.getValue())) {
|
||||||
|
throw new BadRequestException("系统参数配置错误");
|
||||||
|
}
|
||||||
|
String value = StrUtil.trim(sysParam.getValue());
|
||||||
|
if (!"0".equals(value) && !"1".equals(value)) {
|
||||||
|
throw new BadRequestException("系统参数配置错误");
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -268,6 +268,10 @@ public class MesToWmsServiceImpl implements MesToWmsService {
|
|||||||
table.put("material_name", materialbase.getMaterial_name());
|
table.put("material_name", materialbase.getMaterial_name());
|
||||||
table.put("material_spec", materialbase.getMaterial_spec());
|
table.put("material_spec", materialbase.getMaterial_spec());
|
||||||
String invId = outBillService.insertDtl(insertInvObj);
|
String invId = outBillService.insertDtl(insertInvObj);
|
||||||
|
JSONObject auditParam = new JSONObject();
|
||||||
|
auditParam.put("iostorinv_id", invId);
|
||||||
|
auditParam.put("audit_result", 1);
|
||||||
|
outBillService.audit(auditParam);
|
||||||
// 调用手工分配
|
// 调用手工分配
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
JSONObject row = new JSONObject();
|
JSONObject row = new JSONObject();
|
||||||
@@ -394,6 +398,10 @@ public class MesToWmsServiceImpl implements MesToWmsService {
|
|||||||
table.put("material_name", materialbase.getMaterial_name());
|
table.put("material_name", materialbase.getMaterial_name());
|
||||||
table.put("material_spec", materialbase.getMaterial_spec());
|
table.put("material_spec", materialbase.getMaterial_spec());
|
||||||
String invId = outBillService.insertDtl(insertInvObj);
|
String invId = outBillService.insertDtl(insertInvObj);
|
||||||
|
JSONObject auditParam = new JSONObject();
|
||||||
|
auditParam.put("iostorinv_id", invId);
|
||||||
|
auditParam.put("audit_result", 1);
|
||||||
|
outBillService.audit(auditParam);
|
||||||
// 调用手工分配
|
// 调用手工分配
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
JSONObject row = new JSONObject();
|
JSONObject row = new JSONObject();
|
||||||
|
|||||||
@@ -230,6 +230,10 @@ public class PdaJBServiceImpl implements PdaJBService {
|
|||||||
table.put("material_name", materialbase.getMaterial_name());
|
table.put("material_name", materialbase.getMaterial_name());
|
||||||
table.put("material_spec", materialbase.getMaterial_spec());
|
table.put("material_spec", materialbase.getMaterial_spec());
|
||||||
String invId = outBillService.insertDtl(insertInvObj);
|
String invId = outBillService.insertDtl(insertInvObj);
|
||||||
|
JSONObject auditParam = new JSONObject();
|
||||||
|
auditParam.put("iostorinv_id", invId);
|
||||||
|
auditParam.put("audit_result", 1);
|
||||||
|
outBillService.audit(auditParam);
|
||||||
// 调用手工分配
|
// 调用手工分配
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
JSONObject row = new JSONObject();
|
JSONObject row = new JSONObject();
|
||||||
@@ -446,7 +450,7 @@ public class PdaJBServiceImpl implements PdaJBService {
|
|||||||
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||||
.eq(SchBaseTask::getIs_delete, false)
|
.eq(SchBaseTask::getIs_delete, false)
|
||||||
.in(SchBaseTask::getConfig_code, Arrays.asList("JbDownAgvTask", "JbDownCloseUnsealingAgvTask", "JbDownManualTask"))
|
.in(SchBaseTask::getConfig_code, Arrays.asList("JbDownAgvTask", "JbDownCloseUnsealingAgvTask", "JbDownCloseCbjAgvTask", "JbDownManualTask"))
|
||||||
.and(ll -> ll.like(SchBaseTask::getPoint_code1, taskPointCode).or()
|
.and(ll -> ll.like(SchBaseTask::getPoint_code1, taskPointCode).or()
|
||||||
.like(SchBaseTask::getPoint_code2, taskPointCode).or()
|
.like(SchBaseTask::getPoint_code2, taskPointCode).or()
|
||||||
.like(SchBaseTask::getPoint_code3, taskPointCode).or()
|
.like(SchBaseTask::getPoint_code3, taskPointCode).or()
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ public class PdmBdWorkorder implements Serializable {
|
|||||||
|
|
||||||
private String ext_data;
|
private String ext_data;
|
||||||
|
|
||||||
|
private String remark;
|
||||||
|
|
||||||
private Boolean is_delete;
|
private Boolean is_delete;
|
||||||
|
|
||||||
private String create_id;
|
private String create_id;
|
||||||
@@ -121,4 +123,7 @@ public class PdmBdWorkorder implements Serializable {
|
|||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String material_spec;
|
private String material_spec;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Integer audit_result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
LEFT JOIN md_me_materialbase mm ON mm.material_id = mg.material_id
|
LEFT JOIN md_me_materialbase mm ON mm.material_id = mg.material_id
|
||||||
WHERE mg.`status` = '02' AND mg.frozen_qty = 0 AND IFNULL(mg.storagevehicle_code,'') <![CDATA[ <> ]]> ''
|
WHERE mg.`status` = '02' AND mg.frozen_qty = 0 AND IFNULL(mg.storagevehicle_code,'') <![CDATA[ <> ]]> ''
|
||||||
AND IFNULL(ss.struct_code,'') <![CDATA[ <> ]]> ''
|
AND IFNULL(ss.struct_code,'') <![CDATA[ <> ]]> ''
|
||||||
|
AND IFNULL(ss.lock_type, '0') = '0'
|
||||||
AND 0 = (SELECT COUNT(*) FROM pdm_bd_workorder po WHERE po.raw_material_code = mg.storagevehicle_code AND po.workorder_status <![CDATA[ <> ]]> '5')
|
AND 0 = (SELECT COUNT(*) FROM pdm_bd_workorder po WHERE po.raw_material_code = mg.storagevehicle_code AND po.workorder_status <![CDATA[ <> ]]> '5')
|
||||||
<if test="query.stor_id != null and query.stor_id != ''">
|
<if test="query.stor_id != null and query.stor_id != ''">
|
||||||
AND ss.stor_id = #{query.stor_id}
|
AND ss.stor_id = #{query.stor_id}
|
||||||
@@ -67,6 +68,7 @@
|
|||||||
LEFT JOIN md_me_materialbase mm ON mm.material_id = mg.material_id
|
LEFT JOIN md_me_materialbase mm ON mm.material_id = mg.material_id
|
||||||
WHERE mg.`status` = '02' AND mg.frozen_qty = 0 AND IFNULL(mg.storagevehicle_code,'') <![CDATA[ <> ]]> ''
|
WHERE mg.`status` = '02' AND mg.frozen_qty = 0 AND IFNULL(mg.storagevehicle_code,'') <![CDATA[ <> ]]> ''
|
||||||
AND IFNULL(ss.struct_code,'') <![CDATA[ <> ]]> ''
|
AND IFNULL(ss.struct_code,'') <![CDATA[ <> ]]> ''
|
||||||
|
AND IFNULL(ss.lock_type, '0') = '0'
|
||||||
AND 0 = (SELECT COUNT(*) FROM pdm_bd_workorder po WHERE po.raw_material_code = mg.storagevehicle_code AND po.workorder_status <![CDATA[ <> ]]> '5')
|
AND 0 = (SELECT COUNT(*) FROM pdm_bd_workorder po WHERE po.raw_material_code = mg.storagevehicle_code AND po.workorder_status <![CDATA[ <> ]]> '5')
|
||||||
<if test="query.stor_id != null and query.stor_id != ''">
|
<if test="query.stor_id != null and query.stor_id != ''">
|
||||||
AND ss.stor_id = #{query.stor_id}
|
AND ss.stor_id = #{query.stor_id}
|
||||||
|
|||||||
@@ -144,6 +144,11 @@ public class PdmBdWorkorderDto implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String ext_data;
|
private String ext_data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否删除
|
* 是否删除
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.nl.wms.pm_manage.service.impl;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
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.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@@ -210,7 +211,17 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
|||||||
if (!WorkOrderStatusEnum.UNPRODUCED.getCode().equals(order.getWorkorder_status())) {
|
if (!WorkOrderStatusEnum.UNPRODUCED.getCode().equals(order.getWorkorder_status())) {
|
||||||
throw new BadRequestException("仅状态为1的工单允许审核!");
|
throw new BadRequestException("仅状态为1的工单允许审核!");
|
||||||
}
|
}
|
||||||
order.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
|
Integer auditResult = entity.getAudit_result();
|
||||||
|
if (auditResult == null || (auditResult != 0 && auditResult != 1)) {
|
||||||
|
throw new BadRequestException("审核结果只能为通过(1)或不通过(0)!");
|
||||||
|
}
|
||||||
|
if (auditResult == 0 && StrUtil.isBlank(entity.getRemark())) {
|
||||||
|
throw new BadRequestException("审核不通过时原因不能为空!");
|
||||||
|
}
|
||||||
|
order.setWorkorder_status(auditResult == 1
|
||||||
|
? WorkOrderStatusEnum.ISSUED.getCode()
|
||||||
|
: WorkOrderStatusEnum.CANCELED.getCode());
|
||||||
|
order.setRemark(entity.getRemark());
|
||||||
order.setAudit_id(SecurityUtils.getCurrentUserId());
|
order.setAudit_id(SecurityUtils.getCurrentUserId());
|
||||||
order.setAudit_name(SecurityUtils.getCurrentNickName());
|
order.setAudit_name(SecurityUtils.getCurrentNickName());
|
||||||
order.setAudit_time(DateUtil.now());
|
order.setAudit_time(DateUtil.now());
|
||||||
|
|||||||
@@ -117,16 +117,15 @@ public class BackInManualTask extends AbstractTask {
|
|||||||
inBillService.taskFinish(taskObj);
|
inBillService.taskFinish(taskObj);
|
||||||
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||||
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
|
|
||||||
.set(Structattr::getStoragevehicle_type, "")
|
|
||||||
.set(Structattr::getTask_code, null)
|
.set(Structattr::getTask_code, null)
|
||||||
.set(Structattr::getOccupancy_state, "3")
|
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")));
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")));
|
||||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||||
.set(SchBasePoint::getIng_task_code, null)
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
.set(SchBasePoint::getPoint_status, "1")
|
.set(SchBasePoint::getPoint_status, "1")
|
||||||
.set(SchBasePoint::getVehicle_code, null)
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getIos_id, null));
|
.set(SchBasePoint::getIos_id, null));
|
||||||
|
|
||||||
taskObj.setRemark("已完成");
|
taskObj.setRemark("已完成");
|
||||||
@@ -146,7 +145,6 @@ public class BackInManualTask extends AbstractTask {
|
|||||||
public void cancelTask(SchBaseTask taskObj) {
|
public void cancelTask(SchBaseTask taskObj) {
|
||||||
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||||
.set(Structattr::getStoragevehicle_type, "")
|
|
||||||
.set(Structattr::getTask_code, null)
|
.set(Structattr::getTask_code, null)
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")));
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")));
|
||||||
|
|
||||||
|
|||||||
@@ -169,10 +169,7 @@ public class BackInTask extends AbstractTask {
|
|||||||
iStructattrService.update(
|
iStructattrService.update(
|
||||||
new UpdateWrapper<Structattr>().lambda()
|
new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||||
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
|
|
||||||
.set(Structattr::getStoragevehicle_type, "")
|
|
||||||
.set(Structattr::getTask_code, null)
|
.set(Structattr::getTask_code, null)
|
||||||
.set(Structattr::getOccupancy_state, "3")
|
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
);
|
);
|
||||||
// 更新起点
|
// 更新起点
|
||||||
@@ -182,6 +179,8 @@ public class BackInTask extends AbstractTask {
|
|||||||
.set(SchBasePoint::getIng_task_code, null)
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
.set(SchBasePoint::getPoint_status, "1")
|
.set(SchBasePoint::getPoint_status, "1")
|
||||||
.set(SchBasePoint::getVehicle_code, null)
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getIos_id, null)
|
.set(SchBasePoint::getIos_id, null)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -206,7 +205,6 @@ public class BackInTask extends AbstractTask {
|
|||||||
iStructattrService.update(
|
iStructattrService.update(
|
||||||
new UpdateWrapper<Structattr>().lambda()
|
new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||||
.set(Structattr::getStoragevehicle_type, "")
|
|
||||||
.set(Structattr::getTask_code, null)
|
.set(Structattr::getTask_code, null)
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import org.nl.common.exception.BadRequestException;
|
|||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||||
|
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.sch_manage.enums.TaskStatus;
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||||
@@ -52,6 +54,9 @@ public class PdaPointTask extends AbstractTask {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IStructattrService iStructattrService;
|
private IStructattrService iStructattrService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMdPbStoragevehicleinfoService storagevehicleinfoService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String create(JSONObject json) {
|
public String create(JSONObject json) {
|
||||||
SchBaseTask task = new SchBaseTask();
|
SchBaseTask task = new SchBaseTask();
|
||||||
@@ -141,11 +146,14 @@ public class PdaPointTask extends AbstractTask {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void finishTask(SchBaseTask taskObj) {
|
public void finishTask(SchBaseTask taskObj) {
|
||||||
|
MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code());
|
||||||
// 更新起点
|
// 更新起点
|
||||||
iSchBasePointService.update(
|
iSchBasePointService.update(
|
||||||
new UpdateWrapper<SchBasePoint>().lambda()
|
new UpdateWrapper<SchBasePoint>().lambda()
|
||||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||||
.set(SchBasePoint::getVehicle_code, null)
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getIos_id, null)
|
.set(SchBasePoint::getIos_id, null)
|
||||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||||
);
|
);
|
||||||
@@ -153,6 +161,9 @@ public class PdaPointTask extends AbstractTask {
|
|||||||
new UpdateWrapper<Structattr>().lambda()
|
new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||||
.set(Structattr::getStoragevehicle_code, null)
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 0)
|
||||||
|
.set(Structattr::getOccupancy_state, 1)
|
||||||
.set(Structattr::getTask_code, null)
|
.set(Structattr::getTask_code, null)
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
);
|
);
|
||||||
@@ -161,6 +172,8 @@ public class PdaPointTask extends AbstractTask {
|
|||||||
new UpdateWrapper<SchBasePoint>().lambda()
|
new UpdateWrapper<SchBasePoint>().lambda()
|
||||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||||
|
.set(SchBasePoint::getVehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 1)
|
||||||
.set(SchBasePoint::getIos_id, null)
|
.set(SchBasePoint::getIos_id, null)
|
||||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
|
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
|
||||||
);
|
);
|
||||||
@@ -168,6 +181,9 @@ public class PdaPointTask extends AbstractTask {
|
|||||||
new UpdateWrapper<Structattr>().lambda()
|
new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||||
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
|
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
|
||||||
|
.set(Structattr::getStoragevehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 1)
|
||||||
|
.set(Structattr::getOccupancy_state, 3)
|
||||||
.set(Structattr::getTask_code, null)
|
.set(Structattr::getTask_code, null)
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
);
|
);
|
||||||
@@ -183,22 +199,36 @@ public class PdaPointTask extends AbstractTask {
|
|||||||
iSchBasePointService.update(
|
iSchBasePointService.update(
|
||||||
new UpdateWrapper<SchBasePoint>().lambda()
|
new UpdateWrapper<SchBasePoint>().lambda()
|
||||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||||
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||||
);
|
);
|
||||||
iStructattrService.update(
|
iStructattrService.update(
|
||||||
new UpdateWrapper<Structattr>().lambda()
|
new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||||
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 0)
|
||||||
|
.set(Structattr::getOccupancy_state, 1)
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
);
|
);
|
||||||
// 更新终点
|
// 更新终点
|
||||||
iSchBasePointService.update(
|
iSchBasePointService.update(
|
||||||
new UpdateWrapper<SchBasePoint>().lambda()
|
new UpdateWrapper<SchBasePoint>().lambda()
|
||||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||||
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||||
);
|
);
|
||||||
iStructattrService.update(
|
iStructattrService.update(
|
||||||
new UpdateWrapper<Structattr>().lambda()
|
new UpdateWrapper<Structattr>().lambda()
|
||||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||||
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 0)
|
||||||
|
.set(Structattr::getOccupancy_state, 1)
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
);
|
);
|
||||||
// 更新任务
|
// 更新任务
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ import org.nl.common.exception.BadRequestException;
|
|||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||||
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
|
||||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
@@ -64,6 +66,9 @@ public class StOutTask extends AbstractTask {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IMdPbGroupplateService iMdPbGroupplateService;
|
private IMdPbGroupplateService iMdPbGroupplateService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMdPbStoragevehicleinfoService storagevehicleinfoService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String create(JSONObject json) {
|
public String create(JSONObject json) {
|
||||||
SchBaseTask task = new SchBaseTask();
|
SchBaseTask task = new SchBaseTask();
|
||||||
@@ -157,6 +162,7 @@ public class StOutTask extends AbstractTask {
|
|||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void finishTask(SchBaseTask taskObj) {
|
public void finishTask(SchBaseTask taskObj) {
|
||||||
|
MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code());
|
||||||
// 任务完成
|
// 任务完成
|
||||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||||
taskObj.setRemark("已完成");
|
taskObj.setRemark("已完成");
|
||||||
@@ -170,6 +176,8 @@ public class StOutTask extends AbstractTask {
|
|||||||
.set(SchBasePoint::getIng_task_code, null)
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
.set(SchBasePoint::getPoint_status,"3")
|
.set(SchBasePoint::getPoint_status,"3")
|
||||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||||
|
.set(SchBasePoint::getVehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 1)
|
||||||
.set(SchBasePoint::getIos_id, null)
|
.set(SchBasePoint::getIos_id, null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,279 @@
|
|||||||
|
package org.nl.wms.sch_manage.service.util.tasks.jb;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.IdUtil;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||||
|
import org.nl.wms.sch_manage.enums.TaskFinishedTypeEnum;
|
||||||
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
|
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||||
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
|
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
|
||||||
|
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||||
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||||
|
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
|
||||||
|
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||||
|
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||||
|
import org.nl.wms.sch_manage.service.util.TaskUtils;
|
||||||
|
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInv;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDtl;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper;
|
||||||
|
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
||||||
|
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解包下料-屏蔽解包机 AGV 任务
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component("JbDownCloseCbjAgvTask")
|
||||||
|
public class JbDownCloseCbjAgvTask extends AbstractTask {
|
||||||
|
@Resource
|
||||||
|
private ISchBaseTaskService taskService;
|
||||||
|
@Resource
|
||||||
|
private IInBillService inBillService;
|
||||||
|
@Resource
|
||||||
|
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||||
|
@Resource
|
||||||
|
private ISchBasePointService pointService;
|
||||||
|
@Resource
|
||||||
|
private ISchBaseTaskconfigService taskconfigService;
|
||||||
|
@Resource
|
||||||
|
private IStructattrService structattrService;
|
||||||
|
@Resource
|
||||||
|
private IOStorInvMapper ioStorInvMapper;
|
||||||
|
@Resource
|
||||||
|
private IOStorInvDtlMapper ioStorInvDtlMapper;
|
||||||
|
@Resource
|
||||||
|
private IMdPbGroupplateService groupplateService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String create(JSONObject param) {
|
||||||
|
JSONArray tasks = param.getJSONArray("tasks");
|
||||||
|
List<SchBaseTask> batchTask = new ArrayList<>();
|
||||||
|
for (int i = 0; i < tasks.size(); i++) {
|
||||||
|
JSONObject json = tasks.getJSONObject(i);
|
||||||
|
SchBaseTask task = new SchBaseTask();
|
||||||
|
task.setTask_id(IdUtil.getStringId());
|
||||||
|
task.setTask_code(json.getString("TaskCode"));
|
||||||
|
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||||
|
task.setConfig_code(json.getString("task_type"));
|
||||||
|
task.setPoint_code1(json.getString("point_code1"));
|
||||||
|
task.setPoint_code2(json.getString("point_code2"));
|
||||||
|
task.setPoint_code3(json.getString("point_code3"));
|
||||||
|
task.setPoint_code4(json.getString("point_code4"));
|
||||||
|
task.setVehicle_code(json.getString("vehicle_code"));
|
||||||
|
task.setVehicle_code2(json.getString("vehicle_code2"));
|
||||||
|
task.setVehicle_type(json.getString("vehicle_type"));
|
||||||
|
task.setGroup_id(json.getString("group_id"));
|
||||||
|
task.setTask_group_id(json.getString("task_group_id"));
|
||||||
|
task.setTask_group_seq(json.getBigDecimal("task_group_seq"));
|
||||||
|
task.setRequest_param(json.toString());
|
||||||
|
task.setPriority(json.getString("Priority"));
|
||||||
|
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||||
|
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||||
|
task.setCreate_time(DateUtil.now());
|
||||||
|
batchTask.add(task);
|
||||||
|
}
|
||||||
|
taskService.saveBatch(batchTask);
|
||||||
|
return batchTask.get(batchTask.size() - 1).getTask_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AcsTaskDto sendAcsParam(String taskId) {
|
||||||
|
SchBaseTask taskDao = taskService.getById(taskId);
|
||||||
|
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
|
||||||
|
JSONObject object = JSONObject.parseObject(taskDao.getRequest_param());
|
||||||
|
|
||||||
|
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||||
|
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
||||||
|
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||||
|
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||||
|
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||||
|
acsTaskDto.setAgv_system_type(normalizeAgvSystemType("2"));
|
||||||
|
acsTaskDto.setPriority(taskDao.getPriority());
|
||||||
|
acsTaskDto.setTask_type(taskconfig.getTask_type());
|
||||||
|
acsTaskDto.setTruss_type(object.getString("truss_type"));
|
||||||
|
acsTaskDto.setInteraction_json(new JSONObject().fluentPut("have_lid", object.getString("have_lid")));
|
||||||
|
fillCommonAcsTaskFields(taskDao, acsTaskDto);
|
||||||
|
acsTaskDto.setVehicle_code2(null);
|
||||||
|
return acsTaskDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateStatus(String task_code, TaskStatus status) {
|
||||||
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
|
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||||
|
throw new BadRequestException("该任务已完成!");
|
||||||
|
}
|
||||||
|
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||||
|
throw new BadRequestException("该任务已取消!");
|
||||||
|
}
|
||||||
|
if (status.equals(TaskStatus.EXECUTING)) {
|
||||||
|
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||||
|
taskObj.setRemark("执行中");
|
||||||
|
TaskUtils.setUpdateByAcs(taskObj);
|
||||||
|
taskService.updateById(taskObj);
|
||||||
|
}
|
||||||
|
if (status.equals(TaskStatus.FINISHED)) {
|
||||||
|
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||||
|
}
|
||||||
|
if (status.equals(TaskStatus.CANCELED)) {
|
||||||
|
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||||
|
List<IOStorInvDis> disList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<IOStorInvDis>()
|
||||||
|
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id()));
|
||||||
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||||
|
taskObj.setRemark("已取消");
|
||||||
|
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||||
|
taskService.updateById(taskObj);
|
||||||
|
clearPoint(taskObj.getPoint_code1());
|
||||||
|
unlockTargetStruct(taskObj.getPoint_code2());
|
||||||
|
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||||
|
.set(IOStorInvDis::getTask_id, null)
|
||||||
|
.set(IOStorInvDis::getPoint_code, null)
|
||||||
|
.set(IOStorInvDis::getIs_issued, 0)
|
||||||
|
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
|
||||||
|
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id()));
|
||||||
|
clearPointTaskCode(taskObj.getPoint_code1());
|
||||||
|
clearStructTaskCode(taskObj.getPoint_code2());
|
||||||
|
deleteRelatedInBills(disList);
|
||||||
|
deleteRelatedGroupPlate(taskObj.getGroup_id());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||||
|
clearPoint(taskObj.getPoint_code1());
|
||||||
|
occupyStruct(taskObj.getPoint_code2(), taskObj.getVehicle_code(), taskObj.getVehicle_type());
|
||||||
|
taskObj.setRemark("任务执行完毕");
|
||||||
|
inBillService.taskFinish(taskObj);
|
||||||
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||||
|
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||||
|
taskService.updateById(taskObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearPoint(String code) {
|
||||||
|
SchBasePoint point = pointService.getById(code);
|
||||||
|
if (ObjectUtil.isEmpty(point)) {
|
||||||
|
throw new BadRequestException("点位不存在:" + code);
|
||||||
|
}
|
||||||
|
point.setPoint_status("1");
|
||||||
|
point.setVehicle_code(null);
|
||||||
|
point.setVehicle_type(null);
|
||||||
|
point.setUpdate_time(DateUtil.now());
|
||||||
|
pointService.updateById(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void occupyStruct(String code, String vehicleCode, String vehicleType) {
|
||||||
|
Structattr struct = structattrService.getByCode(code);
|
||||||
|
if (ObjectUtil.isEmpty(struct)) {
|
||||||
|
throw new BadRequestException("仓位不存在:" + code);
|
||||||
|
}
|
||||||
|
structattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||||
|
.set(Structattr::getStoragevehicle_code, vehicleCode)
|
||||||
|
.set(Structattr::getStoragevehicle_type, vehicleType)
|
||||||
|
.set(Structattr::getOccupancy_state, "2")
|
||||||
|
.eq(Structattr::getStruct_code, code));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearPointTaskCode(String code) {
|
||||||
|
if (ObjectUtil.isEmpty(code)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||||
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
|
.eq(SchBasePoint::getPoint_code, code));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearStructTaskCode(String code) {
|
||||||
|
if (ObjectUtil.isEmpty(code)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
structattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||||
|
.set(Structattr::getTask_code, null)
|
||||||
|
.eq(Structattr::getStruct_code, code));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unlockTargetStruct(String code) {
|
||||||
|
if (ObjectUtil.isEmpty(code)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JSONObject unlockMap = new JSONObject();
|
||||||
|
unlockMap.put("struct_code", code);
|
||||||
|
unlockMap.put("inv_id", null);
|
||||||
|
unlockMap.put("inv_code", null);
|
||||||
|
unlockMap.put("inv_type", null);
|
||||||
|
structattrService.updateStatusByCode("2", unlockMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteRelatedInBills(List<IOStorInvDis> disList) {
|
||||||
|
if (ObjectUtil.isEmpty(disList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<String> invIds = new ArrayList<>();
|
||||||
|
for (IOStorInvDis dis : disList) {
|
||||||
|
if (ObjectUtil.isNotEmpty(dis.getIostorinv_id()) && !invIds.contains(dis.getIostorinv_id())) {
|
||||||
|
invIds.add(dis.getIostorinv_id());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String invId : invIds) {
|
||||||
|
ioStorInvDisMapper.delete(new LambdaQueryWrapper<IOStorInvDis>()
|
||||||
|
.eq(IOStorInvDis::getIostorinv_id, invId));
|
||||||
|
ioStorInvDtlMapper.delete(new LambdaQueryWrapper<IOStorInvDtl>()
|
||||||
|
.eq(IOStorInvDtl::getIostorinv_id, invId));
|
||||||
|
ioStorInvMapper.deleteById(invId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteRelatedGroupPlate(String groupId) {
|
||||||
|
if (ObjectUtil.isEmpty(groupId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
groupplateService.remove(new LambdaQueryWrapper<GroupPlate>()
|
||||||
|
.eq(GroupPlate::getGroup_id, groupId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forceFinish(String task_code) {
|
||||||
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
|
if (ObjectUtil.isEmpty(taskObj)) {
|
||||||
|
throw new BadRequestException("该任务不存在");
|
||||||
|
}
|
||||||
|
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel(String task_code) {
|
||||||
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
|
if (ObjectUtil.isEmpty(taskObj)) {
|
||||||
|
throw new BadRequestException("该任务不存在");
|
||||||
|
}
|
||||||
|
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void backMes(String task_code) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -220,6 +220,8 @@ public class SeparateMaterialManualTask extends AbstractTask {
|
|||||||
//点位1
|
//点位1
|
||||||
iStructattrService.update(new LambdaUpdateWrapper<Structattr>()
|
iStructattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||||
.set(Structattr::getStoragevehicle_code, null)
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 0)
|
||||||
.set(Structattr::getOccupancy_state, "1")
|
.set(Structattr::getOccupancy_state, "1")
|
||||||
.set(Structattr::getUpdate_id, SecurityUtils.getCurrentUserId())
|
.set(Structattr::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||||
.set(Structattr::getUpdate_name, SecurityUtils.getCurrentNickName())
|
.set(Structattr::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||||
@@ -299,7 +301,9 @@ public class SeparateMaterialManualTask extends AbstractTask {
|
|||||||
// 回滚目标点位,解除进行中任务占用
|
// 回滚目标点位,解除进行中任务占用
|
||||||
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||||
.set(SchBasePoint::getIng_task_code, null)
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
.set(SchBasePoint::getVehicle_type, "")
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getPoint_status, "1")
|
.set(SchBasePoint::getPoint_status, "1")
|
||||||
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||||
|
|||||||
@@ -233,6 +233,8 @@ public class SeparateMaterialTask extends AbstractTask {
|
|||||||
//点位1
|
//点位1
|
||||||
iStructattrService.update(new LambdaUpdateWrapper<Structattr>()
|
iStructattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||||
.set(Structattr::getStoragevehicle_code, null)
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 0)
|
||||||
.set(Structattr::getOccupancy_state, "1")
|
.set(Structattr::getOccupancy_state, "1")
|
||||||
.set(Structattr::getUpdate_id, SecurityUtils.getCurrentUserId())
|
.set(Structattr::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||||
.set(Structattr::getUpdate_name, SecurityUtils.getCurrentNickName())
|
.set(Structattr::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||||
@@ -312,7 +314,9 @@ public class SeparateMaterialTask extends AbstractTask {
|
|||||||
// 回滚目标点位,解除进行中任务占用
|
// 回滚目标点位,解除进行中任务占用
|
||||||
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||||
.set(SchBasePoint::getIng_task_code, null)
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
.set(SchBasePoint::getVehicle_type, "")
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getVehicle_qty, 0)
|
||||||
.set(SchBasePoint::getPoint_status, "1")
|
.set(SchBasePoint::getPoint_status, "1")
|
||||||
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import org.nl.wms.sch_manage.service.util.tasks.StInTask;
|
|||||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask;
|
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask;
|
||||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackManualTask;
|
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackManualTask;
|
||||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
|
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
|
||||||
|
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownCloseCbjAgvTask;
|
||||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownCloseUnsealingAgvTask;
|
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownCloseUnsealingAgvTask;
|
||||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownManualTask;
|
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownManualTask;
|
||||||
import org.nl.wms.system_manage.service.param.ISysParamService;
|
import org.nl.wms.system_manage.service.param.ISysParamService;
|
||||||
@@ -107,6 +108,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
@Resource
|
@Resource
|
||||||
private JbDownAgvTask jbDownAgvTask;
|
private JbDownAgvTask jbDownAgvTask;
|
||||||
@Resource
|
@Resource
|
||||||
|
private JbDownCloseCbjAgvTask jbDownCloseCbjAgvTask;
|
||||||
|
@Resource
|
||||||
private JbDownCloseUnsealingAgvTask jbDownCloseUnsealingAgvTask;
|
private JbDownCloseUnsealingAgvTask jbDownCloseUnsealingAgvTask;
|
||||||
@Resource
|
@Resource
|
||||||
private JbBackAgvTask jbBackAgvTask;
|
private JbBackAgvTask jbBackAgvTask;
|
||||||
@@ -764,6 +767,7 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
public void divPoint(Map whereJson) {
|
public void divPoint(Map whereJson) {
|
||||||
ArrayList<HashMap> rows = (ArrayList<HashMap>) whereJson.get("tableMater");
|
ArrayList<HashMap> rows = (ArrayList<HashMap>) whereJson.get("tableMater");
|
||||||
String point_code = (String) whereJson.get("point_code");
|
String point_code = (String) whereJson.get("point_code");
|
||||||
|
String type = String.valueOf(whereJson.get("type"));
|
||||||
HashMap<String, String> map = rows.get(0);
|
HashMap<String, String> map = rows.get(0);
|
||||||
IOStorInv invObj = this.getById(map.get("iostorinv_id"));
|
IOStorInv invObj = this.getById(map.get("iostorinv_id"));
|
||||||
|
|
||||||
@@ -804,8 +808,41 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
|| !"2".equals(intoPoint.getPoint_type())) {
|
|| !"2".equals(intoPoint.getPoint_type())) {
|
||||||
throw new BadRequestException("请选择超细/中粗吨袋解包区对接位!");
|
throw new BadRequestException("请选择超细/中粗吨袋解包区对接位!");
|
||||||
}
|
}
|
||||||
if (isOpenUnsealingEnabled()) {
|
if ("0".equals(type)) {
|
||||||
String cfgPointType = "CXDDJBQ".equals(intoPoint.getRegion_code()) ? "1" : "2";
|
throw new BadRequestException("解包入库不支持人工转运类型!");
|
||||||
|
}
|
||||||
|
if (!"1".equals(type)) {
|
||||||
|
throw new BadRequestException("type参数错误,仅支持0(人工转运)或1(AGV转运)!");
|
||||||
|
}
|
||||||
|
String openCbj = getBinaryParamStrict("is_open_cbj");
|
||||||
|
String openUnsealing = getBinaryParamStrict("is_open_unsealing");
|
||||||
|
String cfgPointType = "CXDDJBQ".equals(intoPoint.getRegion_code()) ? "1" : "2";
|
||||||
|
SchBasePoint cfgjPoint = findCloseCbjPoint(map.get("storagevehicle_code"), intoPoint, cfgPointType);
|
||||||
|
if ("0".equals(openCbj)) {
|
||||||
|
prepareBucketForCloseCbjTask(map.get("storagevehicle_code"), inStruct.getStoragevehicle_type(), cfgjPoint);
|
||||||
|
String taskGroupId = IdUtil.getStringId();
|
||||||
|
JSONObject task = new JSONObject();
|
||||||
|
task.put("task_type", "JbDownCloseCbjAgvTask");
|
||||||
|
task.put("group_id", groupPlate.getGroup_id());
|
||||||
|
task.put("workorder_id", whereJson.get("workorder_id"));
|
||||||
|
task.put("task_group_id", taskGroupId);
|
||||||
|
task.put("task_group_seq", 1);
|
||||||
|
task.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||||
|
task.put("point_code1", cfgjPoint.getPoint_code());
|
||||||
|
task.put("point_code2", structCode);
|
||||||
|
task.put("point_code3", null);
|
||||||
|
task.put("point_code4", null);
|
||||||
|
task.put("truss_type", "3");
|
||||||
|
task.put("have_lid", "1");
|
||||||
|
task.put("vehicle_type", inStruct.getStoragevehicle_type());
|
||||||
|
task.put("seq", 1);
|
||||||
|
task.put("vehicle_code", map.get("storagevehicle_code"));
|
||||||
|
task.put("vehicle_code2", null);
|
||||||
|
List<JSONObject> jsonObjects = Arrays.asList(task);
|
||||||
|
JSONObject requestTaskParam = new JSONObject();
|
||||||
|
requestTaskParam.put("tasks", jsonObjects);
|
||||||
|
task_id = jbDownCloseCbjAgvTask.create(requestTaskParam);
|
||||||
|
} else if ("1".equals(openCbj) && "1".equals(openUnsealing)) {
|
||||||
String parentPointCode = intoPoint.getParent_point_code();
|
String parentPointCode = intoPoint.getParent_point_code();
|
||||||
if (ObjectUtil.isEmpty(parentPointCode)) {
|
if (ObjectUtil.isEmpty(parentPointCode)) {
|
||||||
throw new BadRequestException("解包对接点未配置父类编码!");
|
throw new BadRequestException("解包对接点未配置父类编码!");
|
||||||
@@ -814,12 +851,6 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
if (ObjectUtil.isEmpty(emptyPoint)) {
|
if (ObjectUtil.isEmpty(emptyPoint)) {
|
||||||
throw new BadRequestException("找不到可用的空桶缓存位!");
|
throw new BadRequestException("找不到可用的空桶缓存位!");
|
||||||
}
|
}
|
||||||
// 获取无盖子的对应的点位
|
|
||||||
List<SchBasePoint> canUseCFGJs = pointService.getCanUseCFGJs(intoPoint, "1", cfgPointType);
|
|
||||||
if (canUseCFGJs.size() == 0) {
|
|
||||||
throw new BadRequestException("找不到可用的拆封盖机");
|
|
||||||
}
|
|
||||||
SchBasePoint cfgjPoint = canUseCFGJs.get(0);
|
|
||||||
// 创建任务1
|
// 创建任务1
|
||||||
String taskGroupId = IdUtil.getStringId();
|
String taskGroupId = IdUtil.getStringId();
|
||||||
JSONObject task1 = new JSONObject();
|
JSONObject task1 = new JSONObject();
|
||||||
@@ -879,7 +910,7 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
JSONObject requestTaskParam = new JSONObject();
|
JSONObject requestTaskParam = new JSONObject();
|
||||||
requestTaskParam.put("tasks", jsonObjects);
|
requestTaskParam.put("tasks", jsonObjects);
|
||||||
task_id = jbDownAgvTask.create(requestTaskParam);
|
task_id = jbDownAgvTask.create(requestTaskParam);
|
||||||
} else {
|
} else if ("1".equals(openCbj) && "0".equals(openUnsealing)) {
|
||||||
String taskGroupId = IdUtil.getStringId();
|
String taskGroupId = IdUtil.getStringId();
|
||||||
JSONObject task = new JSONObject();
|
JSONObject task = new JSONObject();
|
||||||
task.put("task_type", "JbDownCloseUnsealingAgvTask");
|
task.put("task_type", "JbDownCloseUnsealingAgvTask");
|
||||||
@@ -902,6 +933,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
JSONObject requestTaskParam = new JSONObject();
|
JSONObject requestTaskParam = new JSONObject();
|
||||||
requestTaskParam.put("tasks", jsonObjects);
|
requestTaskParam.put("tasks", jsonObjects);
|
||||||
task_id = jbDownCloseUnsealingAgvTask.create(requestTaskParam);
|
task_id = jbDownCloseUnsealingAgvTask.create(requestTaskParam);
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统参数配置错误");
|
||||||
}
|
}
|
||||||
} else if (StatusEnum.IOBILL_TYPE_IN.code("解包直接入库").equals(invObj.getBill_type())) {
|
} else if (StatusEnum.IOBILL_TYPE_IN.code("解包直接入库").equals(invObj.getBill_type())) {
|
||||||
// 创建人工四点任务
|
// 创建人工四点任务
|
||||||
@@ -985,8 +1018,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
task.put("task_group_seq", whereJson.get("task_group_seq"));
|
task.put("task_group_seq", whereJson.get("task_group_seq"));
|
||||||
task.put("task_group_id", whereJson.get("task_group_id"));
|
task.put("task_group_id", whereJson.get("task_group_id"));
|
||||||
task.put("vehicle_code", materialPoint.getVehicle_code());
|
task.put("vehicle_code", materialPoint.getVehicle_code());
|
||||||
String type = String.valueOf(whereJson.get("type"));
|
String backType = String.valueOf(whereJson.get("type"));
|
||||||
if ("0".equals(type)) {
|
if ("0".equals(backType)) {
|
||||||
task.put("task_type", "JbBackManualTask");
|
task.put("task_type", "JbBackManualTask");
|
||||||
task_id = jbBackManualTask.create(task);
|
task_id = jbBackManualTask.create(task);
|
||||||
} else {
|
} else {
|
||||||
@@ -1122,12 +1155,81 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
ioStorInvDisMapper.updateById(dis);
|
ioStorInvDisMapper.updateById(dis);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOpenUnsealingEnabled() {
|
private String getBinaryParamStrict(String code) {
|
||||||
Param param = paramService.findByCode("is_open_unsealing");
|
Param param = paramService.findByCode(code);
|
||||||
if (ObjectUtil.isEmpty(param) || StrUtil.isBlank(param.getValue())) {
|
if (ObjectUtil.isEmpty(param) || StrUtil.isBlank(param.getValue())) {
|
||||||
return true;
|
throw new BadRequestException("系统参数配置错误");
|
||||||
}
|
}
|
||||||
return "1".equals(StrUtil.trim(param.getValue()));
|
String value = StrUtil.trim(param.getValue());
|
||||||
|
if (!"0".equals(value) && !"1".equals(value)) {
|
||||||
|
throw new BadRequestException("系统参数配置错误");
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SchBasePoint findCloseCbjPoint(String bucketCode, SchBasePoint intoPoint, String cfgPointType) {
|
||||||
|
SchBasePoint currentBucketPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getVehicle_code, bucketCode), false);
|
||||||
|
if (ObjectUtil.isNotEmpty(currentBucketPoint)
|
||||||
|
&& "DTCFGQ".equals(currentBucketPoint.getRegion_code())
|
||||||
|
&& cfgPointType.equals(currentBucketPoint.getPoint_type())) {
|
||||||
|
return currentBucketPoint;
|
||||||
|
}
|
||||||
|
List<SchBasePoint> canUseCFGJs = pointService.getCanUseCFGJs(intoPoint, "1", cfgPointType);
|
||||||
|
if (canUseCFGJs.size() == 0) {
|
||||||
|
throw new BadRequestException("找不到可用的拆封盖机");
|
||||||
|
}
|
||||||
|
return canUseCFGJs.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void prepareBucketForCloseCbjTask(String bucketCode, String vehicleType, SchBasePoint cbjPoint) {
|
||||||
|
SchBasePoint oldPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getVehicle_code, bucketCode), false);
|
||||||
|
Structattr oldStruct = iStructattrService.getOne(new LambdaQueryWrapper<Structattr>()
|
||||||
|
.eq(Structattr::getStoragevehicle_code, bucketCode), false);
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(oldPoint) && ObjectUtil.isNotEmpty(oldStruct)) {
|
||||||
|
throw new BadRequestException("料桶码存在多位置绑定,请先处理异常数据");
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(oldPoint)) {
|
||||||
|
if (!cbjPoint.getPoint_code().equals(oldPoint.getPoint_code())) {
|
||||||
|
clearBucketFromPoint(oldPoint.getPoint_code());
|
||||||
|
bindBucketToPoint(cbjPoint.getPoint_code(), bucketCode, vehicleType);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(oldStruct)) {
|
||||||
|
clearBucketFromStruct(oldStruct.getStruct_code());
|
||||||
|
bindBucketToPoint(cbjPoint.getPoint_code(), bucketCode, vehicleType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bindBucketToPoint(cbjPoint.getPoint_code(), bucketCode, vehicleType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearBucketFromPoint(String pointCode) {
|
||||||
|
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||||
|
.set(SchBasePoint::getVehicle_code, null)
|
||||||
|
.set(SchBasePoint::getVehicle_type, null)
|
||||||
|
.set(SchBasePoint::getPoint_status, "1")
|
||||||
|
.set(SchBasePoint::getIng_task_code, null)
|
||||||
|
.eq(SchBasePoint::getPoint_code, pointCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearBucketFromStruct(String structCode) {
|
||||||
|
iStructattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||||
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getOccupancy_state, "1")
|
||||||
|
.set(Structattr::getTask_code, null)
|
||||||
|
.eq(Structattr::getStruct_code, structCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindBucketToPoint(String pointCode, String bucketCode, String vehicleType) {
|
||||||
|
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||||
|
.set(SchBasePoint::getVehicle_code, bucketCode)
|
||||||
|
.set(SchBasePoint::getVehicle_type, vehicleType)
|
||||||
|
.set(SchBasePoint::getPoint_status, "3")
|
||||||
|
.eq(SchBasePoint::getPoint_code, pointCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -395,6 +395,14 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
|
|||||||
String iostorinvId = whereJson.getString("iostorinv_id");
|
String iostorinvId = whereJson.getString("iostorinv_id");
|
||||||
IOStorInv ioStorInv = getOutBillOrThrow(iostorinvId);
|
IOStorInv ioStorInv = getOutBillOrThrow(iostorinvId);
|
||||||
ensureOutBillStatus(ioStorInv, OUT_BILL_STATUS_CREATED);
|
ensureOutBillStatus(ioStorInv, OUT_BILL_STATUS_CREATED);
|
||||||
|
Integer auditResult = whereJson.getInteger("audit_result");
|
||||||
|
String remark = whereJson.getString("remark");
|
||||||
|
if (auditResult == null || (auditResult != 1 && auditResult != 2)) {
|
||||||
|
throw new BadRequestException("审核结果只能为通过(1)或不通过(2)!");
|
||||||
|
}
|
||||||
|
if (auditResult == 2 && StrUtil.isBlank(remark)) {
|
||||||
|
throw new BadRequestException("审核不通过时原因不能为空!");
|
||||||
|
}
|
||||||
|
|
||||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
String nickName = SecurityUtils.getCurrentNickName();
|
String nickName = SecurityUtils.getCurrentNickName();
|
||||||
@@ -402,10 +410,15 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
|
|||||||
|
|
||||||
IOStorInv updateMst = new IOStorInv();
|
IOStorInv updateMst = new IOStorInv();
|
||||||
updateMst.setIostorinv_id(iostorinvId);
|
updateMst.setIostorinv_id(iostorinvId);
|
||||||
updateMst.setBill_status(IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED));
|
updateMst.setBill_status(auditResult == 1
|
||||||
|
? IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED)
|
||||||
|
: IOSEnum.BILL_STATUS.code("完成"));
|
||||||
updateMst.setAudit_optid(currentUserId);
|
updateMst.setAudit_optid(currentUserId);
|
||||||
updateMst.setAudit_optname(nickName);
|
updateMst.setAudit_optname(nickName);
|
||||||
updateMst.setAudit_time(now);
|
updateMst.setAudit_time(now);
|
||||||
|
if (auditResult == 2) {
|
||||||
|
updateMst.setRemark(remark);
|
||||||
|
}
|
||||||
updateMst.setUpdate_optid(currentUserId);
|
updateMst.setUpdate_optid(currentUserId);
|
||||||
updateMst.setUpdate_optname(nickName);
|
updateMst.setUpdate_optname(nickName);
|
||||||
updateMst.setUpdate_time(now);
|
updateMst.setUpdate_time(now);
|
||||||
@@ -413,7 +426,9 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
|
|||||||
|
|
||||||
ioStorInvDtlMapper.update(new IOStorInvDtl(),
|
ioStorInvDtlMapper.update(new IOStorInvDtl(),
|
||||||
new LambdaUpdateWrapper<IOStorInvDtl>()
|
new LambdaUpdateWrapper<IOStorInvDtl>()
|
||||||
.set(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED))
|
.set(IOStorInvDtl::getBill_status, auditResult == 1
|
||||||
|
? IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_AUDITED)
|
||||||
|
: IOSEnum.BILL_STATUS.code("完成"))
|
||||||
.eq(IOStorInvDtl::getIostorinv_id, iostorinvId)
|
.eq(IOStorInvDtl::getIostorinv_id, iostorinvId)
|
||||||
.eq(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_CREATED)));
|
.eq(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code(OUT_BILL_STATUS_CREATED)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nl.wms.warehouse_manage.service.impl;
|
package org.nl.wms.warehouse_manage.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
@@ -14,8 +15,10 @@ import org.nl.common.utils.CodeUtil;
|
|||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
||||||
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||||
|
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.MdPbStoragevehicleextMapper;
|
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
|
||||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
@@ -79,6 +82,9 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IStructattrService iStructattrService;
|
private IStructattrService iStructattrService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务服务
|
* 任务服务
|
||||||
*/
|
*/
|
||||||
@@ -228,6 +234,7 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void confirmTask(StIvtMoveinvdtl dtlDao) {
|
public void confirmTask(StIvtMoveinvdtl dtlDao) {
|
||||||
|
MdPbStoragevehicleinfo storagevehicleinfo = iMdPbStoragevehicleinfoService.getByCode(dtlDao.getStoragevehicle_code());
|
||||||
// 需要更新库存集合
|
// 需要更新库存集合
|
||||||
List<JSONObject> updateIvtList = new ArrayList<>();
|
List<JSONObject> updateIvtList = new ArrayList<>();
|
||||||
// 查询物料
|
// 查询物料
|
||||||
@@ -263,6 +270,8 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
|
|||||||
.set(Structattr::getOccupancy_state,"1")
|
.set(Structattr::getOccupancy_state,"1")
|
||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
.set(Structattr::getStoragevehicle_code, null)
|
.set(Structattr::getStoragevehicle_code, null)
|
||||||
|
.set(Structattr::getStoragevehicle_type, null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 0)
|
||||||
);
|
);
|
||||||
// 更新终点
|
// 更新终点
|
||||||
iStructattrService.update(
|
iStructattrService.update(
|
||||||
@@ -271,6 +280,8 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
|
|||||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||||
.set(Structattr::getOccupancy_state,"3")
|
.set(Structattr::getOccupancy_state,"3")
|
||||||
.set(Structattr::getStoragevehicle_code, dtlDao.getStoragevehicle_code())
|
.set(Structattr::getStoragevehicle_code, dtlDao.getStoragevehicle_code())
|
||||||
|
.set(Structattr::getStoragevehicle_type, ObjectUtil.isNotEmpty(storagevehicleinfo) ? storagevehicleinfo.getStoragevehicle_type() : null)
|
||||||
|
.set(Structattr::getStoragevehicle_qty, 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
// 更新明细状态
|
// 更新明细状态
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE `pdm_bd_workorder`
|
||||||
|
ADD COLUMN `remark` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT '备注' AFTER `ext_data`;
|
||||||
@@ -127,6 +127,42 @@
|
|||||||
强制完工
|
强制完工
|
||||||
</el-button>
|
</el-button>
|
||||||
</crudOperation>
|
</crudOperation>
|
||||||
|
<el-dialog
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="auditDialogVisible"
|
||||||
|
title="审核"
|
||||||
|
width="520px"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="auditForm"
|
||||||
|
:model="auditForm"
|
||||||
|
:rules="auditRules"
|
||||||
|
size="mini"
|
||||||
|
label-width="90px"
|
||||||
|
label-suffix=":"
|
||||||
|
>
|
||||||
|
<el-form-item label="审核结果" prop="audit_result">
|
||||||
|
<el-radio-group v-model="auditForm.audit_result">
|
||||||
|
<el-radio :label="1">通过</el-radio>
|
||||||
|
<el-radio :label="0">不通过</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="原因" prop="remark">
|
||||||
|
<el-input
|
||||||
|
v-model="auditForm.remark"
|
||||||
|
type="textarea"
|
||||||
|
:rows="4"
|
||||||
|
maxlength="255"
|
||||||
|
show-word-limit
|
||||||
|
placeholder="请输入审核原因"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="text" @click="closeAuditDialog">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitAudit">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
<!--表单组件-->
|
<!--表单组件-->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
@@ -320,6 +356,17 @@
|
|||||||
style="width: 240px;"
|
style="width: 240px;"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input
|
||||||
|
v-model="form.remark"
|
||||||
|
type="textarea"
|
||||||
|
:rows="3"
|
||||||
|
maxlength="255"
|
||||||
|
show-word-limit
|
||||||
|
style="width: 510px;"
|
||||||
|
placeholder="请输入备注"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item v-if="false" label="工单类型" prop="workorder_type">
|
<el-form-item v-if="false" label="工单类型" prop="workorder_type">
|
||||||
<el-input v-model="form.workorder_type" style="width: 240px;" />
|
<el-input v-model="form.workorder_type" style="width: 240px;" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -395,6 +442,12 @@
|
|||||||
label="批次号"
|
label="批次号"
|
||||||
:min-width="flexWidth('batch_no',crud.data,'批次号')"
|
:min-width="flexWidth('batch_no',crud.data,'批次号')"
|
||||||
/>
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="remark"
|
||||||
|
label="备注"
|
||||||
|
:min-width="flexWidth('remark',crud.data,'备注', 40)"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="vehicle_type"
|
prop="vehicle_type"
|
||||||
label="载具类型"
|
label="载具类型"
|
||||||
@@ -545,9 +598,15 @@ const defaultForm = {
|
|||||||
plan_weight: 0,
|
plan_weight: 0,
|
||||||
guadansum: 0,
|
guadansum: 0,
|
||||||
ext_data: null,
|
ext_data: null,
|
||||||
|
remark: null,
|
||||||
priority: 1,
|
priority: 1,
|
||||||
show: false
|
show: false
|
||||||
}
|
}
|
||||||
|
const defaultAuditForm = {
|
||||||
|
workorder_id: null,
|
||||||
|
audit_result: 1,
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
export default {
|
export default {
|
||||||
name: 'PdmBdWorkorder',
|
name: 'PdmBdWorkorder',
|
||||||
dicts: ['storagevehicle_type', 'pdm_workorder_status'],
|
dicts: ['storagevehicle_type', 'pdm_workorder_status'],
|
||||||
@@ -595,6 +654,14 @@ export default {
|
|||||||
{ required: true, message: '工单类型不能为空', trigger: 'blur' }
|
{ required: true, message: '工单类型不能为空', trigger: 'blur' }
|
||||||
]*/
|
]*/
|
||||||
},
|
},
|
||||||
|
auditRules: {
|
||||||
|
audit_result: [
|
||||||
|
{ required: true, message: '请选择审核结果', trigger: 'change' }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ validator: this.validateAuditRemark, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
},
|
||||||
queryTypeOptions: [
|
queryTypeOptions: [
|
||||||
{ key: 'workorder_code', display_name: '工单编号' },
|
{ key: 'workorder_code', display_name: '工单编号' },
|
||||||
{ key: 'point_code', display_name: '设备编码' }
|
{ key: 'point_code', display_name: '设备编码' }
|
||||||
@@ -607,6 +674,8 @@ export default {
|
|||||||
materialDialog: false,
|
materialDialog: false,
|
||||||
orderDialog: false,
|
orderDialog: false,
|
||||||
batchAdd: false,
|
batchAdd: false,
|
||||||
|
auditDialogVisible: false,
|
||||||
|
auditForm: { ...defaultAuditForm },
|
||||||
fullscreenLoading: false,
|
fullscreenLoading: false,
|
||||||
materialCode: null,
|
materialCode: null,
|
||||||
flag: 1
|
flag: 1
|
||||||
@@ -762,19 +831,54 @@ export default {
|
|||||||
}
|
}
|
||||||
this.crud.toQuery()
|
this.crud.toQuery()
|
||||||
},
|
},
|
||||||
|
validateAuditRemark(rule, value, callback) {
|
||||||
|
if (this.auditForm.audit_result === 0 && !value) {
|
||||||
|
callback(new Error('审核不通过时原因不能为空'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
closeAuditDialog() {
|
||||||
|
this.auditDialogVisible = false
|
||||||
|
this.auditForm = { ...defaultAuditForm }
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.auditForm) {
|
||||||
|
this.$refs.auditForm.clearValidate()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
audit(row) {
|
audit(row) {
|
||||||
if (String(row.workorder_status) !== '1') {
|
if (String(row.workorder_status) !== '1') {
|
||||||
this.$message.warning('仅工单状态为1时允许审核')
|
this.$message.warning('仅工单状态为1时允许审核')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.fullscreenLoading = true
|
this.auditForm = {
|
||||||
crudPdmBdWorkorder.audit(row).then(res => {
|
...defaultAuditForm,
|
||||||
this.crud.notify('审核成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
workorder_id: row.workorder_id,
|
||||||
this.crud.toQuery()
|
remark: row.remark || ''
|
||||||
}).catch(() => {
|
}
|
||||||
this.fullscreenLoading = false
|
this.auditDialogVisible = true
|
||||||
}).finally(() => {
|
this.$nextTick(() => {
|
||||||
this.fullscreenLoading = false
|
if (this.$refs.auditForm) {
|
||||||
|
this.$refs.auditForm.clearValidate()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
submitAudit() {
|
||||||
|
this.$refs.auditForm.validate(valid => {
|
||||||
|
if (!valid) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.fullscreenLoading = true
|
||||||
|
crudPdmBdWorkorder.audit(this.auditForm).then(res => {
|
||||||
|
this.crud.notify('审核成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
|
this.closeAuditDialog()
|
||||||
|
this.crud.toQuery()
|
||||||
|
}).catch(() => {
|
||||||
|
this.fullscreenLoading = false
|
||||||
|
}).finally(() => {
|
||||||
|
this.fullscreenLoading = false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
// 下发
|
// 下发
|
||||||
|
|||||||
258
lms/nladmin-ui/src/views/wms/st/ivt/index.vue
Normal file
258
lms/nladmin-ui/src/views/wms/st/ivt/index.vue
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div class="head-container">
|
||||||
|
<div v-if="crud.props.searchToggle">
|
||||||
|
<el-form
|
||||||
|
:inline="true"
|
||||||
|
class="demo-form-inline"
|
||||||
|
label-position="right"
|
||||||
|
label-width="90px"
|
||||||
|
label-suffix=":"
|
||||||
|
>
|
||||||
|
<el-form-item label="所属库区">
|
||||||
|
<el-cascader
|
||||||
|
placeholder="所属库区"
|
||||||
|
:options="sects"
|
||||||
|
:props="{ checkStrictly: true }"
|
||||||
|
clearable
|
||||||
|
class="filter-item"
|
||||||
|
style="width: 200px;"
|
||||||
|
@change="sectQueryChange"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="仓位搜索">
|
||||||
|
<el-input
|
||||||
|
v-model="query.struct_code"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
placeholder="仓位编码或名称"
|
||||||
|
style="width: 200px;"
|
||||||
|
class="filter-item"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料搜索">
|
||||||
|
<el-input
|
||||||
|
v-model="query.material_code"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
placeholder="物料编码、名称或规格"
|
||||||
|
style="width: 200px;"
|
||||||
|
class="filter-item"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="批次号">
|
||||||
|
<el-input
|
||||||
|
v-model="query.pcsn"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
placeholder="批次号"
|
||||||
|
style="width: 200px;"
|
||||||
|
class="filter-item"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="载具号">
|
||||||
|
<el-input
|
||||||
|
v-model="query.storagevehicle_code"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
placeholder="载具号"
|
||||||
|
style="width: 200px;"
|
||||||
|
class="filter-item"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否锁定">
|
||||||
|
<el-select
|
||||||
|
v-model="query.is_lock"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
placeholder="是否锁定"
|
||||||
|
style="width: 200px;"
|
||||||
|
class="filter-item"
|
||||||
|
>
|
||||||
|
<el-option label="否" value="0" />
|
||||||
|
<el-option label="是" value="1" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<rrOperation :crud="crud" />
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<crudOperation :permission="permission">
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
size="mini"
|
||||||
|
type="warning"
|
||||||
|
icon="el-icon-lock"
|
||||||
|
:disabled="crud.selections.length === 0"
|
||||||
|
@click="handleStockLock"
|
||||||
|
>
|
||||||
|
库存锁定
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
size="mini"
|
||||||
|
type="info"
|
||||||
|
icon="el-icon-unlock"
|
||||||
|
:disabled="crud.selections.length === 0"
|
||||||
|
@click="handleStockUnlock"
|
||||||
|
>
|
||||||
|
库存解锁
|
||||||
|
</el-button>
|
||||||
|
</crudOperation>
|
||||||
|
<el-table
|
||||||
|
ref="table"
|
||||||
|
v-loading="crud.loading"
|
||||||
|
:data="crud.data"
|
||||||
|
size="mini"
|
||||||
|
style="width: 100%;"
|
||||||
|
@selection-change="crud.selectionChangeHandler"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column prop="struct_code" label="仓位编码" :min-width="flexWidth('struct_code',crud.data,'仓位编码')" />
|
||||||
|
<el-table-column prop="struct_name" label="仓位名称" :min-width="flexWidth('struct_name',crud.data,'仓位名称')" />
|
||||||
|
<el-table-column prop="stor_name" label="仓库" :min-width="flexWidth('stor_name',crud.data,'仓库')" />
|
||||||
|
<el-table-column prop="sect_name" label="库区" :min-width="flexWidth('sect_name',crud.data,'库区')" />
|
||||||
|
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
|
||||||
|
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
|
||||||
|
<el-table-column prop="pcsn" label="批次号" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
|
||||||
|
<el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
|
||||||
|
<el-table-column prop="qty" label="总数" :formatter="crud.formatNum3" :min-width="100" />
|
||||||
|
<el-table-column label="可用数" :min-width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.qty - scope.row.frozen_qty }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
|
||||||
|
<el-table-column label="锁定状态" :min-width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ formatLockStatus(scope.row.lock_type) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />
|
||||||
|
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
|
||||||
|
<el-table-column prop="create_time" label="入库时间" width="170" />
|
||||||
|
<el-table-column prop="supp_code" label="供应商编码" :min-width="flexWidth('supp_code',crud.data,'供应商编码')" />
|
||||||
|
<el-table-column prop="supp_name" label="供应商名称" :min-width="flexWidth('supp_name',crud.data,'供应商名称')" />
|
||||||
|
</el-table>
|
||||||
|
<pagination />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import stockManageApi from '@/views/wms/st/ivt/stockManage'
|
||||||
|
import CRUD, { presenter, header, crud } from '@crud/crud'
|
||||||
|
import rrOperation from '@crud/RR.operation'
|
||||||
|
import crudOperation from '@crud/CRUD.operation'
|
||||||
|
import pagination from '@crud/Pagination'
|
||||||
|
import crudSectattr from '@/views/wms/basedata/sectattr/sectattr'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'StockManage',
|
||||||
|
components: { pagination, rrOperation, crudOperation },
|
||||||
|
mixins: [presenter(), header(), crud()],
|
||||||
|
cruds() {
|
||||||
|
return CRUD({
|
||||||
|
title: '库存管理', url: 'api/stockManage', idField: 'stockrecord_id', sort: 'stockrecord_id,desc',
|
||||||
|
optShow: {
|
||||||
|
add: false,
|
||||||
|
edit: false,
|
||||||
|
showDtlLoading: false,
|
||||||
|
del: false,
|
||||||
|
download: false,
|
||||||
|
reset: true
|
||||||
|
},
|
||||||
|
crudMethod: { ...stockManageApi }
|
||||||
|
})
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
sects: [],
|
||||||
|
permission: {},
|
||||||
|
rules: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
crudSectattr.getSect({ stor_id: '' }).then(res => {
|
||||||
|
this.sects = res.content
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
hand(value) {
|
||||||
|
this.crud.toQuery()
|
||||||
|
},
|
||||||
|
sectQueryChange(val) {
|
||||||
|
if (val.length === 1) {
|
||||||
|
this.query.stor_id = val[0]
|
||||||
|
this.query.sect_code = ''
|
||||||
|
}
|
||||||
|
if (val.length === 0) {
|
||||||
|
this.query.sect_code = ''
|
||||||
|
this.query.stor_id = ''
|
||||||
|
}
|
||||||
|
if (val.length === 2) {
|
||||||
|
this.query.stor_id = val[0]
|
||||||
|
this.query.sect_code = val[1]
|
||||||
|
}
|
||||||
|
this.crud.toQuery()
|
||||||
|
},
|
||||||
|
querytable() {
|
||||||
|
this.crud.toQuery()
|
||||||
|
},
|
||||||
|
formatLockStatus(lockType) {
|
||||||
|
return String(lockType || '0') === '0' ? '否' : '是'
|
||||||
|
},
|
||||||
|
handleStockLock() {
|
||||||
|
this.promptLockReason('库存锁定原因', '请输入锁定原因', reason => {
|
||||||
|
this.changeStockLock('99', reason, '库存锁定成功')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleStockUnlock() {
|
||||||
|
this.promptLockReason('库存解锁原因', '请输入解锁原因', reason => {
|
||||||
|
this.changeStockLock('0', reason, '库存解锁成功')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
promptLockReason(title, inputPlaceholder, onConfirm) {
|
||||||
|
this.$prompt('', title, {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
inputPlaceholder,
|
||||||
|
inputValidator: value => {
|
||||||
|
if (!value || !value.trim()) {
|
||||||
|
return '原因不能为空'
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}).then(({ value }) => {
|
||||||
|
onConfirm(value.trim())
|
||||||
|
}).catch(() => {})
|
||||||
|
},
|
||||||
|
changeStockLock(lockType, remark, message) {
|
||||||
|
const selectedRows = this.crud.selections || []
|
||||||
|
const structMap = new Map()
|
||||||
|
selectedRows.forEach(row => {
|
||||||
|
if (row.struct_code) {
|
||||||
|
structMap.set(row.struct_code, {
|
||||||
|
struct_code: row.struct_code,
|
||||||
|
lock_type: lockType,
|
||||||
|
remark
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const payload = Array.from(structMap.values())
|
||||||
|
if (payload.length === 0) {
|
||||||
|
this.$message({
|
||||||
|
type: 'warning',
|
||||||
|
message: '请选择需要操作的库存数据'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
stockManageApi.updateLock(payload).then(() => {
|
||||||
|
this.crud.notify(message, CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
|
this.crud.toQuery()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
11
lms/nladmin-ui/src/views/wms/st/ivt/stockManage.js
Normal file
11
lms/nladmin-ui/src/views/wms/st/ivt/stockManage.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function updateLock(data) {
|
||||||
|
return request({
|
||||||
|
url: 'api/stockManage/updateLock',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default { updateLock }
|
||||||
@@ -155,6 +155,42 @@
|
|||||||
强制确认
|
强制确认
|
||||||
</el-button>
|
</el-button>
|
||||||
</crudOperation>
|
</crudOperation>
|
||||||
|
<el-dialog
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="auditDialogVisible"
|
||||||
|
title="审核"
|
||||||
|
width="520px"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="auditForm"
|
||||||
|
:model="auditForm"
|
||||||
|
:rules="auditRules"
|
||||||
|
size="mini"
|
||||||
|
label-width="90px"
|
||||||
|
label-suffix=":"
|
||||||
|
>
|
||||||
|
<el-form-item label="审核结果" prop="audit_result">
|
||||||
|
<el-radio-group v-model="auditForm.audit_result">
|
||||||
|
<el-radio :label="1">通过</el-radio>
|
||||||
|
<el-radio :label="2">不通过</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="原因" prop="remark">
|
||||||
|
<el-input
|
||||||
|
v-model="auditForm.remark"
|
||||||
|
type="textarea"
|
||||||
|
:rows="4"
|
||||||
|
maxlength="255"
|
||||||
|
show-word-limit
|
||||||
|
placeholder="请输入审核原因"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="text" @click="closeAuditDialog">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitAudit">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
<el-table
|
<el-table
|
||||||
ref="table"
|
ref="table"
|
||||||
@@ -234,6 +270,11 @@ import ViewDialog from '@/views/wms/st/outbill/ViewDialog'
|
|||||||
import crudBsrealstorattr from '@/views/wms/basedata/bsrealstorattr/bsrealstorattr'
|
import crudBsrealstorattr from '@/views/wms/basedata/bsrealstorattr/bsrealstorattr'
|
||||||
|
|
||||||
const start = new Date()
|
const start = new Date()
|
||||||
|
const defaultAuditForm = {
|
||||||
|
iostorinv_id: null,
|
||||||
|
audit_result: 1,
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Checkoutbill',
|
name: 'Checkoutbill',
|
||||||
@@ -264,6 +305,16 @@ export default {
|
|||||||
},
|
},
|
||||||
loadingConfirm: false,
|
loadingConfirm: false,
|
||||||
loadingAudit: false,
|
loadingAudit: false,
|
||||||
|
auditDialogVisible: false,
|
||||||
|
auditForm: { ...defaultAuditForm },
|
||||||
|
auditRules: {
|
||||||
|
audit_result: [
|
||||||
|
{ required: true, message: '请选择审核结果', trigger: 'change' }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ validator: this.validateAuditRemark, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
},
|
||||||
divShow: false,
|
divShow: false,
|
||||||
audit_flag: true,
|
audit_flag: true,
|
||||||
dis_flag: true,
|
dis_flag: true,
|
||||||
@@ -405,14 +456,49 @@ export default {
|
|||||||
this.mstrow = this.currentRow
|
this.mstrow = this.currentRow
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
validateAuditRemark(rule, value, callback) {
|
||||||
|
if (this.auditForm.audit_result === 2 && !value) {
|
||||||
|
callback(new Error('审核不通过时原因不能为空'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
closeAuditDialog() {
|
||||||
|
this.auditDialogVisible = false
|
||||||
|
this.auditForm = { ...defaultAuditForm }
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.auditForm) {
|
||||||
|
this.$refs.auditForm.clearValidate()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
audit() {
|
audit() {
|
||||||
this.loadingAudit = true
|
this.auditForm = {
|
||||||
checkoutbill.audit({ 'iostorinv_id': this.currentRow.iostorinv_id }).then(() => {
|
...defaultAuditForm,
|
||||||
this.querytable()
|
iostorinv_id: this.currentRow.iostorinv_id,
|
||||||
this.crud.notify('审核成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
remark: this.currentRow.remark || ''
|
||||||
this.loadingAudit = false
|
}
|
||||||
}).catch(() => {
|
this.auditDialogVisible = true
|
||||||
this.loadingAudit = false
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.auditForm) {
|
||||||
|
this.$refs.auditForm.clearValidate()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
submitAudit() {
|
||||||
|
this.$refs.auditForm.validate(valid => {
|
||||||
|
if (!valid) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.loadingAudit = true
|
||||||
|
checkoutbill.audit(this.auditForm).then(() => {
|
||||||
|
this.closeAuditDialog()
|
||||||
|
this.querytable()
|
||||||
|
this.crud.notify('审核成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
|
this.loadingAudit = false
|
||||||
|
}).catch(() => {
|
||||||
|
this.loadingAudit = false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
confirm() {
|
confirm() {
|
||||||
|
|||||||
Reference in New Issue
Block a user