opt:试运行期间,产线,预装车间,线边库出入库逻辑随客户需求变动,代码优化;
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.nl.common.utils;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
|
||||
import java.time.*;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
@@ -158,6 +160,17 @@ public class DateUtil {
|
||||
return LocalDateTime.from(DFY_MD_HMS.parse(localDateTime));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 返回当前年月日
|
||||
*
|
||||
* @return /
|
||||
*/
|
||||
public static String getDateTimeFormatyMd() {
|
||||
return cn.hutool.core.date.DateUtil.format(cn.hutool.core.date.DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 字符串转 yyyy-MM-dd
|
||||
*
|
||||
|
||||
@@ -48,7 +48,7 @@ public class Sectattr implements Serializable {
|
||||
/**
|
||||
* 仓库标识
|
||||
*/
|
||||
private String stor_id;
|
||||
private String stor_code;
|
||||
|
||||
/**
|
||||
* 仓库类型
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
attr.struct_name,
|
||||
attr.stor_name,
|
||||
attr.sect_name,
|
||||
attr.lock_type,
|
||||
mater.material_code,
|
||||
mater.material_name
|
||||
FROM
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!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.SectattrMapper">
|
||||
<select id="queryAllByPage" resultType="org.nl.wms.basedata_manage.service.dao.SectattrDto">
|
||||
SELECT sect.*,stor.stor_name FROM st_ivt_sectattr sect LEFT JOIN st_ivt_bsrealstorattr stor ON sect.stor_id = stor.stor_id
|
||||
SELECT sect.*,stor.stor_name FROM st_ivt_sectattr sect LEFT JOIN st_ivt_bsrealstorattr stor ON sect.stor_code = stor.stor_code
|
||||
<where>
|
||||
sect.is_delete = '0'
|
||||
<if test="params.search != null">
|
||||
@@ -11,10 +11,6 @@
|
||||
OR
|
||||
sect.sect_name LIKE CONCAT('%', #{params.search}, '%')
|
||||
</if>
|
||||
<if test="params.stor_id != null">
|
||||
AND
|
||||
sect.stor_id = #{params.stor_id}
|
||||
</if>
|
||||
<if test="params.stor_code != null">
|
||||
AND
|
||||
sect.sect_code LIKE CONCAT('%', #{params.stor_code}, '%')
|
||||
|
||||
@@ -54,8 +54,10 @@
|
||||
order by ${order_by}
|
||||
</if>
|
||||
</where>
|
||||
limit 20
|
||||
</select>
|
||||
<select id="getRegionIvt" resultType="org.nl.wms.basedata_manage.service.dao.StructattrVechielDto">
|
||||
(
|
||||
SELECT
|
||||
gro.qty,
|
||||
gro.frozen_qty,
|
||||
@@ -68,17 +70,16 @@
|
||||
mater.material_code,
|
||||
mater.material_name,
|
||||
mater.material_spec,
|
||||
po.point_code as struct_code,
|
||||
po.vehicle_code as storagevehicle_code
|
||||
po.point_code AS struct_code,
|
||||
po.vehicle_code AS storagevehicle_code
|
||||
FROM
|
||||
sch_base_point po
|
||||
LEFT JOIN md_pb_groupplate gro ON po.vehicle_code = gro.storagevehicle_code
|
||||
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
|
||||
<where>
|
||||
gro.frozen_qty = 0
|
||||
gro.frozen_qty = 0
|
||||
<if test="search != null and search != ''">
|
||||
and (mater.material_code LIKE '%${search}%'
|
||||
or mater.material_name LIKE '%${search}%')
|
||||
AND (mater.material_code LIKE '%${search}%' OR mater.material_name LIKE '%${search}%')
|
||||
</if>
|
||||
<if test="status != null and status != ''">
|
||||
AND gro.status = #{status}
|
||||
@@ -93,17 +94,52 @@
|
||||
AND po.region_code = #{region_code}
|
||||
</if>
|
||||
<if test="vehicles != null and vehicles.size() > 0">
|
||||
AND po.vehicle_code in
|
||||
AND po.vehicle_code IN
|
||||
<foreach collection="vehicles" item="value" index="key" open="(" close=")" separator=",">
|
||||
#{value}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="is_has_workder != null and is_has_workder != ''">
|
||||
and po.is_has_workder = '0'
|
||||
</if>
|
||||
<if test="order_by != null and order_by != ''">
|
||||
order by ${order_by}
|
||||
AND po.is_has_workder = '0'
|
||||
</if>
|
||||
</where>
|
||||
)
|
||||
UNION
|
||||
(
|
||||
SELECT
|
||||
1 AS qty,
|
||||
0 AS frozen_qty,
|
||||
NULL AS create_time,
|
||||
'Pcs' AS qty_unit_name,
|
||||
NULL AS qty_unit_id,
|
||||
NULL AS material_id,
|
||||
NULL AS pcsn,
|
||||
NULL AS group_id,
|
||||
'KH001' AS material_code,
|
||||
'空载具' AS material_name,
|
||||
'空载具' AS material_spec,
|
||||
po.point_code AS struct_code,
|
||||
po.vehicle_code AS storagevehicle_code
|
||||
FROM
|
||||
sch_base_point po
|
||||
WHERE
|
||||
po.vehicle_code IS NOT NULL
|
||||
AND po.point_status = #{pointStatus}
|
||||
<if test="region_code != null and region_code != ''">
|
||||
AND po.region_code = #{region_code}
|
||||
</if>
|
||||
<if test="is_has_workder != null and is_has_workder != ''">
|
||||
AND po.is_has_workder = '0'
|
||||
</if>
|
||||
<if test="vehicles != null and vehicles.size() > 0">
|
||||
AND po.vehicle_code IN
|
||||
<foreach collection="vehicles" item="value" index="key" open="(" close=")" separator=",">
|
||||
#{value}
|
||||
</foreach>
|
||||
</if>
|
||||
)
|
||||
<if test="order_by != null and order_by != ''">
|
||||
ORDER BY ${order_by}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -56,6 +56,8 @@ public class BsrealStorattrServiceImpl extends ServiceImpl<BsrealStorattrMapper,
|
||||
@Resource
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<BsrealStorattrDto> queryAll(Map whereJson, PageQuery page) {
|
||||
|
||||
@@ -198,22 +200,21 @@ public class BsrealStorattrServiceImpl extends ServiceImpl<BsrealStorattrMapper,
|
||||
bsrealStorattrMapper.updateById(json.toJavaObject(BsrealStorattr.class));
|
||||
|
||||
//同时修改该stor_id仓库下仓位和库区的启用状态
|
||||
String stor_id = json.getString("stor_id");
|
||||
String stor_code = json.getString("stor_code");
|
||||
|
||||
iSectattrService.update(new LambdaUpdateWrapper<>(Sectattr.class)
|
||||
.set(Sectattr::getIs_used, is_used)
|
||||
.set(Sectattr::getUpdate_optid, currentUserId)
|
||||
.set(Sectattr::getUpdate_optname, nickName)
|
||||
.set(Sectattr::getUpdate_time, now)
|
||||
.eq(Sectattr::getStor_id, stor_id)
|
||||
.eq(Sectattr::getStor_code, stor_code)
|
||||
);
|
||||
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getIs_used, is_used)
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
.eq(Structattr::getStor_id, stor_id)
|
||||
.eq(Structattr::getStor_code, stor_code)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import cn.hutool.poi.excel.ExcelUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@@ -23,6 +24,7 @@ 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.mapper.MdMeMaterialbaseMapper;
|
||||
import org.nl.wms.ext.service.WmsToErpService;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosInService;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -51,6 +53,13 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMapper, MdMeMaterialbase> implements IMdMeMaterialbaseService {
|
||||
|
||||
|
||||
/**
|
||||
* 手持服务
|
||||
*/
|
||||
@Autowired
|
||||
private PdaIosInService pdaIosInService;
|
||||
|
||||
/**
|
||||
* wms调用erp服务
|
||||
*/
|
||||
@@ -58,19 +67,20 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
private WmsToErpService wmsToErpService;
|
||||
|
||||
/**
|
||||
* 仓库
|
||||
* 仓库服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
|
||||
/**
|
||||
* 点位
|
||||
* 点位服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* 载具
|
||||
* 载具服务
|
||||
*/
|
||||
@Autowired
|
||||
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
||||
@@ -81,13 +91,15 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
// 查询条件
|
||||
LambdaQueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<MdMeMaterialbase>().lambda();
|
||||
String search = MapUtil.getStr(whereJson, "search");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(search)) {
|
||||
queryWrapper.likeRight(MdMeMaterialbase::getMaterial_code, search)
|
||||
.or(item -> item.likeRight(MdMeMaterialbase::getMaterial_name, search));
|
||||
}
|
||||
String regionCode = MapUtil.getStr(whereJson, "region");
|
||||
if (ObjectUtil.isNotEmpty(regionCode)) {
|
||||
queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode);
|
||||
}
|
||||
queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time);
|
||||
|
||||
return this.baseMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()),
|
||||
queryWrapper
|
||||
);
|
||||
@@ -102,9 +114,11 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
.eq(MdMeMaterialbase::getMaterial_code, dto.getMaterial_code())
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(mdMeMaterialbase)) {
|
||||
throw new BadRequestException("当前物料编码已存在【"+dto.getMaterial_code()+"】");
|
||||
throw new BadRequestException("当前物料编码已存在【" + dto.getMaterial_code() + "】");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(dto.getMaterial_code())) {
|
||||
dto.setMaterial_code(org.nl.config.IdUtil.getStringId());
|
||||
}
|
||||
|
||||
// 新增
|
||||
dto.setMaterial_id(IdUtil.getStringId());
|
||||
dto.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
@@ -116,9 +130,9 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
this.save(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
//@Override
|
||||
@Transactional
|
||||
public void excelImport99(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
try {
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
|
||||
@@ -129,9 +143,9 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
List<Object> list = read.get(i);
|
||||
String m1 = String.valueOf(list.get(0));
|
||||
String m2 = String.valueOf(list.get(1));
|
||||
String m3 = ObjectUtil.isEmpty(list.get(2))?null:String.valueOf(list.get(2));
|
||||
String m4 = ObjectUtil.isEmpty(list.get(3))?null:String.valueOf(list.get(3));
|
||||
String m5 = ObjectUtil.isEmpty(list.get(4))?null:String.valueOf(list.get(4));
|
||||
String m3 = ObjectUtil.isEmpty(list.get(2)) ? null : String.valueOf(list.get(2));
|
||||
String m4 = ObjectUtil.isEmpty(list.get(3)) ? null : String.valueOf(list.get(3));
|
||||
String m5 = ObjectUtil.isEmpty(list.get(4)) ? null : String.valueOf(list.get(4));
|
||||
// 根据物料编码查询是否有相同物料编码的物料
|
||||
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
|
||||
new QueryWrapper<MdMeMaterialbase>().lambda()
|
||||
@@ -167,9 +181,90 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
/**
|
||||
* 仓库导入
|
||||
*/
|
||||
//@Override
|
||||
@Override
|
||||
@Transactional
|
||||
public void excelImport2(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
public void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
try {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
|
||||
List<List<Object>> read = excelReader.read();
|
||||
if (read.size() > 1) {
|
||||
for (int i = 1; i < read.size(); i++) {
|
||||
List<Object> list = read.get(i);
|
||||
if (ObjectUtil.isEmpty(list.get(0)) || ObjectUtil.isEmpty(list.get(2)) || ObjectUtil.isEmpty(list.get(3)) || ObjectUtil.isEmpty(list.get(4))) {
|
||||
if (ObjectUtil.isEmpty(list.get(1))) {
|
||||
throw new BadRequestException("第" + i + "行,物料编码不能为空,请检查。");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(list.get(4))) {
|
||||
throw new BadRequestException("第" + i + "行,库位编号不能为空,请检查。");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(list.get(5))) {
|
||||
throw new BadRequestException("第" + i + "行,托盘编号不能为空,请检查。");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(list.get(6))) {
|
||||
throw new BadRequestException("第" + i + "行,库存数量不能为空,请检查。");
|
||||
}
|
||||
}
|
||||
//物料编码
|
||||
String m1 = String.valueOf(list.get(1)).trim();
|
||||
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
|
||||
new QueryWrapper<MdMeMaterialbase>().lambda()
|
||||
.eq(MdMeMaterialbase::getMaterial_code, m1)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(mdMeMaterialbase)) {
|
||||
throw new BadRequestException("第" + i + "行,物料编码不存在【" + m1 + "】,请检查。");
|
||||
}
|
||||
//库位编号
|
||||
String m2 = String.valueOf(list.get(4)).trim();
|
||||
Structattr structattr = iStructattrService.getOne(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, m2)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(structattr)) {
|
||||
throw new BadRequestException("第" + i + "行,库位编号不存在【" + m1 + "】,请检查。");
|
||||
}
|
||||
//托盘编号
|
||||
String m3 = String.valueOf(list.get(5)).trim();
|
||||
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class)
|
||||
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, m3)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) {
|
||||
throw new BadRequestException("第" + i + "行,托盘编号不存在【" + m1 + "】,请检查。");
|
||||
}
|
||||
//物料数量
|
||||
Integer m4 = Integer.parseInt(String.valueOf(list.get(6)).trim());
|
||||
JSONObject whereJson = new JSONObject();
|
||||
whereJson.put("store_id", structattr.getStor_id());
|
||||
whereJson.put("material_id", mdMeMaterialbase.getMaterial_id());
|
||||
whereJson.put("material_code", mdMeMaterialbase.getMaterial_code());
|
||||
whereJson.put("pcsn", "");
|
||||
whereJson.put("qty", m4);
|
||||
whereJson.put("vehicle_code", mdPbStoragevehicleinfo.getStoragevehicle_code());
|
||||
whereJson.put("groupStatus", "02");
|
||||
whereJson.put("remark", "该库存通过仓库数据初始化进行仓库盘点,手动导入库存。");
|
||||
pdaIosInService.groupPlate(whereJson);
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getStoragevehicle_code, mdPbStoragevehicleinfo.getStoragevehicle_code())
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
.eq(Structattr::getStruct_id, structattr.getStruct_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new BadRequestException("导入失败" + ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 仓库导入
|
||||
*/
|
||||
@Transactional
|
||||
public void excelImport98(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
try {
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
|
||||
@@ -244,7 +339,6 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 线边库导入
|
||||
*/
|
||||
|
||||
@@ -80,7 +80,7 @@ public class SectattrServiceImpl extends ServiceImpl<SectattrMapper, Sectattr> i
|
||||
|
||||
Sectattr sectattr = sectattrMapper.selectOne(new LambdaQueryWrapper<>(Sectattr.class)
|
||||
.eq(Sectattr::getSect_id, dto.getSect_code())
|
||||
.eq(Sectattr::getStor_id, dto.getStor_id())
|
||||
.eq(Sectattr::getStor_code, dto.getStor_code())
|
||||
);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(sectattr)) {
|
||||
@@ -124,7 +124,7 @@ public class SectattrServiceImpl extends ServiceImpl<SectattrMapper, Sectattr> i
|
||||
|
||||
List<Sectattr> sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<Sectattr>()
|
||||
.eq(Sectattr::getSect_code,sect_code)
|
||||
.eq(Sectattr::getStor_id,dto.getStor_id())
|
||||
.eq(Sectattr::getStor_code,dto.getStor_code())
|
||||
);
|
||||
if (sectattrList.size() > 1) {
|
||||
throw new BadRequestException("存在相同仓库的库区编号");
|
||||
@@ -185,7 +185,7 @@ public class SectattrServiceImpl extends ServiceImpl<SectattrMapper, Sectattr> i
|
||||
|
||||
List<Sectattr> sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<>(Sectattr.class)
|
||||
.select(Sectattr::getSect_id,Sectattr::getSect_name)
|
||||
.eq(StrUtil.isNotEmpty(stor_jo.getStor_id()),Sectattr::getStor_id,stor_jo.getStor_id())
|
||||
.eq(StrUtil.isNotEmpty(stor_jo.getStor_id()),Sectattr::getStor_code,stor_jo.getStor_code())
|
||||
.eq(StrUtil.isNotEmpty(sect_type_attr),Sectattr::getSect_type_attr,sect_type_attr)
|
||||
.eq(Sectattr::getIs_delete,BaseDataEnum.IS_YES_NOT.code("否"))
|
||||
.eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
|
||||
@@ -139,7 +139,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
dto.setCreate_time(now);
|
||||
|
||||
Sectattr sectattr = iSectattrService.findById(dto.getSect_id());
|
||||
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findById(sectattr.getStor_id());
|
||||
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findByCode(sectattr.getStor_code());
|
||||
dto.setSect_code(sectattr.getSect_code());
|
||||
dto.setSect_name(sectattr.getSect_name());
|
||||
dto.setStor_id(bsrealStorattr.getStor_id());
|
||||
@@ -186,7 +186,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
dto.setUpdate_optid(currentUserId);
|
||||
dto.setUpdate_optname(nickName);
|
||||
Sectattr sectattr = iSectattrService.findById(dto.getSect_id());
|
||||
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findById(sectattr.getStor_id());
|
||||
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findByCode(sectattr.getStor_code());
|
||||
dto.setSect_code(sectattr.getSect_code());
|
||||
dto.setSect_name(sectattr.getSect_name());
|
||||
dto.setStor_id(bsrealStorattr.getStor_id());
|
||||
|
||||
@@ -27,6 +27,7 @@ public class NotifyUtil {
|
||||
String connectValue = getParam(sysParamService, isNeedConnect);
|
||||
if (IOSConstant.IS_DELETE_NO.equals(connectValue)) {
|
||||
log.info("未连接系统,跳过下发!");
|
||||
return null;
|
||||
}
|
||||
log.info("下发ACS任务开始下发,api:{}下发参数为:-------------------{}", api, param);
|
||||
String url = getParam(sysParamService, systemType) + api;
|
||||
|
||||
@@ -28,7 +28,7 @@ public class GateWayController {
|
||||
|
||||
@Resource
|
||||
private IGateWayService gateWayService;
|
||||
@PostMapping("/apply1")
|
||||
@PostMapping("/apply")
|
||||
@SaIgnore
|
||||
@Log("外层服务请求wms")
|
||||
public ResponseEntity<Object> apply(@RequestBody InteracteDto form) {
|
||||
|
||||
@@ -173,7 +173,7 @@ public class GateWayServiceImpl implements IGateWayService {
|
||||
status = TaskStatus.UNFINISHED;
|
||||
break;
|
||||
case EXECUTE_FAIL:
|
||||
status = TaskStatus.UNFINISHED;
|
||||
status = TaskStatus.CANCELED;
|
||||
break;
|
||||
case ISSUE:
|
||||
status = TaskStatus.ISSUED;
|
||||
|
||||
@@ -82,10 +82,10 @@ public class PdaIosInController {
|
||||
|
||||
|
||||
/**
|
||||
* 组盘获取物料列表
|
||||
* 出库管理组盘获取物料列表
|
||||
*/
|
||||
@PostMapping("/getMaterialList")
|
||||
@Log("获取物料列表")
|
||||
@Log("出库管理组盘获取物料列表")
|
||||
public ResponseEntity<TableDataInfo<MdMeMaterialbase>> getMaterialList(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaIosInService.getMaterialList(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -5,12 +5,16 @@ import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.vo.SelectItemVo;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -23,6 +27,8 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.nl.common.utils.ValidationUtil.assertNotBlankJson;
|
||||
@@ -36,6 +42,8 @@ import static org.nl.common.utils.ValidationUtil.assertNotBlankJson;
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/pda/iosOut")
|
||||
|
||||
|
||||
@SaIgnore
|
||||
@Slf4j
|
||||
public class PdaIosOutController {
|
||||
@@ -65,10 +73,10 @@ public class PdaIosOutController {
|
||||
|
||||
|
||||
/**
|
||||
* 线边库物料出库确认
|
||||
* 线边库仓物料点确认出库
|
||||
*/
|
||||
@PostMapping("/materialConfirm")
|
||||
@Log("线边库物料出库确认")
|
||||
@Log("线边库仓物料点确认出库")
|
||||
public ResponseEntity<Object> materialConfirm(@RequestBody JSONObject whereJson) {
|
||||
assertNotBlankJson(whereJson, "请求参数不能为空", "sect_id", "siteCode");
|
||||
RedissonUtils.lock(() -> {
|
||||
@@ -79,10 +87,10 @@ public class PdaIosOutController {
|
||||
|
||||
|
||||
/**
|
||||
* 线边库物料出库确认
|
||||
* 产线叫料出库点确认出库
|
||||
*/
|
||||
@PostMapping("/callMaterialConfirm")
|
||||
@Log("产线叫料出库点确认")
|
||||
@Log("产线叫料出库点确认出库")
|
||||
public ResponseEntity<Object> callMaterialConfirm(@RequestBody JSONObject whereJson) {
|
||||
assertNotBlankJson(whereJson, "请求参数不能为空", "region_code", "siteCode");
|
||||
RedissonUtils.lock(() -> {
|
||||
@@ -97,13 +105,28 @@ public class PdaIosOutController {
|
||||
@PostMapping("bindOrUnbind")
|
||||
@Log("绑定或解绑")
|
||||
public ResponseEntity<Object> bindOrUnbind(@RequestBody JSONObject whereJson) {
|
||||
assertNotBlankJson(whereJson, "请求参数不能为空", "siteCode", "shelfCode", "mode");
|
||||
assertNotBlankJson(whereJson, "请求参数不能为空", "mode");
|
||||
RedissonUtils.lock(() -> {
|
||||
if (StringUtils.isBlank( whereJson.getString("siteCode"))&&StringUtils.isBlank( whereJson.getString("shelfCode"))) {
|
||||
throw new BadRequestException("点位编号和载具编号需要扫其中一个,不能同时为空");
|
||||
}
|
||||
pdaIosOutService.bindOrUnbind(whereJson);
|
||||
}, "bindOrUnbind" + whereJson.getString("siteCode") + whereJson.getString("shelfCode"), null);
|
||||
return new ResponseEntity<>(PdaResponse.requestParamOk(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库管理组盘获取物料列表
|
||||
*/
|
||||
@PostMapping("/getMaterialList")
|
||||
@Log("出库管理组盘获取物料列表")
|
||||
public ResponseEntity<TableDataInfo<MdMeMaterialbase>> getMaterialList(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaIosOutService.getMaterialList(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 出库确认获取物料明细
|
||||
*/
|
||||
@@ -114,6 +137,20 @@ public class PdaIosOutController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取预装区可用放空载具空位
|
||||
*/
|
||||
@PostMapping("/getReturnPoint")
|
||||
@Log("出库确认获取物料明细")
|
||||
public ResponseEntity<Object> getReturnPoint(@RequestBody JSONObject whereJson) {
|
||||
List<SelectItemVo> selectList = new ArrayList<>();
|
||||
selectList.add(SelectItemVo.builder().text("B02").value("1").build());
|
||||
return new ResponseEntity<>(pdaIosOutService.getReturnPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 载具出库确认
|
||||
*/
|
||||
@@ -134,7 +171,7 @@ public class PdaIosOutController {
|
||||
@PostMapping("/update")
|
||||
@Log("获取升级地址")
|
||||
public ResponseEntity<Map> apkUrl() {
|
||||
Map of = MapOf.of("versionName", "1.0.1", "url", "http://172.18.51.221:8011/api/pda/download/app-release");
|
||||
Map of = MapOf.of("versionName", "1.0.1", "url", "http://172.18.51.221:8011/api/pda/iosOut/download/app-release");
|
||||
return new ResponseEntity<>(of, HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.vo.SelectItemVo;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -127,4 +126,17 @@ public interface PdaIosInService {
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse confirmReturnMaterial(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 不含单据入库业务
|
||||
* storagevehicle_code 载具号
|
||||
* stor_id 入库仓库id
|
||||
* sect_code 库区编号
|
||||
* material_code 物料编号
|
||||
* qty 数量
|
||||
* pcsn 批次
|
||||
* site_code 所在点位
|
||||
* config_code 任务配置类型
|
||||
*/
|
||||
void divStructNoBills(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package org.nl.wms.pda.ios_manage.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.vo.SelectItemVo;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 手持IOS 服务类
|
||||
@@ -46,6 +51,14 @@ public interface PdaIosOutService {
|
||||
PdaResponse getVehicleMaterial(JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 获取预装区可用放空空位
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
List<SelectItemVo> getReturnPoint(JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 产线叫料点确认
|
||||
*
|
||||
@@ -82,7 +95,12 @@ public interface PdaIosOutService {
|
||||
*/
|
||||
PdaResponse bindOrUnbind(JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 查询物料列表
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
TableDataInfo<MdMeMaterialbase> getMaterialList(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 载具出库确认
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.pda.ios_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@@ -10,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
@@ -17,10 +19,13 @@ import org.nl.common.domain.vo.SelectItemVo;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.*;
|
||||
import org.nl.wms.basedata_manage.service.dao.*;
|
||||
import org.nl.wms.basedata_manage.service.dto.MaterialQuery;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosInService;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.enums.StatusEnum;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
@@ -28,7 +33,6 @@ import org.nl.wms.sch_manage.service.ISchBaseRegionService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseRegion;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.BackInTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
@@ -46,6 +50,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS;
|
||||
|
||||
@@ -74,11 +79,18 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
@Autowired
|
||||
private IMdPbGroupplateService iMdPbGroupplateService;
|
||||
|
||||
/**
|
||||
* 基础物料服务
|
||||
*/
|
||||
@Autowired
|
||||
private MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
|
||||
|
||||
/**
|
||||
* 基础物料服务
|
||||
*/
|
||||
@Autowired
|
||||
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
|
||||
|
||||
@Resource
|
||||
private IStructattrService iStructattrService;
|
||||
/**
|
||||
@@ -93,6 +105,13 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
@Autowired
|
||||
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
||||
|
||||
/**
|
||||
* 手持出库服务
|
||||
*/
|
||||
@Autowired
|
||||
private PdaIosOutService pdaIosOutService;
|
||||
|
||||
|
||||
/**
|
||||
* 库区服务
|
||||
*/
|
||||
@@ -121,11 +140,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
*/
|
||||
@Autowired
|
||||
private IRawAssistIStorService iRawAssistIStorService;
|
||||
/**
|
||||
* 回库任务类
|
||||
*/
|
||||
@Autowired
|
||||
private BackInTask backInTask;
|
||||
|
||||
/**
|
||||
* 入库明细服务
|
||||
*/
|
||||
@@ -140,12 +155,11 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
private ISchBaseRegionService iSchBaseRegionService;
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public JSONObject groupPlate(JSONObject whereJson) {
|
||||
// 物料编码
|
||||
String materialId = whereJson.getString("material_id");
|
||||
//批次
|
||||
String pcsn = whereJson.getString("pcsn");
|
||||
// 数量
|
||||
String qty = whereJson.getString("qty");
|
||||
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code"));
|
||||
@@ -157,15 +171,14 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
}
|
||||
whereJson.put("material_id", materDao.getMaterial_id());
|
||||
whereJson.put("material_code", materDao.getMaterial_code());
|
||||
//批次
|
||||
String pcsn = StringUtils.isBlank(whereJson.getString("pcsn")) ? org.nl.common.utils.DateUtil.getDateTimeFormatyMd() : whereJson.getString("pcsn");
|
||||
//判断该载具是否存在组盘信息
|
||||
long statusCount = iMdPbGroupplateService.count(
|
||||
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, vehicleDao.getStoragevehicle_code())
|
||||
.lt(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("出库"))
|
||||
.lt(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("入库"))
|
||||
);
|
||||
if (statusCount > 0) {
|
||||
throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在组盘信息,请对数据进行核实!");
|
||||
}
|
||||
//判断该载具编号是否已经存在库内
|
||||
long count = iStructattrService.count(
|
||||
new LambdaQueryWrapper<Structattr>()
|
||||
@@ -174,6 +187,17 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
if (count > 0) {
|
||||
throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在库内,请对数据进行核实!");
|
||||
}
|
||||
if (ObjectUtils.isNotEmpty(groupPlateList)) {
|
||||
//出库重新组盘
|
||||
mdPbGroupplateMapper.update(null, new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
.set(GroupPlate::getQty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId())
|
||||
.set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.in(GroupPlate::getGroup_id, groupPlateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet())));
|
||||
}
|
||||
GroupPlate groupDao = GroupPlate.builder()
|
||||
.group_id(IdUtil.getStringId())
|
||||
.material_id(materDao.getMaterial_id())
|
||||
@@ -182,13 +206,20 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
.qty_unit_id(unitDao.getMeasure_unit_id())
|
||||
.qty_unit_name(unitDao.getUnit_name())
|
||||
.qty(new BigDecimal(qty))
|
||||
.status(GROUP_PLATE_STATUS.code("组盘"))
|
||||
.status(StringUtils.isBlank(whereJson.getString("groupStatus")) ? GROUP_PLATE_STATUS.code("组盘") : whereJson.getString("groupStatus"))
|
||||
.ext_code(whereJson.getString("ext_code"))
|
||||
.create_id(SecurityUtils.getCurrentUserId())
|
||||
.create_name(SecurityUtils.getCurrentNickName())
|
||||
.create_time(DateUtil.now())
|
||||
.remark(StringUtils.isBlank(whereJson.getString("remark")) ? "" : whereJson.getString("remark"))
|
||||
.build();
|
||||
iMdPbGroupplateService.save(groupDao);
|
||||
if (StringUtils.isNotBlank(whereJson.getString("siteCode"))) {
|
||||
whereJson.put("shelfCode", whereJson.getString("vehicle_code"));
|
||||
whereJson.put("mode", IOSEnum.BIND_OR_UNBIND.code("绑定"));
|
||||
//确定点位则绑定
|
||||
pdaIosOutService.bindOrUnbind(whereJson);
|
||||
}
|
||||
return whereJson;
|
||||
}
|
||||
|
||||
@@ -220,11 +251,21 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
PageQuery pageQuery = new PageQuery();
|
||||
pageQuery.setPage(whereJson.getInteger("page") - 1);
|
||||
pageQuery.setSize(whereJson.getInteger("size"));
|
||||
MaterialQuery materialQuery = new MaterialQuery();
|
||||
if (StringUtils.isNotBlank(whereJson.getString("search"))) {
|
||||
materialQuery.setSearch(whereJson.getString("search").trim().toUpperCase());
|
||||
// 查询条件
|
||||
LambdaQueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<MdMeMaterialbase>().lambda();
|
||||
String search = MapUtil.getStr(whereJson, "search");
|
||||
if (ObjectUtil.isNotEmpty(search)) {
|
||||
queryWrapper.likeRight(MdMeMaterialbase::getMaterial_code, search)
|
||||
.or(item -> item.likeRight(MdMeMaterialbase::getMaterial_name, search));
|
||||
}
|
||||
Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build());
|
||||
String regionCode = MapUtil.getStr(whereJson, "region");
|
||||
if (ObjectUtil.isNotEmpty(regionCode)) {
|
||||
queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode);
|
||||
}
|
||||
queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time);
|
||||
Page mapPage = mdMeMaterialbaseMapper.selectPage(new Page<>(pageQuery.getPage(), pageQuery.getSize()),
|
||||
queryWrapper
|
||||
);
|
||||
return PdaResponse.build(mapPage);
|
||||
}
|
||||
|
||||
@@ -306,10 +347,10 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
whereJson.put("site_code",schBasePoint.getPoint_code());
|
||||
whereJson.put("config_code", IOSConstant.BACK_IN_TASK);
|
||||
whereJson.put("vehicle_code", whereJson.getString("storagevehicle_code"));
|
||||
whereJson.put("stor_id", sectDao.getStor_id());
|
||||
whereJson.put("stor_code", sectDao.getStor_code());
|
||||
whereJson.put("sect_code", sectDao.getSect_code());
|
||||
//入库分配
|
||||
divStructNoBills(whereJson);
|
||||
SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@@ -324,15 +365,18 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
* pcsn 批次
|
||||
* site_code 所在点位
|
||||
* config_code 任务配置类型
|
||||
* is_auto_confirm 是否自动出库确认
|
||||
*/
|
||||
private void divStructNoBills(JSONObject whereJson) {
|
||||
@Override
|
||||
@Transactional
|
||||
public void divStructNoBills(JSONObject whereJson) {
|
||||
//校验载具
|
||||
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code"));
|
||||
if (ObjectUtil.isEmpty(vehicleDao)) {
|
||||
throw new BadRequestException("不存在该载具号信息,请检查");
|
||||
}
|
||||
//校验仓库
|
||||
BsrealStorattr storeDao = iSrealStorattrService.getById(whereJson.getString("stor_id"));
|
||||
BsrealStorattr storeDao = iSrealStorattrService.findByCode(whereJson.getString("stor_code"));
|
||||
if (ObjectUtil.isEmpty(storeDao)) {
|
||||
throw new BadRequestException("该库区未找到对应仓库信息,请检查");
|
||||
}
|
||||
@@ -354,12 +398,14 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
whereJson.put("point_code1", schBasePoint.getPoint_code());
|
||||
//确定终点
|
||||
whereJson.put("point_code2", attrDao.getStruct_code());
|
||||
whereJson.put("handle_status", BaseDataEnum.IS_YES_NOT.code("否"));
|
||||
//创建任务
|
||||
String taskId = applyTaskMap.get(whereJson.getString("config_code")).create(whereJson);
|
||||
// 更新起点绑定id
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code())
|
||||
);
|
||||
// 更新终点锁定状态
|
||||
@@ -378,7 +424,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
@Transactional
|
||||
public PdaResponse confirmIn(JSONObject whereJson) {
|
||||
Sectattr sectDao = updateIvtUtils.checkVehicleType(whereJson.getString("sect_id"),whereJson.getString("vehicle_code"));
|
||||
whereJson.put("stor_id", sectDao.getStor_id());
|
||||
whereJson.put("stor_code", sectDao.getStor_code());
|
||||
whereJson.put("sect_code", sectDao.getSect_code());
|
||||
//物料组盘入库
|
||||
if (StringUtils.isBlank(whereJson.getString("is_empty_vehicle"))) {
|
||||
@@ -392,14 +438,31 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
// 预组织出入库单据实体
|
||||
Map<String, Object> jsonMst = organizeInsertData(whereJson);
|
||||
// 调用服务新增出入库单
|
||||
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst);
|
||||
String iostorinvId = iRawAssistIStorService.insertDtl(jsonMst);
|
||||
// 预组织出入库单据明细的分配数据
|
||||
whereJson.put("iostorinv_id", iostorinv_id);
|
||||
whereJson.put("iostorinv_id", iostorinvId);
|
||||
Map<String, Object> jsonDtl = organizeDivData(whereJson);
|
||||
// 调用分配,默认自动分配库位
|
||||
iRawAssistIStorService.divStruct(new JSONObject(jsonDtl));
|
||||
// 下发任务
|
||||
sendTask(whereJson);
|
||||
Map<String, Object> taskJson = new HashMap<>();
|
||||
taskJson.put("point_code", whereJson.getString("point_code"));
|
||||
// 组织明细数据
|
||||
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
|
||||
new QueryWrapper<IOStorInvDtl>().lambda()
|
||||
.eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
);
|
||||
// 查找分配明细
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("iostorinvdtl_id", dtlDao.getIostorinvdtl_id());
|
||||
List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
|
||||
// 类型转换
|
||||
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
|
||||
disDtl.forEach(item -> {
|
||||
tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
|
||||
});
|
||||
taskJson.put("tableMater", tableMater);
|
||||
iRawAssistIStorService.divPoint(taskJson);
|
||||
//更新组盘表状态
|
||||
mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
|
||||
@@ -408,16 +471,15 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
} else {
|
||||
//空载具入库
|
||||
whereJson.put("qty", 1);
|
||||
whereJson.put("pcsn", whereJson.getString("material_id"));
|
||||
String materialCode = "1".equals(whereJson.getString("material_id")) ? StatusEnum.VEHICLE_TYPE.code("空托盘") : "2".equals(whereJson.getString("material_id")) ? StatusEnum.VEHICLE_TYPE.code("空料箱") : StatusEnum.VEHICLE_TYPE.code("空货架");
|
||||
whereJson.put("material_id", materialCode);
|
||||
//组盘
|
||||
groupPlate(whereJson);
|
||||
// 生成空载具入库任务
|
||||
SpringContextHolder.getBean(PdaIosInServiceImpl.class).groupPlate(whereJson);
|
||||
//生成空载具入库任务
|
||||
whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK);
|
||||
whereJson.put("storagevehicle_code", whereJson.getString("vehicle_code"));
|
||||
//入库分配
|
||||
divStructNoBills(whereJson);
|
||||
SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
@@ -489,13 +551,13 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
// 查询库区
|
||||
Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id"));
|
||||
// 查询仓库
|
||||
BsrealStorattr storeDao = iSrealStorattrService.getById(sectDao.getStor_id());
|
||||
BsrealStorattr storeDao = iSrealStorattrService.findByCode(sectDao.getStor_code());
|
||||
// 组织主数据
|
||||
Map<String, Object> jsonMst = new HashMap<>();
|
||||
jsonMst.put("checked", true);
|
||||
jsonMst.put("sect_id", sectDao.getSect_id());
|
||||
jsonMst.put("stor_id", sectDao.getStor_id());
|
||||
jsonMst.put("sect_code", sectDao.getSect_code());
|
||||
jsonMst.put("stor_id", storeDao.getStor_id());
|
||||
jsonMst.put("stor_code", storeDao.getStor_code());
|
||||
// 组织明细数据
|
||||
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
|
||||
@@ -516,37 +578,6 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
return jsonMst;
|
||||
}
|
||||
|
||||
/**
|
||||
* 下发任务
|
||||
* @param whereJson {
|
||||
* storagevehicle_code:载具编码
|
||||
* point_code:点位编码
|
||||
* sect_code:库区
|
||||
* iostorinv_id: id
|
||||
* }
|
||||
*/
|
||||
private void sendTask(JSONObject whereJson) {
|
||||
// 组织主数据
|
||||
Map<String, Object> jsonMst = new HashMap<>();
|
||||
jsonMst.put("point_code", whereJson.getString("point_code"));
|
||||
// 组织明细数据
|
||||
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
|
||||
new QueryWrapper<IOStorInvDtl>().lambda()
|
||||
.eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
);
|
||||
// 查找分配明细
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id());
|
||||
List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
|
||||
// 类型转换
|
||||
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
|
||||
disDtl.forEach(item -> {
|
||||
tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
|
||||
});
|
||||
jsonMst.put("tableMater", tableMater);
|
||||
|
||||
iRawAssistIStorService.divPoint(jsonMst);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
package org.nl.wms.pda.ios_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.domain.vo.SelectItemVo;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
@@ -16,24 +22,24 @@ import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
|
||||
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.basedata_manage.service.ISectattrService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.*;
|
||||
import org.nl.wms.basedata_manage.service.dao.*;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
|
||||
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosInService;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.enums.StatusEnum;
|
||||
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.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
|
||||
@@ -42,17 +48,13 @@ import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvMapper;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
|
||||
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS;
|
||||
@@ -79,7 +81,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
*/
|
||||
@Autowired
|
||||
private ISectattrService iSectattrService;
|
||||
|
||||
/**
|
||||
* 基础物料服务
|
||||
*/
|
||||
@Autowired
|
||||
private MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
|
||||
/**
|
||||
* 出入库单主表
|
||||
*/
|
||||
@@ -90,7 +96,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
*/
|
||||
@Autowired
|
||||
private IBsrealStorattrService iSrealStorattrService;
|
||||
|
||||
/**
|
||||
* 载具服务
|
||||
*/
|
||||
@Autowired
|
||||
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
||||
/**
|
||||
* 基础物料服务
|
||||
*/
|
||||
@@ -101,6 +111,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
*/
|
||||
@Autowired
|
||||
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
|
||||
/*
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
@@ -127,29 +142,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
|
||||
/**
|
||||
* 更新库存服务
|
||||
* 入库服务
|
||||
*/
|
||||
@Autowired
|
||||
private UpdateIvtUtils updateIvtUtils;
|
||||
|
||||
/**
|
||||
* 出库任务类
|
||||
*/
|
||||
@Autowired
|
||||
private StOutTask stOutTask;
|
||||
|
||||
/**
|
||||
* 手持任务
|
||||
*/
|
||||
@Autowired
|
||||
private PdaPointTask pdaPointTask;
|
||||
|
||||
|
||||
/**
|
||||
* 入库服务服务
|
||||
*/
|
||||
@Autowired
|
||||
private IRawAssistIStorService iRawAssistIStorService;
|
||||
private PdaIosInService pdaIosInServiceImpl;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -173,8 +169,25 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
MapOf.of("search", whereJson.getString("search"),
|
||||
"region_code", whereJson.getString("region_code"),
|
||||
"status", GROUP_PLATE_STATUS.code("入库"),
|
||||
"is_has_workder", "false",
|
||||
"order_by", "gro.create_time asc"));
|
||||
"pointStatus", "1"));
|
||||
}
|
||||
//显示所有货架的点位
|
||||
if (StringUtils.isBlank(whereJson.getString("search"))) {
|
||||
list = list.stream()
|
||||
.collect(Collectors.groupingBy(StructattrVechielDto::getStruct_code))
|
||||
.values()
|
||||
.stream()
|
||||
.map(r -> r.stream()
|
||||
.filter(f -> !StatusEnum.VEHICLE_TYPE.code("空货架").equals(f.getMaterial_code()))
|
||||
.findFirst()
|
||||
.orElse(r.get(0)))
|
||||
.sorted(Comparator.comparing(StructattrVechielDto::getStruct_code))
|
||||
.collect(Collectors.toList());
|
||||
} else {
|
||||
//只显示库存
|
||||
list = list.stream().filter(f -> !StatusEnum.VEHICLE_TYPE.code("空货架").equals(f.getMaterial_code()))
|
||||
.sorted(Comparator.comparing(StructattrVechielDto::getStruct_code))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
return PdaResponse.requestParamOk(list);
|
||||
}
|
||||
@@ -197,6 +210,25 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<SelectItemVo> getReturnPoint(JSONObject whereJson) {
|
||||
List<SelectItemVo> selectList = new ArrayList<>();
|
||||
List<SchBasePoint> cxPointLists = iSchBasePointService.checkEndPointTask(
|
||||
StatusEnum.REGION_INFO.code("预装线货架区"),
|
||||
IOSEnum.LOCK_TYPE.code("未锁定"),
|
||||
StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false);
|
||||
//可放空料架位置
|
||||
cxPointLists = cxPointLists.stream().filter(r -> (StatusEnum.VEHICLE_TYPE.code("空载具").equals(r.getCan_vehicle_type()))).collect(Collectors.toList());
|
||||
if (ObjectUtils.isEmpty(cxPointLists)) {
|
||||
throw new BadRequestException("暂无可用放置空架的点位,请稍后再试。");
|
||||
}
|
||||
cxPointLists.forEach(r ->
|
||||
selectList.add(SelectItemVo.builder().text(r.getPoint_name()).value(r.getPoint_code()).build())
|
||||
);
|
||||
return selectList;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse materialConfirm(JSONObject whereJson) {
|
||||
@@ -223,13 +255,15 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
iStructattrService.updateStatusByCode("0", lock_map);
|
||||
//创建任务
|
||||
JSONObject taskForm = new JSONObject();
|
||||
taskForm.put("task_type", "STOutTask");
|
||||
taskForm.put("task_type", IOSConstant.ST_OUT_TASK);
|
||||
taskForm.put("config_code", IOSConstant.ST_OUT_TASK);
|
||||
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
taskForm.put("point_code1", json.getString("struct_code"));
|
||||
taskForm.put("point_code2", whereJson.getString("siteCode"));
|
||||
taskForm.put("vehicle_code", json.getString("storagevehicle_code"));
|
||||
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
|
||||
String taskId = stOutTask.create(taskForm);
|
||||
taskForm.put("is_auto_confirm",(BaseDataEnum.IS_YES_NOT.code("是")));
|
||||
taskForm.put("handle_status",(BaseDataEnum.IS_YES_NOT.code("是")));
|
||||
String taskId = applyTaskMap.get(IOSConstant.ST_OUT_TASK).create(whereJson);
|
||||
//更新任务id
|
||||
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<IOStorInvDis>()
|
||||
.set(IOStorInvDis::getTask_id, taskId)
|
||||
@@ -251,6 +285,9 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||
throw new BadRequestException("未找到目标:" + whereJson.getString("siteCode") + "的点位信息,请检查");
|
||||
}
|
||||
if (StringUtils.isNotBlank(schBasePoint.getVehicle_code()) || IOSEnum.POINT_STATUS.code("有货").equals(schBasePoint.getPoint_status())) {
|
||||
throw new BadRequestException("该点位有货架在2分钟之后进行出库确认,请稍等");
|
||||
}
|
||||
//锁定货位
|
||||
// JSONObject lock_map = new JSONObject();
|
||||
// lock_map.put("struct_code", json.getString("struct_code"));
|
||||
@@ -264,8 +301,8 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
taskForm.put("point_code1", json.getString("struct_code"));
|
||||
taskForm.put("point_code2", whereJson.getString("siteCode"));
|
||||
taskForm.put("vehicle_code", json.getString("storagevehicle_code"));
|
||||
PdaPointTask pdaPointTask = SpringContextHolder.getBean("PdaPointTask");
|
||||
pdaPointTask.create(taskForm);
|
||||
taskForm.put("is_auto_confirm",(BaseDataEnum.IS_YES_NOT.code("是")));
|
||||
String taskCode = applyTaskMap.get(IOSConstant.PDA_POINT_TASK).create(taskForm);
|
||||
GroupPlate plateDao = mdPbGroupplateMapper.selectOne(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, json.getString("storagevehicle_code")).eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
@@ -274,6 +311,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
.set(GroupPlate::getFrozen_qty, plateDao.getQty())
|
||||
.eq(GroupPlate::getGroup_id, json.getString("group_id"))
|
||||
);
|
||||
//更新任务标识
|
||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, whereJson.getString("siteCode"))
|
||||
.set(SchBasePoint::getIng_task_code, taskCode));
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@@ -306,7 +347,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
if (ObjectUtil.isEmpty(sectattr)) {
|
||||
throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!");
|
||||
}
|
||||
BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id());
|
||||
BsrealStorattr storeDao = iSrealStorattrService.findByCode(sectattr.getStor_code());
|
||||
whereJson.put("stor_code", storeDao.getStor_code());
|
||||
whereJson.put("sect_code", sectattr.getSect_code());
|
||||
StrategyStructParam strategyStructParam = StrategyStructParam.builder()
|
||||
@@ -330,6 +371,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
taskForm.put("point_code1", r.getStruct_code());
|
||||
taskForm.put("point_code2", whereJson.getString("siteCode"));
|
||||
taskForm.put("vehicle_code", r.getStoragevehicle_code());
|
||||
taskForm.put("handle_status", BaseDataEnum.IS_YES_NOT.code("否"));
|
||||
applyTaskMap.get(IOSConstant.VEHICLE_OUT_TASK).create(taskForm);
|
||||
});
|
||||
//更新组盘记录表
|
||||
@@ -431,36 +473,90 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
return disId;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TableDataInfo<MdMeMaterialbase> getMaterialList(JSONObject whereJson) {
|
||||
PageQuery pageQuery = new PageQuery();
|
||||
pageQuery.setPage(whereJson.getInteger("page") - 1);
|
||||
pageQuery.setSize(100);
|
||||
whereJson.put("region", "YZHJ");
|
||||
// 查询条件
|
||||
LambdaQueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<MdMeMaterialbase>().lambda();
|
||||
String search = MapUtil.getStr(whereJson, "search");
|
||||
if (ObjectUtil.isNotEmpty(search)) {
|
||||
queryWrapper.likeRight(MdMeMaterialbase::getMaterial_code, search)
|
||||
.or(item -> item.likeRight(MdMeMaterialbase::getMaterial_name, search));
|
||||
}
|
||||
String regionCode = MapUtil.getStr(whereJson, "region");
|
||||
if (ObjectUtil.isNotEmpty(regionCode)) {
|
||||
queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode);
|
||||
}
|
||||
queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time);
|
||||
Page mapPage = mdMeMaterialbaseMapper.selectPage(new Page<>(pageQuery.getPage(), pageQuery.getSize()),
|
||||
queryWrapper
|
||||
);
|
||||
return PdaResponse.build(mapPage);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse bindOrUnbind(JSONObject whereJson) {
|
||||
String siteCode = whereJson.getString("siteCode");
|
||||
String shelfCode = whereJson.getString("shelfCode");
|
||||
String mode = whereJson.getString("mode");
|
||||
// 校验站点是否存在、是否可用
|
||||
SchBasePoint sitePoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, siteCode)
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
);
|
||||
if (sitePoint == null) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
//校验站点是否有在途输送任务
|
||||
List<SchBasePoint> activeTasks = iSchBasePointService.checkEndPointTask(
|
||||
null, null, StatusEnum.SORT_TYPE.code("升序"), null, siteCode, null, false
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(activeTasks)) {
|
||||
throw new BadRequestException("该货架正在执行输送任务,状态为锁定,请等任务完成再做绑定或解绑!");
|
||||
SchBasePoint sitePoint;
|
||||
if (IOSEnum.BIND_OR_UNBIND.code("绑定").equals(mode)) {
|
||||
// 校验站点是否存在、是否可用
|
||||
sitePoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, siteCode)
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
);
|
||||
if (sitePoint == null) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
Set<String> pointIds = new HashSet<>();
|
||||
pointIds.add(siteCode);
|
||||
//校验是否有任务
|
||||
List<SchBaseTask> activeTasks = iSchBaseTaskService.getTaskList(null, pointIds, null, null);
|
||||
if (CollectionUtils.isNotEmpty(activeTasks)) {
|
||||
throw new BadRequestException("检查到运输到这个点位的任务,任务号为:" + activeTasks.get(0).getTask_code() +
|
||||
",起点为:" + activeTasks.get(0).getPoint_code1() + ",终点为:" + activeTasks.get(0).getPoint_code2() +
|
||||
",载具号为:" + activeTasks.get(0).getVehicle_code() + ",请稍后操作,或在WMS任务列表中检查。");
|
||||
}
|
||||
} else {
|
||||
if (StringUtils.isNotBlank(shelfCode)) {
|
||||
// 校验站点是否存在、是否可用
|
||||
sitePoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getVehicle_code, shelfCode)
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
);
|
||||
if (sitePoint == null) {
|
||||
//无需解绑
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
siteCode = sitePoint.getPoint_code();
|
||||
} else {
|
||||
// 校验站点是否存在、是否可用
|
||||
sitePoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, siteCode)
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
);
|
||||
}
|
||||
}
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<>();
|
||||
if (IOSEnum.BIND_OR_UNBIND.code("绑定").equals(mode)) {
|
||||
doBind(sitePoint, siteCode, shelfCode, wrapper);
|
||||
checkGroupPlateStatus(shelfCode, sitePoint.getRegion_code());
|
||||
doBind(siteCode, shelfCode, wrapper);
|
||||
} else {
|
||||
doUnbind(sitePoint, siteCode, wrapper);
|
||||
}
|
||||
wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("否"))
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName());
|
||||
iSchBasePointService.update(wrapper);
|
||||
return PdaResponse.requestOk();
|
||||
@@ -469,23 +565,19 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
/**
|
||||
* 绑定
|
||||
*/
|
||||
private void doBind(SchBasePoint sitePoint, String siteCode, String shelfCode, LambdaUpdateWrapper<SchBasePoint> wrapper) {
|
||||
// 校验站点是否已绑定
|
||||
if (StringUtils.isNotBlank(sitePoint.getVehicle_code())) {
|
||||
if (sitePoint.getVehicle_code().equals(shelfCode)) {
|
||||
checkGroupPlateStatus(shelfCode);
|
||||
return;
|
||||
}
|
||||
throw new BadRequestException("当前站点已绑定货架:" + sitePoint.getVehicle_code() + ",请先解绑!");
|
||||
}
|
||||
// 校验货架是否已绑定在其他站点
|
||||
private void doBind(String siteCode, String shelfCode, LambdaUpdateWrapper<SchBasePoint> wrapper) {
|
||||
SchBasePoint boundPoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, shelfCode)
|
||||
);
|
||||
if (boundPoint != null) {
|
||||
throw new BadRequestException("当前货架:" + shelfCode + "已绑定在站点:" + boundPoint.getPoint_code() + ",请先解绑。");
|
||||
//解绑
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper1 = new LambdaUpdateWrapper<>();
|
||||
wrapper1.eq(SchBasePoint::getPoint_code, boundPoint.getPoint_code())
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"));
|
||||
iSchBasePointService.update(wrapper1);
|
||||
//throw new BadRequestException("当前货架:" + shelfCode + "已绑定在站点:" + boundPoint.getPoint_code() + ",请扫描站点:" + boundPoint.getPoint_code() + "进行解绑,再绑定。");
|
||||
}
|
||||
checkGroupPlateStatus(shelfCode);
|
||||
wrapper.eq(SchBasePoint::getPoint_code, siteCode)
|
||||
.set(SchBasePoint::getVehicle_code, shelfCode)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"));
|
||||
@@ -494,17 +586,21 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
/**
|
||||
* 校验组盘状态
|
||||
*/
|
||||
private void checkGroupPlateStatus(String shelfCode) {
|
||||
private void checkGroupPlateStatus(String shelfCode, String regionCode) {
|
||||
List<GroupPlate> plates = mdPbGroupplateMapper.selectList(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, shelfCode)
|
||||
.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
);
|
||||
if (CollectionUtils.isNotEmpty(plates)) {
|
||||
LambdaUpdateWrapper<GroupPlate> update = new LambdaUpdateWrapper<>();
|
||||
Set<String> plateCodes = plates.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet());
|
||||
mdPbGroupplateMapper.update(null, new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO).in(GroupPlate::getGroup_id, plateCodes));
|
||||
if (!regionCode.equals(StatusEnum.REGION_INFO.code("商用线5号线"))) {
|
||||
update.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO);
|
||||
}
|
||||
update.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
.in(GroupPlate::getGroup_id, plateCodes);
|
||||
mdPbGroupplateMapper.update(null, update);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -534,18 +630,88 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
/**
|
||||
* 1.库存载具绑定到出库点位
|
||||
* 2.更新组盘记录为出库
|
||||
* 3.type="1",出库确认;type="2",强制确认。
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse outStorageConfirm(JSONObject whereJson) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
//任务校验
|
||||
SchBaseTask task = iSchBaseTaskService.getOne(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getVehicle_code, whereJson.getString("storagevehicle_code")).lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));
|
||||
if (ObjectUtil.isNotEmpty(task)) {
|
||||
throw new BadRequestException("该货架:" + whereJson.getString("storagevehicle_code") + "的运输任务,任务号为:" + task.getTask_code() + ",尚未完成,请等待任务完成,再取货确认。");
|
||||
}
|
||||
//获取终点
|
||||
SchBasePoint pointDao = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code")));
|
||||
if (ObjectUtil.isEmpty(pointDao)) {
|
||||
throw new BadRequestException("未找到载具所在的点位信息,请检查");
|
||||
}
|
||||
//预装区与商用5号线点位需自动回空
|
||||
if (pointDao.getRegion_code().equals(StatusEnum.REGION_INFO.code("商用线5号线"))) {
|
||||
//物料组盘信息出库
|
||||
whereJson.put("type", "2");
|
||||
//处理组盘信息
|
||||
handleGroupPlate(whereJson);
|
||||
if (StringUtils.isNotBlank(pointDao.getIng_task_code())) {
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getByCode(pointDao.getIng_task_code());
|
||||
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, schBaseTask.getPoint_code1()));
|
||||
if (schBasePoint.getRegion_code().equals(StatusEnum.REGION_INFO.code("预装线货架区")) && StringUtils.isNotBlank(whereJson.getString("isAutoReturn"))) {
|
||||
String pointCode1 = whereJson.getString("startCode");
|
||||
String pointCode2 = whereJson.getString("siteCode");
|
||||
//自动获取终点回空载具
|
||||
if (BaseDataEnum.IS_YES_NOT.code("是").equals(whereJson.getString("isAutoReturn"))) {
|
||||
if (StringUtils.isBlank(pointCode1)) {
|
||||
SchBasePoint startPoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code"))
|
||||
);
|
||||
pointCode1 = startPoint.getPoint_code();
|
||||
}
|
||||
List<SchBasePoint> cxPointLists = iSchBasePointService.checkEndPointTask(
|
||||
StatusEnum.REGION_INFO.code("预装线货架区"),
|
||||
IOSEnum.LOCK_TYPE.code("未锁定"),
|
||||
StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false);
|
||||
//可放空料架位置
|
||||
cxPointLists = cxPointLists.stream().filter(r -> (StatusEnum.VEHICLE_TYPE.code("空载具").equals(r.getCan_vehicle_type()))).collect(Collectors.toList());
|
||||
if (ObjectUtils.isEmpty(cxPointLists)) {
|
||||
throw new BadRequestException("暂无可用放置空架的点位,请稍后再试。");
|
||||
}
|
||||
pointCode2 = cxPointLists.get(0).getPoint_code();
|
||||
}
|
||||
whereJson.put("pointCode", pointCode1);
|
||||
whereJson.put("siteCode", pointCode2);
|
||||
//生成任务
|
||||
SpringContextHolder.getBean(PdaIosOutServiceImpl.class).transferConfirm(whereJson);
|
||||
} else {
|
||||
//线边仓
|
||||
whereJson.put("qty", 1);
|
||||
String materialCode = StatusEnum.VEHICLE_TYPE.code("空货架");
|
||||
whereJson.put("material_id", materialCode);
|
||||
//组盘
|
||||
pdaIosInServiceImpl.groupPlate(whereJson);
|
||||
// 生成空载具入库任务
|
||||
whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK);
|
||||
whereJson.put("storagevehicle_code", whereJson.getString("storagevehicle_code"));
|
||||
//入库分配
|
||||
pdaIosInServiceImpl.divStructNoBills(whereJson);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
handleGroupPlate(whereJson);
|
||||
//载具绑定到出库点
|
||||
iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class)
|
||||
.set(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code"))
|
||||
.set(SchBasePoint::getIos_id, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.eq(SchBasePoint::getPoint_code, pointDao.getPoint_code())
|
||||
);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
|
||||
private void handleGroupPlate(JSONObject whereJson) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
GroupPlate groupPlate = mdPbGroupplateMapper.selectById(whereJson.getString("group_id"));
|
||||
if (ObjectUtil.isEmpty(groupPlate)) {
|
||||
throw new BadRequestException("未找到该载具的组盘信息,请检查");
|
||||
@@ -573,52 +739,133 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
.eq(GroupPlate::getGroup_id, whereJson.getString("group_id"));
|
||||
//更新组盘记录表
|
||||
mdPbGroupplateMapper.update(new GroupPlate(), updateWrapper);
|
||||
//库存绑定到出库点
|
||||
iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class)
|
||||
.set(SchBasePoint::getVehicle_code, groupPlate.getStoragevehicle_code())
|
||||
.set(SchBasePoint::getIos_id, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.eq(SchBasePoint::getPoint_code, pointDao.getPoint_code())
|
||||
);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 目标站点或区域传值二选一
|
||||
* 载具编号:"storagevehicle_code":"T0002",
|
||||
* 点位编号:"siteCode":"",
|
||||
* 区域编号:"region_code":"IN01"
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse transferConfirm(JSONObject whereJson) {
|
||||
if (StringUtils.isBlank(whereJson.getString("region_code")) && StringUtils.isBlank(whereJson.getString("siteCode"))) {
|
||||
String regionCode = whereJson.getString("region_code");
|
||||
//起点
|
||||
String pointCode1 = whereJson.getString("pointCode");
|
||||
//终点
|
||||
String pointCode2 = whereJson.getString("siteCode");
|
||||
String vehicleCode = whereJson.getString("storagevehicle_code");
|
||||
if (StringUtils.isBlank(regionCode) && StringUtils.isBlank(pointCode2)) {
|
||||
throw new BadRequestException("请选择目标站点或区域!");
|
||||
}
|
||||
String pointCode = whereJson.getString("siteCode");
|
||||
if (StringUtils.isBlank(pointCode)) {
|
||||
List<SchBasePoint> pointList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getRegion_code, whereJson.getString("region_code"))
|
||||
.eq(SchBasePoint::getIs_used, 1)
|
||||
.isNull(SchBasePoint::getVehicle_code)
|
||||
.orderByAsc(SchBasePoint::getIn_order_seq));
|
||||
if (CollectionUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("该区域无可用空余点位!");
|
||||
}
|
||||
pointCode = pointList.get(0).getPoint_code();
|
||||
//校验载具
|
||||
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(vehicleCode);
|
||||
if (ObjectUtil.isEmpty(vehicleDao)) {
|
||||
throw new BadRequestException("不存在该载具号信息,请检查");
|
||||
}
|
||||
//确定起点
|
||||
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code")));
|
||||
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||
throw new BadRequestException("未找到载具所在的点位信息,请检查");
|
||||
if (StringUtils.isNotBlank(pointCode2)) {
|
||||
SchBasePoint schBasePoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, pointCode2).eq(SchBasePoint::getIs_used, true)
|
||||
);
|
||||
if (schBasePoint == null) {
|
||||
throw new BadRequestException("输入终点点位有误或被禁用,请检查是否手动输入输错。");
|
||||
}
|
||||
}
|
||||
// 确定起点
|
||||
String startPointCode;
|
||||
SchBasePoint schBasePoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getVehicle_code, vehicleCode)
|
||||
);
|
||||
if (StringUtils.isBlank(pointCode1)) {
|
||||
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||
throw new BadRequestException("未找到载具所在的点位信息,请检查");
|
||||
}
|
||||
startPointCode = schBasePoint.getPoint_code();
|
||||
} else {
|
||||
|
||||
SchBasePoint point = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, pointCode1).eq(SchBasePoint::getIs_used, true));
|
||||
if (point == null) {
|
||||
throw new BadRequestException("起点点位:" + pointCode1 + "不存在,请检查。");
|
||||
}
|
||||
//自动解绑/绑定
|
||||
if (schBasePoint != null) {
|
||||
iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class)
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
.eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code())
|
||||
);
|
||||
}
|
||||
iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class)
|
||||
.set(SchBasePoint::getVehicle_code, vehicleCode)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
|
||||
.eq(SchBasePoint::getPoint_code, pointCode1)
|
||||
);
|
||||
startPointCode = pointCode1;
|
||||
}
|
||||
// 确定终点
|
||||
String endPointCode = pointCode2;
|
||||
if (StringUtils.isBlank(endPointCode)) {
|
||||
List<SchBasePoint> pointList;
|
||||
//特殊分配规则
|
||||
if (regionCode.equals(StatusEnum.REGION_INFO.code("预装线货架区"))) {
|
||||
pointList = iSchBasePointService.checkEndPointTask(
|
||||
StatusEnum.REGION_INFO.code("预装线货架区"),
|
||||
IOSEnum.LOCK_TYPE.code("未锁定"),
|
||||
StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false);
|
||||
//可放空料架位置
|
||||
pointList = pointList.stream().filter(r -> (StatusEnum.VEHICLE_TYPE.code("空载具").equals(r.getCan_vehicle_type()))).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(pointList)) {
|
||||
//入线边仓
|
||||
whereJson.put("stor_code",StatusEnum.STORE_INFO.code("料架线边库"));
|
||||
whereJson.put("sect_code","XB01");
|
||||
whereJson.put("material_id", StatusEnum.VEHICLE_TYPE.code("空货架"));
|
||||
whereJson.put("qty", 1);
|
||||
whereJson.put("site_code",startPointCode);
|
||||
whereJson.put("vehicle_code",vehicleCode);
|
||||
whereJson.put("is_auto_confirm",startPointCode);
|
||||
//组盘
|
||||
SpringContextHolder.getBean(PdaIosInServiceImpl.class).groupPlate(whereJson);
|
||||
//生成空载具入库任务
|
||||
whereJson.put("config_code", IOSConstant.VEHICLE_IN_TASK);
|
||||
//入库分配
|
||||
SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
} else {
|
||||
pointList = iSchBasePointService.checkEndPointTask(
|
||||
regionCode,
|
||||
IOSEnum.LOCK_TYPE.code("未锁定"),
|
||||
StatusEnum.SORT_TYPE.code("升序"),
|
||||
null, null, "true", false
|
||||
);
|
||||
if (CollectionUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("暂无可用空位,请稍后再试。");
|
||||
}
|
||||
}
|
||||
endPointCode = pointList.get(0).getPoint_code();
|
||||
}
|
||||
// 生成转运任务
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_type", IOSConstant.PDA_POINT_TASK);
|
||||
task.put("config_code", IOSConstant.PDA_POINT_TASK);
|
||||
task.put("point_code1", schBasePoint.getPoint_code());
|
||||
task.put("point_code2", pointCode);
|
||||
task.put("vehicle_code", whereJson.getString("storagevehicle_code"));
|
||||
pdaPointTask.create(task);
|
||||
// 更新起点绑定id
|
||||
task.put("point_code1", startPointCode);
|
||||
task.put("point_code2", endPointCode);
|
||||
task.put("vehicle_code", vehicleCode);
|
||||
// 创建任务
|
||||
applyTaskMap.get(IOSConstant.PDA_POINT_TASK).create(task);
|
||||
// 清空起点任务标识
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code())
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.eq(SchBasePoint::getPoint_code, startPointCode)
|
||||
);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@@ -40,7 +40,6 @@ public class PdaSchPointController {
|
||||
}
|
||||
|
||||
@PostMapping("/binding")
|
||||
@Log("解绑")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> binding(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaSchPointService.binding(whereJson), HttpStatus.OK);
|
||||
|
||||
@@ -25,7 +25,6 @@ public interface PdaSchPointService extends IService<SchBasePoint> {
|
||||
PdaResponse getPoint(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 解绑
|
||||
* @param whereJson {
|
||||
* point_code: 点位编码
|
||||
* point_name: 点位名称
|
||||
|
||||
@@ -56,7 +56,7 @@ public class PdaSchTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
|
||||
|
||||
/**
|
||||
* 手持定点任务服务
|
||||
* 点位运输任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private PdaPointTask pdaPointTask;
|
||||
|
||||
@@ -77,8 +77,8 @@ public enum StatusEnum {
|
||||
PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)),
|
||||
|
||||
|
||||
REGION_INFO(ForkMap.of("主存区拣选平台", "PICK01", null, "一楼出入库输送线", "IOConveyor", null, "二楼出入库输送线", "IOConveyor2", null, "拣选台秤重区", "WEIGH01", null,
|
||||
"二楼CTU货架对接位", "CTU_POSITION", null, "二楼AGV产线对接位", "AGV_POSITION", null,"二楼空货架缓存区", "SHELF_POSITION", null)),
|
||||
REGION_INFO(ForkMap.of("商用线5号线", "SYCX01", null, "预装暂存区", "YZZC01", null, "预装线货架区", "YZHJ01", null, "铜管仓", "TGCK01", null,
|
||||
"烧焊车间", "SHCJ01", null, "来料检验区", "LLJY01", null)),
|
||||
|
||||
|
||||
STOCK_INFO(ForkMap.of("托盘库", "FStockPallet", null, "料箱库", "FStockId", null, "虚拟库", "FicStockId", null, "二楼ctu缓存库", "CStockId", null,
|
||||
@@ -91,8 +91,11 @@ public enum StatusEnum {
|
||||
"解绑", "0", null, "绑定", "1", null, "不操作", "3", null
|
||||
)),
|
||||
VEHICLE_TYPE(ForkMap.of(
|
||||
"空托盘", "KT001", 1, "空料箱", "KL001", 2, "空货架", "KH001", 3
|
||||
));
|
||||
"空载具", "0", 0, "空托盘", "KT001", 1, "空料箱", "KL001", 2, "空货架", "KH001", 3
|
||||
)),
|
||||
|
||||
STORE_INFO(ForkMap.of(
|
||||
"高位库", "GW", 0, "料架线边库", "XB", 1));
|
||||
|
||||
/**
|
||||
* L:label
|
||||
|
||||
@@ -61,8 +61,6 @@ public class SchBaseTask implements Serializable {
|
||||
private String vehicle_code2;
|
||||
|
||||
|
||||
private String handle_status;
|
||||
|
||||
|
||||
private String car_no;
|
||||
|
||||
@@ -114,8 +112,11 @@ public class SchBaseTask implements Serializable {
|
||||
|
||||
private String update_id;
|
||||
|
||||
|
||||
private String update_name;
|
||||
//是否更新出入库单,不为空不更新
|
||||
private String handle_status;
|
||||
//是否自动确认
|
||||
private Integer is_auto_confirm;
|
||||
|
||||
private String update_time;
|
||||
@TableField(exist = false)
|
||||
|
||||
@@ -28,15 +28,17 @@
|
||||
<select id="selectPageLeftJoin" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint"
|
||||
parameterType="org.nl.wms.sch_manage.service.dto.SchBasePointQuery">
|
||||
SELECT
|
||||
p.*
|
||||
p.*
|
||||
FROM
|
||||
`sch_base_point` p
|
||||
`sch_base_point` p
|
||||
<where>
|
||||
<if test="whereJson.workshop_code != null and workshop_code != ''">
|
||||
p.workshop_code = #{whereJson.workshop_code}
|
||||
</if>
|
||||
<if test="whereJson.blurry != null">
|
||||
AND (p.point_code LIKE '%${whereJson.blurry}%' OR p.point_name LIKE '%${whereJson.blurry}%')
|
||||
AND (p.point_code LIKE '%${whereJson.blurry}%' OR p.point_name LIKE '%${whereJson.blurry}%' OR
|
||||
p.vehicle_code LIKE '%${whereJson.blurry}%' OR p.region_name LIKE '%${whereJson.blurry}%' OR
|
||||
p.region_code LIKE '%${whereJson.blurry}%')
|
||||
</if>
|
||||
<if test="whereJson.region_code != null">
|
||||
AND p.region_code = #{whereJson.region_code}
|
||||
@@ -50,16 +52,16 @@
|
||||
<if test="whereJson.is_used != null">
|
||||
AND p.is_used = #{whereJson.is_used}
|
||||
</if>
|
||||
<choose>
|
||||
<!-- Case: whereJson.lock_type is true -->
|
||||
<when test="whereJson.lock_type">
|
||||
AND (p.ing_task_code IS NOT NULL AND p.ing_task_code <![CDATA[<>]]> '')
|
||||
</when>
|
||||
<!-- Case: whereJson.lock_type is false -->
|
||||
<otherwise>
|
||||
AND (p.ing_task_code IS NULL OR p.ing_task_code = '')
|
||||
</otherwise>
|
||||
</choose>
|
||||
<!-- <choose>-->
|
||||
<!-- <!– Case: whereJson.lock_type is true –>-->
|
||||
<!-- <when test="whereJson.lock_type">-->
|
||||
<!-- AND (p.ing_task_code IS NOT NULL AND p.ing_task_code <![CDATA[<>]]> '')-->
|
||||
<!-- </when>-->
|
||||
<!-- <!– Case: whereJson.lock_type is false –>-->
|
||||
<!-- <otherwise>-->
|
||||
<!-- AND (p.ing_task_code IS NULL OR p.ing_task_code = '')-->
|
||||
<!-- </otherwise>-->
|
||||
<!-- </choose>-->
|
||||
</where>
|
||||
ORDER BY p.region_code, p.point_code, p.point_type
|
||||
</select>
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
</where>
|
||||
</select>
|
||||
<select id="getTaskList" resultType="org.nl.wms.sch_manage.service.dao.SchBaseTask">
|
||||
SELECT config_code,task_id,point_code1, point_code2
|
||||
SELECT config_code,task_id,vehicle_code,task_code,point_code1, point_code2
|
||||
FROM sch_base_task
|
||||
WHERE
|
||||
<trim prefix="(" suffix=")" prefixOverrides="OR">
|
||||
|
||||
@@ -6,6 +6,7 @@ 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 com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -122,33 +123,33 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
@Override
|
||||
@Transactional
|
||||
public void update(SchBasePoint entity) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
entity.setUpdate_id(currentUserId);
|
||||
entity.setUpdate_name(nickName);
|
||||
entity.setUpdate_time(now);
|
||||
LambdaUpdateWrapper<SchBasePoint> updateWrapper = new LambdaUpdateWrapper<SchBasePoint>();
|
||||
updateWrapper.eq(SchBasePoint::getPoint_code, entity.getPoint_code());
|
||||
// 获取region_name
|
||||
SchBaseRegion baseRegion = regionMapper.selectById(entity.getRegion_code());
|
||||
entity.setRegion_name(baseRegion.getRegion_name());
|
||||
if (ObjectUtil.isNotEmpty(entity.getCan_vehicle_types())) {
|
||||
String can_vehicle_type = String.join(",", entity.getCan_vehicle_types());
|
||||
entity.setCan_vehicle_type(can_vehicle_type);
|
||||
updateWrapper.set(SchBasePoint::getRegion_code, baseRegion.getRegion_code());
|
||||
updateWrapper.set(SchBasePoint::getRegion_name, baseRegion.getRegion_name());
|
||||
if (StringUtils.isNotBlank(entity.getVehicle_code())) {
|
||||
updateWrapper.set(SchBasePoint::getVehicle_code, entity.getVehicle_code());
|
||||
}else {
|
||||
updateWrapper.set(SchBasePoint::getVehicle_code, null);
|
||||
}
|
||||
String pointStatus = entity.getPoint_status();
|
||||
updateWrapper.set(SchBasePoint::getPoint_status, pointStatus);
|
||||
updateWrapper.set(SchBasePoint::getIs_has_workder, entity.getIng_task_code());
|
||||
// 根据点位状态来判断更新内容
|
||||
if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals(IOSEnum.POINT_STATUS.code("无货"))) {
|
||||
entity.setVehicle_type("");
|
||||
entity.setVehicle_code("");
|
||||
if (pointStatus.equals(IOSEnum.POINT_STATUS.code("无货"))) {
|
||||
updateWrapper.set(SchBasePoint::getVehicle_type, null);
|
||||
updateWrapper.set(SchBasePoint::getPoint_status, pointStatus);
|
||||
}
|
||||
pointMapper.updateById(entity);
|
||||
pointMapper.update(null, updateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void deleteAll(Set<String> ids) {
|
||||
// 真删除
|
||||
pointMapper.deleteBatchIds(ids);
|
||||
// pointMapper.deleteBatchIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -88,34 +88,35 @@ public abstract class AbstractTask {
|
||||
resultForAcs.setCode(HttpStatus.HTTP_BAD_REQUEST);
|
||||
resultForAcs.setMessage(e.getMessage());
|
||||
}
|
||||
// 如果下发完毕,就修改状态
|
||||
if (resultForAcs.getCode() == HttpStatus.HTTP_OK) {
|
||||
// 查询所有任务
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.in(SchBaseTask::getTask_code, taskDtoList.stream()
|
||||
.map(AcsTaskDto::getTask_code)
|
||||
.collect(Collectors.toList())
|
||||
)
|
||||
);
|
||||
|
||||
// 解析并备注
|
||||
JSONArray errArr = resultForAcs.getErrArr();
|
||||
for (SchBaseTask schBaseTask : taskList) {
|
||||
schBaseTask.setTask_status(TaskStatus.ISSUED.getCode());
|
||||
// 判断是否是出错的任务
|
||||
for (int i = 0; ObjectUtil.isNotEmpty(errArr) && i < errArr.size(); i++) {
|
||||
JSONObject errObj = errArr.getJSONObject(i);
|
||||
String taskCode = errObj.getString("task_code");
|
||||
if (taskCode.equals(schBaseTask.getTask_code())) {
|
||||
// 出错的任务就设置出错信息为备注,不是出错就设置下发
|
||||
schBaseTask.setTask_status(TaskStatus.CREATED.getCode());
|
||||
schBaseTask.setRemark(errObj.getString("message"));
|
||||
break;
|
||||
if (resultForAcs != null) {
|
||||
// 如果下发完毕,就修改状态
|
||||
if (resultForAcs.getCode() == HttpStatus.HTTP_OK) {
|
||||
// 查询所有任务
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.in(SchBaseTask::getTask_code, taskDtoList.stream()
|
||||
.map(AcsTaskDto::getTask_code)
|
||||
.collect(Collectors.toList())
|
||||
)
|
||||
);
|
||||
// 解析并备注
|
||||
JSONArray errArr = resultForAcs.getErrArr();
|
||||
for (SchBaseTask schBaseTask : taskList) {
|
||||
schBaseTask.setTask_status(TaskStatus.ISSUED.getCode());
|
||||
// 判断是否是出错的任务
|
||||
for (int i = 0; ObjectUtil.isNotEmpty(errArr) && i < errArr.size(); i++) {
|
||||
JSONObject errObj = errArr.getJSONObject(i);
|
||||
String taskCode = errObj.getString("task_code");
|
||||
if (taskCode.equals(schBaseTask.getTask_code())) {
|
||||
// 出错的任务就设置出错信息为备注,不是出错就设置下发
|
||||
schBaseTask.setTask_status(TaskStatus.CREATED.getCode());
|
||||
schBaseTask.setRemark(errObj.getString("message"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
taskService.updateBatchById(taskList);
|
||||
}
|
||||
taskService.updateBatchById(taskList);
|
||||
}
|
||||
return resultForAcs;
|
||||
}
|
||||
@@ -131,7 +132,6 @@ public abstract class AbstractTask {
|
||||
|
||||
/**
|
||||
* 以下改为public会出现自动注入类出现问题
|
||||
*
|
||||
* @param task_code r任务号
|
||||
* @param status 状态码
|
||||
*/
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
package org.nl.wms.sch_manage.service.util;
|
||||
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.wms.gateway.dto.RcsResponse;
|
||||
import org.nl.wms.gateway.service.IGateWayService;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AutoTask {
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
/**
|
||||
* 通用工具类
|
||||
*/
|
||||
@Autowired
|
||||
private UpdateIvtUtils updateIvtUtils;
|
||||
/**
|
||||
* 任务工厂服务
|
||||
*/
|
||||
@Autowired
|
||||
private TaskFactory taskFactory;
|
||||
@Resource
|
||||
private IGateWayService iGateWayService;
|
||||
|
||||
|
||||
private final RedissonClient redissonClient;
|
||||
|
||||
//定时任务
|
||||
@SneakyThrows
|
||||
public void run() {
|
||||
RLock lock = redissonClient.getLock(this.getClass().getName());
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
sendTask();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务:下发任务
|
||||
*/
|
||||
private void sendTask() {
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()));
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
List<SchBaseTask> failTaskList = new ArrayList<>();
|
||||
Set<String> issuedTaskSet = new HashSet<>();
|
||||
// 整理下发rcs参数
|
||||
for (SchBaseTask taskDao : taskList) {
|
||||
List<String> taskDtoList = new ArrayList<>();
|
||||
taskDtoList.add(updateIvtUtils.sendRcsParam(taskDao));
|
||||
RcsResponse resultForRcs = RcsResponse.requestOkMessage("", "");
|
||||
resultForRcs.setResponseDate(DateUtil.now());
|
||||
try {
|
||||
// 创建下发对象
|
||||
resultForRcs = iGateWayService.renotifyRcs(taskDtoList);
|
||||
} catch (Exception e) {
|
||||
log.error("任务下发异常: {}", e.getMessage());
|
||||
resultForRcs.setCode(HttpStatus.HTTP_BAD_REQUEST);
|
||||
resultForRcs.setDesc(e.getMessage());
|
||||
}
|
||||
if (resultForRcs.getCode() == 1000) {
|
||||
issuedTaskSet.add(taskDao.getTask_id());
|
||||
log.info("任务号{},载具号{}下发任务成功", taskDao.getTask_code(), taskDao.getVehicle_code());
|
||||
} else {
|
||||
//获取返回的错误信息
|
||||
String error = resultForRcs.getDesc();
|
||||
//把下发失败的任务号放在集合中,统一更新备注任务下发失败
|
||||
taskDao.setRemark(resultForRcs.getResponseDate() + ":" + error);
|
||||
failTaskList.add(taskDao);
|
||||
log.error("任务号{},载具号{}下发任务失败,错误信息:{}", taskDao.getTask_code(), taskDao.getVehicle_code(), error);
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(issuedTaskSet)) {
|
||||
// 如果下发成功,就修改状态
|
||||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatus.ISSUED.getCode());
|
||||
updateWrapper.in(SchBaseTask::getTask_id, issuedTaskSet);
|
||||
taskService.update(updateWrapper);
|
||||
}
|
||||
//失败的,更新每个不同失败的原因
|
||||
for (SchBaseTask r : failTaskList) {
|
||||
LambdaUpdateWrapper<SchBaseTask> failUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
failUpdateWrapper.set(SchBaseTask::getRemark, r.getRemark());
|
||||
failUpdateWrapper.eq(SchBaseTask::getTask_id, r.getTask_id());
|
||||
taskService.update(failUpdateWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package org.nl.wms.sch_manage.service.util.autoTasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.lucene.LuceneAppender;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.sch_manage.enums.StatusEnum;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 延迟完成任务
|
||||
*
|
||||
* @author gbx
|
||||
* @since 2025-07-21
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class AutoDelayFinish {
|
||||
|
||||
private final ReentrantLock lock = new ReentrantLock();
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
|
||||
//定时任务
|
||||
public void run() {
|
||||
try {
|
||||
this.runTask();
|
||||
} catch (Exception e) {
|
||||
log.error("定时任务:AutoDelayFinish,运行异常:", e);
|
||||
} finally {
|
||||
LuceneAppender.traceIdTL.remove();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务:延迟更新点位
|
||||
*/
|
||||
public void runTask() {
|
||||
boolean isLock = false;
|
||||
try {
|
||||
isLock = lock.tryLock(3, TimeUnit.SECONDS);
|
||||
if (!isLock) {
|
||||
log.warn("未获取到锁,跳过此次任务");
|
||||
return;
|
||||
}
|
||||
List<SchBasePoint> taskList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.eq(SchBasePoint::getRegion_code, StatusEnum.REGION_INFO.code("商用线5号线")));
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
List<String> pointCodes = taskList.stream()
|
||||
.filter(r -> {
|
||||
try {
|
||||
String updateTimeStr = r.getUpdate_time();
|
||||
if (StringUtils.isBlank(updateTimeStr)) {
|
||||
return false;
|
||||
}
|
||||
LocalDateTime updateTime = LocalDateTime.parse(updateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
return Duration.between(updateTime, now).toMinutes() >= 2;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.map(SchBasePoint::getPoint_code)
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(pointCodes)) {
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("否"))
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.in(SchBasePoint::getPoint_code, pointCodes));
|
||||
}
|
||||
} catch (
|
||||
Exception ex) {
|
||||
log.error("AutoDelayFinish执行异常:", ex);
|
||||
} finally {
|
||||
if (isLock && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
package org.nl.wms.sch_manage.service.util.autoTasks;
|
||||
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.nl.config.lucene.LuceneAppender;
|
||||
import org.nl.wms.gateway.dto.RcsResponse;
|
||||
import org.nl.wms.gateway.service.IGateWayService;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class AutoTask {
|
||||
|
||||
private final ReentrantLock lock = new ReentrantLock();
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
/**
|
||||
* 通用工具类
|
||||
*/
|
||||
@Autowired
|
||||
private UpdateIvtUtils updateIvtUtils;
|
||||
@Resource
|
||||
private IGateWayService iGateWayService;
|
||||
|
||||
|
||||
//定时任务
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
this.sendTask();
|
||||
} catch (Exception e) {
|
||||
log.error("定时任务:AutoTask,运行异常:", e);
|
||||
} finally {
|
||||
LuceneAppender.traceIdTL.remove();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务:下发任务
|
||||
*/
|
||||
private void sendTask() {
|
||||
boolean isLock = false;
|
||||
try {
|
||||
isLock = lock.tryLock(3, TimeUnit.SECONDS);
|
||||
if (!isLock) {
|
||||
log.warn("未获取到锁,跳过此次任务");
|
||||
return;
|
||||
}
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()));
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
List<SchBaseTask> failTaskList = new ArrayList<>();
|
||||
Set<String> issuedTaskSet = new HashSet<>();
|
||||
// 整理下发rcs参数
|
||||
for (SchBaseTask taskDao : taskList) {
|
||||
List<String> taskDtoList = new ArrayList<>();
|
||||
taskDtoList.add(updateIvtUtils.sendRcsParam(taskDao));
|
||||
RcsResponse resultForRcs = RcsResponse.requestOkMessage("", "");
|
||||
resultForRcs.setResponseDate(DateUtil.now());
|
||||
try {
|
||||
// 创建下发对象
|
||||
resultForRcs = iGateWayService.renotifyRcs(taskDtoList);
|
||||
} catch (Exception e) {
|
||||
log.error("任务下发异常: {}", e.getMessage());
|
||||
resultForRcs.setCode(HttpStatus.HTTP_BAD_REQUEST);
|
||||
resultForRcs.setDesc(e.getMessage());
|
||||
}
|
||||
if (resultForRcs != null) {
|
||||
if (resultForRcs.getCode() == 1000) {
|
||||
issuedTaskSet.add(taskDao.getTask_id());
|
||||
log.info("任务号{},载具号{}下发任务成功", taskDao.getTask_code(), taskDao.getVehicle_code());
|
||||
} else {
|
||||
//获取返回的错误信息
|
||||
String error = resultForRcs.getDesc();
|
||||
//把下发失败的任务号放在集合中,统一更新备注任务下发失败
|
||||
taskDao.setRemark(resultForRcs.getResponseDate() + ":" + error);
|
||||
failTaskList.add(taskDao);
|
||||
log.error("任务号{},载具号{}下发任务失败,错误信息:{}", taskDao.getTask_code(), taskDao.getVehicle_code(), error);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(issuedTaskSet)) {
|
||||
// 如果下发成功,就修改状态
|
||||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatus.ISSUED.getCode());
|
||||
updateWrapper.set(SchBaseTask::getRemark, "任务下发成功!");
|
||||
updateWrapper.in(SchBaseTask::getTask_id, issuedTaskSet);
|
||||
taskService.update(updateWrapper);
|
||||
}
|
||||
//失败的,更新每个不同失败的原因
|
||||
for (SchBaseTask r : failTaskList) {
|
||||
LambdaUpdateWrapper<SchBaseTask> failUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
failUpdateWrapper.set(SchBaseTask::getRemark, r.getRemark());
|
||||
failUpdateWrapper.eq(SchBaseTask::getTask_id, r.getTask_id());
|
||||
taskService.update(failUpdateWrapper);
|
||||
}
|
||||
} catch (
|
||||
Exception ex) {
|
||||
log.error("AutoTask执行异常:", ex);
|
||||
} finally {
|
||||
if (isLock && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,11 +3,16 @@ package org.nl.wms.sch_manage.service.util.tasks;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
@@ -19,20 +24,33 @@ 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.TaskType;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IOutBillService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
|
||||
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @Author: Liuxy
|
||||
* @Description: 手持定点任务
|
||||
* @Description: 点位运输任务, 该任务完成,组盘信息默认整出
|
||||
* @Date: 2025/6/6
|
||||
*/
|
||||
@Component(value = "PdaPointTask")
|
||||
@TaskType("PdaPointTask")
|
||||
public class PdaPointTask extends AbstractTask {
|
||||
|
||||
@Resource
|
||||
private IOutBillService outBillService;
|
||||
/**
|
||||
* 组盘记录mapper
|
||||
*/
|
||||
@Autowired
|
||||
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
||||
/**
|
||||
* 任务服务类
|
||||
*/
|
||||
@@ -68,12 +86,14 @@ public class PdaPointTask extends AbstractTask {
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setVehicle_type(json.getString("vehicle_type"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setHandle_status(json.getString("handle_status"));
|
||||
task.setIs_auto_confirm(StringUtils.isNotBlank(json.getString("is_auto_confirm"))?json.getInteger("is_auto_confirm"):0);
|
||||
task.setAcs_trace_id(json.getString("acs_task_type"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
return task.getTask_code();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -131,10 +151,10 @@ public class PdaPointTask extends AbstractTask {
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
|
||||
throw new BadRequestException("只能取消生成中的任务!");
|
||||
}
|
||||
this.cancelTask(taskObj);
|
||||
// if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
|
||||
// throw new BadRequestException("只能取消生成中的任务!");
|
||||
// }
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -143,28 +163,21 @@ public class PdaPointTask extends AbstractTask {
|
||||
|
||||
@Transactional
|
||||
public void finishTask(SchBaseTask taskObj) {
|
||||
// 更新任务
|
||||
taskObj.setRemark("已完成");
|
||||
taskObj.setHandle_status(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
taskService.updateById(taskObj);
|
||||
//更新单据
|
||||
outBillService.taskFinish(taskObj);
|
||||
// 更新起点
|
||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
);
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
.set(Structattr::getStoragevehicle_code, null)
|
||||
.set(Structattr::getTaskdtl_id, null)
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
|
||||
);
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||
@@ -172,26 +185,40 @@ public class PdaPointTask extends AbstractTask {
|
||||
.set(Structattr::getTaskdtl_id, null)
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已完成");
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
.set(SchBasePoint::getVehicle_code, null));
|
||||
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
//更新起点
|
||||
// iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
// .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
// .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
// .set(SchBasePoint::getVehicle_code, null));
|
||||
// iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
// .eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
// .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
// );
|
||||
//解冻
|
||||
GroupPlate plate = mdPbGroupplateMapper.selectOne(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code())
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
);
|
||||
if (ObjectUtils.isNotEmpty(plate)) {
|
||||
mdPbGroupplateMapper.update(null, new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId())
|
||||
.set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.eq(GroupPlate::getGroup_id, plate.getGroup_id()));
|
||||
}
|
||||
// 更新终点
|
||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.set(SchBasePoint::getVehicle_code, null));
|
||||
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
@@ -68,6 +69,8 @@ public class StOutTask extends AbstractTask {
|
||||
task.setVehicle_type(json.getString("vehicle_type"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setHandle_status(json.getString("vehicle_type"));
|
||||
task.setIs_auto_confirm(StringUtils.isNotBlank(json.getString("is_auto_confirm"))?json.getInteger("is_auto_confirm"):0);
|
||||
task.setAcs_trace_id(json.getString("acs_task_type"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
@@ -78,6 +79,8 @@ public class VehicleInTask extends AbstractTask {
|
||||
task.setVehicle_type(json.getString("vehicle_type"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setAcs_trace_id(json.getString("acs_task_type"));
|
||||
task.setHandle_status(json.getString("handle_status"));
|
||||
task.setIs_auto_confirm(StringUtils.isNotBlank(json.getString("is_auto_confirm"))?json.getInteger("is_auto_confirm"):0);
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
|
||||
@@ -5,9 +5,11 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
@@ -69,12 +71,14 @@ public class VehicleOutTask extends AbstractTask {
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(json.getString("task_type"));
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("PlacedLocation"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setVehicle_type(json.getString("vehicle_type"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setAcs_trace_id(json.getString("acs_task_type"));
|
||||
task.setHandle_status(json.getString("handle_status"));
|
||||
task.setIs_auto_confirm(StringUtils.isNotBlank(json.getString("is_auto_confirm"))?json.getInteger("is_auto_confirm"):0);
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
@@ -155,7 +159,7 @@ public class VehicleOutTask extends AbstractTask {
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskObj.setHandle_status("1");
|
||||
taskObj.setHandle_status(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
taskService.updateById(taskObj);
|
||||
outBillService.taskFinish(taskObj);
|
||||
}
|
||||
|
||||
@@ -58,12 +58,27 @@ public class IOSConstant {
|
||||
public final static String MOVE_CONFIG_TASK = "MoveTask";
|
||||
|
||||
/**
|
||||
* 余料回库任务类编码
|
||||
* 入库任务
|
||||
*/
|
||||
public final static String ST_IN_TASK = "STInTask";
|
||||
|
||||
/**
|
||||
* 出库任务
|
||||
*/
|
||||
public final static String ST_OUT_TASK = "STOutTask";
|
||||
|
||||
/**
|
||||
* 移库任务
|
||||
*/
|
||||
public final static String MOVE_TASK = "MoveTask";
|
||||
|
||||
/**
|
||||
* 余料回库
|
||||
*/
|
||||
public final static String BACK_IN_TASK = "BackInTask";
|
||||
|
||||
/**
|
||||
* 手持定点任务
|
||||
* 点位运输任务
|
||||
*/
|
||||
public final static String PDA_POINT_TASK = "PdaPointTask";
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ public enum IOSEnum {
|
||||
|
||||
// 锁类型
|
||||
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2"
|
||||
, "移入锁", "3", "移出锁", "4", "其他锁","9"
|
||||
, "移入锁", "3", "移出锁", "4", "其他锁","99"
|
||||
)),
|
||||
|
||||
// 点位状态
|
||||
|
||||
@@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@@ -1213,7 +1212,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void taskFinish(SchBaseTask task) {
|
||||
//解锁库位
|
||||
//更新起点
|
||||
JSONObject finish_map = new JSONObject();
|
||||
finish_map.put("struct_code", task.getPoint_code1());
|
||||
finish_map.put("storagevehicle_code", null);
|
||||
@@ -1221,15 +1220,38 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
finish_map.put("inv_id", null);
|
||||
finish_map.put("inv_code", null);
|
||||
iStructattrService.updateStatusByCode("1", finish_map);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, task.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, task.getVehicle_code())
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
|
||||
);
|
||||
if (StringUtils.isBlank(task.getHandle_status())) {
|
||||
//更新终点
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<>();
|
||||
if (BaseDataEnum.IS_YES_NOT.code("是").equals(task.getIs_auto_confirm().toString())) {
|
||||
//整出
|
||||
GroupPlate plate = mdPbGroupplateMapper.selectOne(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, task.getVehicle_code())
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
);
|
||||
if (ObjectUtils.isNotEmpty(plate)) {
|
||||
mdPbGroupplateMapper.update(null, new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
.set(GroupPlate::getQty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId())
|
||||
.set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.eq(GroupPlate::getGroup_id, plate.getGroup_id()));
|
||||
}
|
||||
wrapper.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
} else {
|
||||
wrapper.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("否"));
|
||||
}
|
||||
wrapper.eq(SchBasePoint::getPoint_code, task.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, task.getVehicle_code())
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"));
|
||||
iSchBasePointService.update(wrapper);
|
||||
if (BaseDataEnum.IS_YES_NOT.code("是").equals(task.getHandle_status())) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
|
||||
@@ -142,6 +142,9 @@ public class UpdateIvtUtils {
|
||||
throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")) + ",请在WMS任务列表中检查!");
|
||||
}
|
||||
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getOne(new QueryWrapper<MdPbStoragevehicleinfo>().lambda().eq(MdPbStoragevehicleinfo::getStoragevehicle_code, where.getString("vehicle_code")));
|
||||
if (mdPbStoragevehicleinfo == null) {
|
||||
throw new BadRequestException("该载具不存在,请检查。");
|
||||
}
|
||||
String acsTaskType = StatusEnum.ACS_TASK_TYPE.getR(mdPbStoragevehicleinfo.getStoragevehicle_type());
|
||||
where.put("acs_task_type", acsTaskType);
|
||||
where.put("vehicle_type", mdPbStoragevehicleinfo.getStoragevehicle_type());
|
||||
|
||||
Reference in New Issue
Block a user