add:株洲中钨来料入库功能
This commit is contained in:
@@ -101,6 +101,10 @@ public interface IStructattrService extends IService<Structattr> {
|
|||||||
|
|
||||||
List<StructattrVechielDto> collectVechicle(Map query);
|
List<StructattrVechielDto> collectVechicle(Map query);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
List<StructattrVechielDto> collectVechicleNoGroup(Map query);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出库规则
|
* 出库规则
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -17,4 +17,6 @@ public interface StructattrMapper extends BaseMapper<Structattr>{
|
|||||||
|
|
||||||
List<StructattrVechielDto> collectVehicle(Map query);
|
List<StructattrVechielDto> collectVehicle(Map query);
|
||||||
|
|
||||||
|
List<StructattrVechielDto> collectVehicleNoGroup(Map query);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,4 +56,32 @@
|
|||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="collectVehicleNoGroup" resultType="org.nl.wms.basedata_manage.service.dao.StructattrVechielDto">
|
||||||
|
SELECT
|
||||||
|
ivt.*
|
||||||
|
FROM
|
||||||
|
st_ivt_structattr ivt
|
||||||
|
<where>
|
||||||
|
ivt.occupancy_state=2
|
||||||
|
<if test="stor_code != null and stor_code != ''">
|
||||||
|
AND ivt.stor_code = #{stor_code}
|
||||||
|
</if>
|
||||||
|
<if test="sect_code != null and sect_code != ''">
|
||||||
|
AND ivt.sect_code = #{sect_code}
|
||||||
|
</if>
|
||||||
|
<if test="vehicles != null and vehicles.size() > 0">
|
||||||
|
AND ivt.storagevehicle_code in
|
||||||
|
<foreach collection="vehicles" item="value" index="key" open="(" close=")" separator=",">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="is_lock != null and is_lock != ''">
|
||||||
|
and ivt.lock_type = '0'
|
||||||
|
</if>
|
||||||
|
<if test="order_by != null and order_by != ''">
|
||||||
|
order by ${order_by}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -56,4 +56,9 @@ public class StrategyStructParam {
|
|||||||
* 出入库类型
|
* 出入库类型
|
||||||
*/
|
*/
|
||||||
private String ioType;
|
private String ioType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出入库类型
|
||||||
|
*/
|
||||||
|
private String stragegyType;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -319,6 +319,14 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
|||||||
return this.baseMapper.collectVehicle(query);
|
return this.baseMapper.collectVehicle(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 载具库存查询,载具不需要组盘
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<StructattrVechielDto> collectVechicleNoGroup(Map query) {
|
||||||
|
return this.baseMapper.collectVehicleNoGroup(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出库分配
|
* 出库分配
|
||||||
@@ -342,8 +350,8 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
|||||||
List list = null;
|
List list = null;
|
||||||
for (String decisionerType : strategy) {
|
for (String decisionerType : strategy) {
|
||||||
Decisioner decisioner = decisionerMap.get(decisionerType);
|
Decisioner decisioner = decisionerMap.get(decisionerType);
|
||||||
log.info("执行出入库规格:" + decisioner.strategyConfig.getStrategy_name());
|
log.info("执行出库规格:" + decisioner.strategyConfig.getStrategy_name());
|
||||||
list = decisioner.handler(list, param);
|
list = decisioner.handler(list, JSONObject.toJSON(param));
|
||||||
if (CollectionUtils.isEmpty(list)) {
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
throw new BadRequestException("当前策略" + decisioner.strategyConfig.getStrategy_name() + "无可用货位,分配前数量:" + list.size());
|
throw new BadRequestException("当前策略" + decisioner.strategyConfig.getStrategy_name() + "无可用货位,分配前数量:" + list.size());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.base;
|
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.base;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
@@ -24,7 +25,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Service("fifo")
|
@Service("fifo")
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class FIFORuleHandler extends Decisioner<StrategyStructMaterialVO, StrategyStructParam> {
|
public class FIFORuleHandler extends Decisioner<StrategyStructMaterialVO, JSONObject> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出入库明细服务
|
* 出入库明细服务
|
||||||
@@ -33,22 +34,22 @@ public class FIFORuleHandler extends Decisioner<StrategyStructMaterialVO, Strate
|
|||||||
private IStructattrService iStructattrService;
|
private IStructattrService iStructattrService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<StrategyStructMaterialVO> handler(List<StrategyStructMaterialVO> list, StrategyStructParam param) {
|
public List<StrategyStructMaterialVO> handler(List<StrategyStructMaterialVO> list, JSONObject param) {
|
||||||
//分配数量
|
//分配数量
|
||||||
//当前条件只有id,批次
|
//当前条件只有id,批次
|
||||||
log.info("---------执行fifo出库分配规则---------");
|
log.info("---------执行fifo出库分配规则---------");
|
||||||
BigDecimal planQty = param.getQty();
|
BigDecimal planQty = param.getBigDecimal("qty");
|
||||||
List<StructattrVechielDto> vechielDtos =
|
List<StructattrVechielDto> vechielDtos =
|
||||||
iStructattrService.collectVechicle(MapOf.of("material_id", param.getMaterial_id()
|
iStructattrService.collectVechicle(MapOf.of("material_id", param.getString("material_id")
|
||||||
, "pcsn", param.getPcsn()
|
, "pcsn", param.getString("pcsn")
|
||||||
, "stor_code", param.getStor_code()
|
, "stor_code", param.getString("stor_code")
|
||||||
, "sect_code", param.getSect_code()
|
, "sect_code", param.getString("sect_code")
|
||||||
, "plan_qty", planQty
|
, "plan_qty", planQty
|
||||||
, "is_lock", "false"
|
, "is_lock", "false"
|
||||||
, "order_by", "gro.update_time asc")
|
, "order_by", "gro.update_time asc")
|
||||||
);
|
);
|
||||||
if (ObjectUtils.isEmpty(vechielDtos)) {
|
if (ObjectUtils.isEmpty(vechielDtos)) {
|
||||||
throw new BadRequestException("当前出库策略:先进先出,库存分配失败,失败原因:库存不足!");
|
throw new BadRequestException("当前出库策略:先进先出,库存分配失败,失败原因:库存不足!或未组盘!");
|
||||||
}
|
}
|
||||||
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
|
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
|
||||||
for (StructattrVechielDto vechielDto : vechielDtos) {
|
for (StructattrVechielDto vechielDto : vechielDtos) {
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
|
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto;
|
||||||
|
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
|
||||||
|
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner;
|
||||||
|
import org.nl.wms.decision_manage.service.strategyConfig.enums.StragegyTypeEnum;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhengxuming
|
||||||
|
* @Date 2025-7-25 11:24:52
|
||||||
|
* 先进先出/空托盘出库策略
|
||||||
|
*/
|
||||||
|
@Service("fifoAndVehicle")
|
||||||
|
@Slf4j
|
||||||
|
public class FIFOAndVehicleHandler extends Decisioner<StrategyStructMaterialVO, JSONObject> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出入库明细服务
|
||||||
|
*/
|
||||||
|
@Autowired
|
||||||
|
private IStructattrService iStructattrService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StrategyStructMaterialVO> handler(List<StrategyStructMaterialVO> list, JSONObject param) {
|
||||||
|
//如果是空托盘出库任务,则执行空托盘出库
|
||||||
|
if (StragegyTypeEnum.STRAGEGY_TYPE.code("空托盘").equals(param.getString("strategyType"))) {
|
||||||
|
//查新空托盘
|
||||||
|
//当前条件只有id,批次
|
||||||
|
log.info("---------执行空托盘出库分配规则---------");
|
||||||
|
BigDecimal planQty = param.getBigDecimal("qty");
|
||||||
|
List<StructattrVechielDto> vechielDtos =
|
||||||
|
iStructattrService.collectVechicleNoGroup(MapOf.of(
|
||||||
|
"stor_code", param.getString("stor_code")
|
||||||
|
, "sect_code", param.getString("sect_code")
|
||||||
|
, "is_lock", "false"
|
||||||
|
, "order_by", "ivt.update_time asc"));
|
||||||
|
if (ObjectUtils.isEmpty(vechielDtos)) {
|
||||||
|
throw new BadRequestException("库存分配失败,失败原因:没有空托盘");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
|
||||||
|
for (StructattrVechielDto vechielDto : vechielDtos) {
|
||||||
|
StrategyStructMaterialVO materialVO = new StrategyStructMaterialVO();
|
||||||
|
BeanUtils.copyProperties(vechielDto, materialVO);
|
||||||
|
divStruct.add(materialVO);
|
||||||
|
}
|
||||||
|
return divStruct;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//分配数量
|
||||||
|
//当前条件只有id,批次
|
||||||
|
log.info("---------执行fifo出库分配规则---------");
|
||||||
|
BigDecimal planQty = param.getBigDecimal("qty");
|
||||||
|
List<StructattrVechielDto> vechielDtos =
|
||||||
|
iStructattrService.collectVechicle(MapOf.of("material_id", param.getString("material_id")
|
||||||
|
, "pcsn", param.getString("pcsn")
|
||||||
|
, "stor_code", param.getString("stor_code")
|
||||||
|
, "sect_code", param.getString("sect_code")
|
||||||
|
, "plan_qty", planQty
|
||||||
|
, "is_lock", "false"
|
||||||
|
, "order_by", "gro.update_time asc")
|
||||||
|
);
|
||||||
|
if (ObjectUtils.isEmpty(vechielDtos)) {
|
||||||
|
throw new BadRequestException("当前出库策略:先进先出,库存分配失败,失败原因:库存不足!或未组盘!");
|
||||||
|
}
|
||||||
|
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
|
||||||
|
for (StructattrVechielDto vechielDto : vechielDtos) {
|
||||||
|
if (planQty.intValue() <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
BigDecimal qty = vechielDto.getQty();
|
||||||
|
BigDecimal subQty = planQty.subtract(qty);
|
||||||
|
if (subQty.doubleValue() >= 0) {
|
||||||
|
vechielDto.setFrozen_qty(vechielDto.getQty());
|
||||||
|
} else {
|
||||||
|
vechielDto.setFrozen_qty(planQty);
|
||||||
|
}
|
||||||
|
planQty = subQty;
|
||||||
|
StrategyStructMaterialVO materialVO = new StrategyStructMaterialVO();
|
||||||
|
BeanUtils.copyProperties(vechielDto, materialVO);
|
||||||
|
divStruct.add(materialVO);
|
||||||
|
}
|
||||||
|
return divStruct;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package org.nl.wms.decision_manage.service.strategyConfig.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务枚举类
|
||||||
|
*
|
||||||
|
* @author zhengxuming
|
||||||
|
* @Date 2025/05/26
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum StragegyTypeEnum {
|
||||||
|
|
||||||
|
// 策略类型
|
||||||
|
STRAGEGY_TYPE(MapOf.of("1", "空托盘", "2", "正常策略"))
|
||||||
|
;
|
||||||
|
|
||||||
|
private Map<String, String> code;
|
||||||
|
|
||||||
|
public String code(String desc) {
|
||||||
|
String code = this.getCode().get(desc);
|
||||||
|
if (StringUtils.isNotEmpty(code)) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String check(String code) {
|
||||||
|
for (Map.Entry<String, String> entry : this.getCode().entrySet())
|
||||||
|
if (entry.getValue().equals("code")) {
|
||||||
|
return entry.getValue();
|
||||||
|
}
|
||||||
|
throw new BadRequestException(this.name() + "对应类型" + code + "未定义");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -104,6 +104,14 @@ public class PdaIosInController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/zwConfirmIn")
|
||||||
|
@Log("中钨组盘入库确认")
|
||||||
|
public ResponseEntity<Object> zwConfirmIn(@RequestBody JSONObject whereJson) {
|
||||||
|
assertNotBlankJson(whereJson, "请求参数不能为空", "vehicle_code", "site_code");
|
||||||
|
return new ResponseEntity<>(pdaIosInService.zwConfirmIn(whereJson), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拣选余料回库物料查询
|
* 拣选余料回库物料查询
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -105,6 +105,20 @@ public interface PdaIosInService {
|
|||||||
*/
|
*/
|
||||||
PdaResponse confirmIn(JSONObject whereJson);
|
PdaResponse confirmIn(JSONObject whereJson);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 株洲中钨入库确认
|
||||||
|
* 步骤1:入库确认
|
||||||
|
* 步骤2:空托盘出库
|
||||||
|
* @param whereJson {
|
||||||
|
* vehicle_code:载具编码
|
||||||
|
* sect_code:库区
|
||||||
|
* }
|
||||||
|
* @return PdaResponse
|
||||||
|
*/
|
||||||
|
PdaResponse zwConfirmIn(JSONObject whereJson);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拣选余料回库物料查询
|
* 拣选余料回库物料查询
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -106,6 +106,4 @@ public interface PdaIosOutService {
|
|||||||
PdaResponse vehicleOutConfirm(JSONObject whereJson);
|
PdaResponse vehicleOutConfirm(JSONObject whereJson);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.nl.wms.pda_manage.ios_manage.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
@@ -15,12 +16,19 @@ import org.nl.common.base.TableDataInfo;
|
|||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.common.domain.vo.SelectItemVo;
|
import org.nl.common.domain.vo.SelectItemVo;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.config.SpringContextHolder;
|
||||||
|
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||||
import org.nl.wms.basedata_manage.service.*;
|
import org.nl.wms.basedata_manage.service.*;
|
||||||
import org.nl.wms.basedata_manage.service.dao.*;
|
import org.nl.wms.basedata_manage.service.dao.*;
|
||||||
|
import org.nl.wms.basedata_manage.service.dao.mapper.SectattrMapper;
|
||||||
import org.nl.wms.basedata_manage.service.dto.MaterialQuery;
|
import org.nl.wms.basedata_manage.service.dto.MaterialQuery;
|
||||||
|
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
|
||||||
|
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
|
||||||
import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService;
|
import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService;
|
||||||
|
import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService;
|
||||||
import org.nl.wms.pda_manage.util.PdaResponse;
|
import org.nl.wms.pda_manage.util.PdaResponse;
|
||||||
import org.nl.wms.sch_manage.enums.StatusEnum;
|
import org.nl.wms.sch_manage.enums.StatusEnum;
|
||||||
import org.nl.wms.sch_manage.enums.TaskEnum;
|
import org.nl.wms.sch_manage.enums.TaskEnum;
|
||||||
@@ -28,10 +36,18 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
|
|||||||
import org.nl.wms.sch_manage.service.ISchBaseRegionService;
|
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.SchBasePoint;
|
||||||
import org.nl.wms.sch_manage.service.dao.SchBaseRegion;
|
import org.nl.wms.sch_manage.service.dao.SchBaseRegion;
|
||||||
|
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||||
import org.nl.wms.sch_manage.service.util.tasks.BackInTask;
|
import org.nl.wms.sch_manage.service.util.tasks.BackInTask;
|
||||||
|
import org.nl.wms.sch_manage.service.util.tasks.VehicleOutTask;
|
||||||
|
import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask;
|
||||||
|
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||||
|
import org.nl.wms.system_manage.service.dict.dao.mapper.SysDictMapper;
|
||||||
|
import org.nl.wms.system_manage.service.logicflow.dao.StageImage;
|
||||||
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
||||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
||||||
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
||||||
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||||
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
||||||
@@ -46,6 +62,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.nl.wms.warehouse_manage.enums.IOSEnum.GROUP_PLATE_STATUS;
|
import static org.nl.wms.warehouse_manage.enums.IOSEnum.GROUP_PLATE_STATUS;
|
||||||
|
|
||||||
@@ -62,12 +79,17 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private Map<String, AbstractTask> applyTaskMap;
|
private Map<String, AbstractTask> applyTaskMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组盘记录mapper
|
* 组盘记录mapper
|
||||||
*/
|
*/
|
||||||
@Autowired
|
@Autowired
|
||||||
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组盘记录服务
|
* 组盘记录服务
|
||||||
*/
|
*/
|
||||||
@@ -87,6 +109,12 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IMdPbMeasureunitService iMdPbMeasureunitService;
|
private IMdPbMeasureunitService iMdPbMeasureunitService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库区
|
||||||
|
*/
|
||||||
|
@Autowired
|
||||||
|
private SectattrMapper sectattrMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 载具服务
|
* 载具服务
|
||||||
*/
|
*/
|
||||||
@@ -112,6 +140,9 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IBsrealStorattrService iSrealStorattrService;
|
private IBsrealStorattrService iSrealStorattrService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PdaIosOutService pdaIosOutService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 入库服务
|
* 入库服务
|
||||||
*/
|
*/
|
||||||
@@ -128,6 +159,18 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IOStorInvDtlMapper ioStorInvDtlMapper;
|
private IOStorInvDtlMapper ioStorInvDtlMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点位基础信息
|
||||||
|
*/
|
||||||
|
@Autowired
|
||||||
|
private SchBasePointMapper schBasePointMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Autowired
|
||||||
|
private SysDictMapper sysDictMapper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 区域服务
|
* 区域服务
|
||||||
@@ -246,6 +289,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
|||||||
public JSONObject getVehicleMaterial(JSONObject whereJson) {
|
public JSONObject getVehicleMaterial(JSONObject whereJson) {
|
||||||
whereJson.put("status", GROUP_PLATE_STATUS.code("组盘"));
|
whereJson.put("status", GROUP_PLATE_STATUS.code("组盘"));
|
||||||
whereJson.put("vehicleCode", whereJson.getString("search"));
|
whereJson.put("vehicleCode", whereJson.getString("search"));
|
||||||
|
whereJson.put("noEmptyVehicle", whereJson.getString("noEmptyVehicle"));
|
||||||
List<JSONObject> list = mdPbGroupplateMapper.getVehicleMaterial(whereJson);
|
List<JSONObject> list = mdPbGroupplateMapper.getVehicleMaterial(whereJson);
|
||||||
if (CollectionUtils.isEmpty(list)) {
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
throw new BadRequestException("此载具未组盘,请检查!");
|
throw new BadRequestException("此载具未组盘,请检查!");
|
||||||
@@ -399,6 +443,181 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
|||||||
return PdaResponse.requestOk();
|
return PdaResponse.requestOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public PdaResponse zwConfirmIn(JSONObject whereJson) {
|
||||||
|
|
||||||
|
//组盘入库
|
||||||
|
//根据组盘编号获取物料型号
|
||||||
|
whereJson.put("vehicleCode", whereJson.getString("vehicle_code"));
|
||||||
|
whereJson.put("noEmptyVehicle", "1");
|
||||||
|
String material_model = getVehicleMaterial(whereJson).getString("material_model");
|
||||||
|
if(StringUtils.isEmpty(material_model)){
|
||||||
|
throw new BadRequestException("组盘的物料未配置【物料型号】!");
|
||||||
|
}
|
||||||
|
//根据物料型号匹配字典表获取入库编码
|
||||||
|
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
|
||||||
|
.eq(Dict::getCode, "MATERIAL_MODEL_SECT")
|
||||||
|
.eq(Dict::getPara1, material_model));
|
||||||
|
if(CollectionUtils.isEmpty(dictList)){
|
||||||
|
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型与库区的对应关系,请核对!");
|
||||||
|
}
|
||||||
|
|
||||||
|
String sect_code = dictList.get(0).getValue();
|
||||||
|
//根据库区编码获取库区id sect_id
|
||||||
|
List<Sectattr> sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<Sectattr>()
|
||||||
|
.eq(Sectattr::getSect_code, sect_code));
|
||||||
|
|
||||||
|
if(CollectionUtils.isEmpty(sectattrList)){
|
||||||
|
throw new BadRequestException("库区"+sect_code+"不存在,请核对!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//赋值给whereJson
|
||||||
|
whereJson.put("sect_id",sectattrList.get(0).getSect_id());
|
||||||
|
|
||||||
|
//获取起点
|
||||||
|
SchBasePoint schBasePoint = iSchBasePointService
|
||||||
|
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code")));
|
||||||
|
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||||
|
throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位");
|
||||||
|
}
|
||||||
|
whereJson.put("point_code",whereJson.getString("site_code"));
|
||||||
|
// 预组织出入库单据实体
|
||||||
|
Map<String, Object> jsonMstO = organizeInsertData(whereJson);
|
||||||
|
// 调用服务新增出入库单
|
||||||
|
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMstO);
|
||||||
|
// 预组织出入库单据明细的分配数据
|
||||||
|
whereJson.put("iostorinv_id", iostorinv_id);
|
||||||
|
Map<String, Object> jsonDtl = organizeDivData(whereJson);
|
||||||
|
// 调用分配,默认自动分配库位
|
||||||
|
iRawAssistIStorService.divStruct(new JSONObject(jsonDtl));
|
||||||
|
|
||||||
|
// 组织主数据
|
||||||
|
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);
|
||||||
|
|
||||||
|
String point_code2 = iRawAssistIStorService.divPointNoTask(jsonMst);
|
||||||
|
|
||||||
|
//空托盘出库
|
||||||
|
// 需要计算新的siteCode 根据方案 找region_code=YLXCQ 原料卸车区的
|
||||||
|
// 已启用的 编号最大的 空的 point_type = 1 点位
|
||||||
|
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class)
|
||||||
|
.select(SchBasePoint::getPoint_code)
|
||||||
|
.eq(SchBasePoint::getRegion_code, "YLXCQ")
|
||||||
|
.eq(SchBasePoint::getIs_used, true)
|
||||||
|
.eq(SchBasePoint::getPoint_status, 1)
|
||||||
|
.eq(SchBasePoint::getPoint_type, "1")
|
||||||
|
.orderByDesc(SchBasePoint::getOut_empty_seq);
|
||||||
|
|
||||||
|
List<SchBasePoint> schBasePointList = schBasePointMapper.selectList(queryWrapper);
|
||||||
|
if (CollectionUtils.isEmpty(schBasePointList)) {
|
||||||
|
throw new BadRequestException("原料卸车区不存在空的点位");
|
||||||
|
}
|
||||||
|
|
||||||
|
//从库区拉一个空托盘到这个点位
|
||||||
|
whereJson.put("siteCode", schBasePointList.get(0).getPoint_code());
|
||||||
|
|
||||||
|
LambdaQueryWrapper<MdMeMaterialbase> maQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
maQueryWrapper.eq(MdMeMaterialbase::getMaterial_code, StatusEnum.VEHICLE_TYPE.code("空托盘"));
|
||||||
|
|
||||||
|
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne(maQueryWrapper);
|
||||||
|
if (materDao == null) {
|
||||||
|
throw new BadRequestException("未找到空载具物料信息!");
|
||||||
|
}
|
||||||
|
whereJson.put("material_id", materDao.getMaterial_id());
|
||||||
|
whereJson.put("material_code", materDao.getMaterial_code());
|
||||||
|
Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<>(Sectattr.class)
|
||||||
|
.eq(Sectattr::getSect_id, whereJson.getString("sect_id"))
|
||||||
|
.eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||||
|
);
|
||||||
|
if (ObjectUtil.isEmpty(sectattr)) {
|
||||||
|
throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!");
|
||||||
|
}
|
||||||
|
BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id());
|
||||||
|
whereJson.put("stor_code", storeDao.getStor_code());
|
||||||
|
whereJson.put("sect_code", sectattr.getSect_code());
|
||||||
|
StrategyStructParam strategyStructParam = StrategyStructParam.builder()
|
||||||
|
.ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库")))
|
||||||
|
.sect_code(whereJson.getString("sect_code"))
|
||||||
|
.stor_code(whereJson.getString("stor_code"))
|
||||||
|
.material_id(whereJson.getString("material_id"))
|
||||||
|
.material_code(whereJson.getString("material_code"))
|
||||||
|
.qty(new BigDecimal(1))
|
||||||
|
.stragegyType("1")
|
||||||
|
.build();
|
||||||
|
List<StrategyStructMaterialVO> structList = iStructattrService.outBoundSectDiv(strategyStructParam);
|
||||||
|
if (CollectionUtils.isEmpty(structList)) {
|
||||||
|
throw new BadRequestException("无可用空托盘库存!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//创建任务
|
||||||
|
JSONObject taskForm = new JSONObject();
|
||||||
|
taskForm.put("task_type", IOSConstant.IN_BILL_TASK);
|
||||||
|
taskForm.put("config_code", IOSConstant.IN_BILL_TASK);
|
||||||
|
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||||
|
taskForm.put("point_code1", whereJson.getString("site_code"));
|
||||||
|
//计算入库库位
|
||||||
|
taskForm.put("point_code2", point_code2);
|
||||||
|
|
||||||
|
//空托盘出库库位
|
||||||
|
taskForm.put("point_code3", structList.get(0).getStruct_code());
|
||||||
|
taskForm.put("point_code4", whereJson.getString("siteCode"));
|
||||||
|
taskForm.put("vehicle_code", structList.get(0).getStoragevehicle_code());
|
||||||
|
InBillTask inBillTask = SpringContextHolder.getBean("InBillTask");
|
||||||
|
String task_id = inBillTask.create(taskForm);
|
||||||
|
|
||||||
|
Set<String> vehicleCodeSet = structList.stream()
|
||||||
|
.map(StrategyStructMaterialVO::getStoragevehicle_code)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
mdPbGroupplateMapper.update(
|
||||||
|
new GroupPlate(),
|
||||||
|
new LambdaUpdateWrapper<GroupPlate>()
|
||||||
|
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||||
|
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||||
|
.in(GroupPlate::getStoragevehicle_code, vehicleCodeSet)
|
||||||
|
);
|
||||||
|
|
||||||
|
//锁定仓位
|
||||||
|
Set<String> structCodeSet = structList.stream()
|
||||||
|
.map(StrategyStructMaterialVO::getStruct_code)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
iStructattrService.update(
|
||||||
|
new LambdaUpdateWrapper<Structattr>()
|
||||||
|
.set(Structattr::getInv_id, null)
|
||||||
|
.set(Structattr::getInv_code, null)
|
||||||
|
.set(Structattr::getInv_type, null)
|
||||||
|
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁"))
|
||||||
|
.in(Structattr::getStruct_code, structCodeSet)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//分配明细表更新任务相关数据
|
||||||
|
IOStorInvDis dis = new IOStorInvDis();
|
||||||
|
dis.setIostorinvdis_id(dtlDao.getIostorinvdtl_id());
|
||||||
|
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||||
|
dis.setTask_id(task_id);
|
||||||
|
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||||
|
dis.setPoint_code(whereJson.getString("site_code"));
|
||||||
|
ioStorInvDisMapper.updateById(dis);
|
||||||
|
|
||||||
|
return PdaResponse.requestOk();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组织入库插入数据
|
* 组织入库插入数据
|
||||||
* @param whereJson {
|
* @param whereJson {
|
||||||
|
|||||||
@@ -49,6 +49,14 @@ public class SchBasePointController {
|
|||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/updatePointType")
|
||||||
|
@Log("修改点位类型")
|
||||||
|
public ResponseEntity<Object> updatePointType(@Validated @RequestBody SchBasePoint entity) {
|
||||||
|
schBasePointService.updatePointType(entity);
|
||||||
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Log("删除点位管理")
|
@Log("删除点位管理")
|
||||||
@DeleteMapping
|
@DeleteMapping
|
||||||
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
|
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
|
||||||
|
|||||||
@@ -40,6 +40,13 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
|||||||
*/
|
*/
|
||||||
void update(SchBasePoint entity);
|
void update(SchBasePoint entity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑点位类型
|
||||||
|
*
|
||||||
|
* @param entity /
|
||||||
|
*/
|
||||||
|
void updatePointType(SchBasePoint entity);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 多选删除
|
* 多选删除
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -144,6 +144,22 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
|||||||
pointMapper.updateById(entity);
|
pointMapper.updateById(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePointType(SchBasePoint entity) {
|
||||||
|
SchBasePoint point = pointMapper.selectById(entity.getPoint_code());
|
||||||
|
if (point == null) {
|
||||||
|
throw new BadRequestException("点位信息不存在,请核对编码=【" + entity.getPoint_code() + "】的点位在系统中是否配置!");
|
||||||
|
}
|
||||||
|
point.setPoint_type(entity.getPoint_type());
|
||||||
|
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
|
String nickName = SecurityUtils.getCurrentNickName();
|
||||||
|
String now = DateUtil.now();
|
||||||
|
point.setUpdate_id(currentUserId);
|
||||||
|
point.setUpdate_name(nickName);
|
||||||
|
point.setUpdate_time(now);
|
||||||
|
pointMapper.updateById(point);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void deleteAll(Set<String> ids) {
|
public void deleteAll(Set<String> ids) {
|
||||||
@@ -173,6 +189,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
|||||||
}
|
}
|
||||||
return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
|
return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
.eq(SchBasePoint::getRegion_code, region.getRegion_code())
|
.eq(SchBasePoint::getRegion_code, region.getRegion_code())
|
||||||
|
|
||||||
|
//点位类型,根据传入的值是否为空增加判断
|
||||||
|
.eq(StringUtils.isNotBlank(region.getPoint_type()), SchBasePoint::getPoint_type, region.getPoint_type())
|
||||||
.eq(SchBasePoint::getIs_has_workder, true));
|
.eq(SchBasePoint::getIs_has_workder, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,184 @@
|
|||||||
|
package org.nl.wms.sch_manage.service.util.tasks.zw;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
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.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.CodeUtil;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.common.utils.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;
|
||||||
|
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.AcsTaskDto;
|
||||||
|
import org.nl.wms.sch_manage.service.util.TaskType;
|
||||||
|
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
||||||
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: zhengxuming
|
||||||
|
* @Description: 来料入库
|
||||||
|
* @Date: 2025年7月24日13:19:24
|
||||||
|
*/
|
||||||
|
@Component(value = "InBillTask")
|
||||||
|
@TaskType("InBillTask")
|
||||||
|
public class InBillTask extends AbstractTask {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务服务类
|
||||||
|
*/
|
||||||
|
@Resource
|
||||||
|
private ISchBaseTaskService taskService;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IInBillService rawAssistIStorService;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IOutBillService outBillService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String create(JSONObject json) {
|
||||||
|
SchBaseTask task = new SchBaseTask();
|
||||||
|
task.setTask_id(IdUtil.getStringId());
|
||||||
|
task.setTask_code(json.getString("TaskCode"));
|
||||||
|
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("point_code2"));
|
||||||
|
task.setPoint_code3(json.getString("point_code3"));
|
||||||
|
task.setPoint_code4(json.getString("point_code4"));
|
||||||
|
task.setVehicle_code(json.getString("vehicle_code"));
|
||||||
|
task.setVehicle_code2(json.getString("vehicle_code2"));
|
||||||
|
task.setGroup_id(json.getString("group_id"));
|
||||||
|
task.setRequest_param(json.toString());
|
||||||
|
task.setPriority(json.getString("Priority"));
|
||||||
|
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||||
|
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||||
|
task.setCreate_time(DateUtil.now());
|
||||||
|
taskService.save(task);
|
||||||
|
return task.getTask_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AcsTaskDto sendAcsParam(String taskId) {
|
||||||
|
SchBaseTask taskDao = taskService.getById(taskId);
|
||||||
|
// 组织下发给acs的数据
|
||||||
|
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||||
|
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
||||||
|
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||||
|
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||||
|
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||||
|
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
|
||||||
|
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
|
||||||
|
acsTaskDto.setPriority(taskDao.getPriority());
|
||||||
|
acsTaskDto.setTask_type("1");
|
||||||
|
return acsTaskDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateStatus(String task_code, TaskStatus status) {
|
||||||
|
// 校验任务
|
||||||
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
|
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||||
|
throw new BadRequestException("该任务已完成!");
|
||||||
|
}
|
||||||
|
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||||
|
throw new BadRequestException("该任务已取消!");
|
||||||
|
}
|
||||||
|
// 根据传来的类型去对任务进行操作
|
||||||
|
if (status.equals(TaskStatus.EXECUTING)) {
|
||||||
|
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||||
|
taskObj.setRemark("执行中");
|
||||||
|
taskService.updateById(taskObj);
|
||||||
|
}
|
||||||
|
if (status.equals(TaskStatus.FINISHED)) {
|
||||||
|
this.finishTask(taskObj);
|
||||||
|
}
|
||||||
|
if (status.equals(TaskStatus.CANCELED)) {
|
||||||
|
this.cancelTask(taskObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forceFinish(String task_code) {
|
||||||
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
|
if (ObjectUtil.isEmpty(taskObj)) {
|
||||||
|
throw new BadRequestException("该任务不存在");
|
||||||
|
}
|
||||||
|
this.finishTask(taskObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel(String task_code) {
|
||||||
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
|
if (ObjectUtil.isEmpty(taskObj)) {
|
||||||
|
throw new BadRequestException("该任务不存在");
|
||||||
|
}
|
||||||
|
if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||||
|
throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||||
|
}
|
||||||
|
this.cancelTask(taskObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void backMes(String task_code) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void finishTask(SchBaseTask taskObj) {
|
||||||
|
// 任务完成
|
||||||
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||||
|
taskObj.setRemark("已完成");
|
||||||
|
taskService.updateById(taskObj);
|
||||||
|
rawAssistIStorService.taskFinish(taskObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void cancelTask(SchBaseTask taskObj) {
|
||||||
|
|
||||||
|
// 取消任务
|
||||||
|
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||||
|
.set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||||
|
.set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode())
|
||||||
|
.set(SchBaseTask::getRemark,"已取消")
|
||||||
|
.eq(SchBaseTask::getTask_id,taskObj.getTask_id())
|
||||||
|
);
|
||||||
|
|
||||||
|
//分配表清除任务
|
||||||
|
ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||||
|
.set(IOStorInvDis::getTask_id,null)
|
||||||
|
.set(IOStorInvDis::getPoint_code,null)
|
||||||
|
.set(IOStorInvDis::getIs_issued,0)
|
||||||
|
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
|
||||||
|
.eq(IOStorInvDis::getTask_id,taskObj.getTask_id())
|
||||||
|
);
|
||||||
|
|
||||||
|
// 更新任务状态
|
||||||
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||||
|
taskObj.setRemark("已取消");
|
||||||
|
taskService.updateById(taskObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,4 +78,11 @@ public class IOSConstant {
|
|||||||
*/
|
*/
|
||||||
public final static String VEHICLE_OUT_TASK = "VehicleOutTask";
|
public final static String VEHICLE_OUT_TASK = "VehicleOutTask";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来料入库
|
||||||
|
* 一共需要4个点位 1、卸货区点 2、原料仓上架点 3、空托盘出库点 4、空托盘卸货区放置点
|
||||||
|
*/
|
||||||
|
public final static String IN_BILL_TASK = "InBillTask";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ public interface IInBillService extends IService<IOStorInv> {
|
|||||||
|
|
||||||
void divPoint(Map whereJson);
|
void divPoint(Map whereJson);
|
||||||
|
|
||||||
|
String divPointNoTask(Map whereJson);
|
||||||
|
|
||||||
void confirm(Map whereJson);
|
void confirm(Map whereJson);
|
||||||
|
|
||||||
void taskFinish(SchBaseTask task);
|
void taskFinish(SchBaseTask task);
|
||||||
|
|||||||
@@ -551,6 +551,22 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
|||||||
ioStorInvDisMapper.updateById(dis);
|
ioStorInvDisMapper.updateById(dis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String divPointNoTask(Map whereJson) {
|
||||||
|
ArrayList<HashMap> rows = (ArrayList<HashMap>) whereJson.get("tableMater");
|
||||||
|
String point_code = (String) whereJson.get("point_code");
|
||||||
|
HashMap<String, String> map = rows.get(0);
|
||||||
|
|
||||||
|
//判断是否已经分配好货位
|
||||||
|
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||||
|
.eq(IOStorInvDis::getIostorinvdis_id, map.get("iostorinvdis_id"))
|
||||||
|
.and(wrapper -> wrapper.isNotNull(IOStorInvDis::getStruct_code).or().ne(IOStorInvDis::getStruct_code, "")));
|
||||||
|
if (ObjectUtil.isEmpty(ioStorInvDis)) {
|
||||||
|
throw new BadRequestException("该明细还没分配货位,请先分配货位");
|
||||||
|
}
|
||||||
|
return ioStorInvDis.getStruct_code();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void confirm(Map whereJson) {
|
public void confirm(Map whereJson) {
|
||||||
|
|||||||
@@ -58,7 +58,8 @@
|
|||||||
gro.*,
|
gro.*,
|
||||||
mater.material_id,
|
mater.material_id,
|
||||||
mater.material_code,
|
mater.material_code,
|
||||||
mater.material_name
|
mater.material_name,
|
||||||
|
mater.material_model
|
||||||
FROM
|
FROM
|
||||||
md_pb_groupplate gro
|
md_pb_groupplate gro
|
||||||
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
|
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
|
||||||
@@ -68,6 +69,10 @@
|
|||||||
AND
|
AND
|
||||||
gro.storagevehicle_code = #{params.vehicleCode}
|
gro.storagevehicle_code = #{params.vehicleCode}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="params.noEmptyVehicle != null and params.noEmptyVehicle != ''">
|
||||||
|
AND
|
||||||
|
mater.material_name <![CDATA[ <> ]]> '空托盘'
|
||||||
|
</if>
|
||||||
<if test="params.status != null and params.status != ''">
|
<if test="params.status != null and params.status != ''">
|
||||||
AND
|
AND
|
||||||
gro.status = #{params.status}
|
gro.status = #{params.status}
|
||||||
@@ -76,6 +81,7 @@
|
|||||||
AND
|
AND
|
||||||
gro.qty>0
|
gro.qty>0
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
</where>
|
</where>
|
||||||
ORDER BY gro.create_time Desc
|
ORDER BY gro.create_time Desc
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@@ -259,9 +259,12 @@ export default {
|
|||||||
this.sects = res.content
|
this.sects = res.content
|
||||||
})
|
})
|
||||||
|
|
||||||
const area_type = 'RKQ'
|
const area_type = 'YLXCQ'
|
||||||
|
|
||||||
crudPoint.getPointList({ 'region_code': area_type }).then(res => {
|
// 点位类型,因为卸货区的点位类型(出库区、入库区)会变动,因需要增加点位类型字段进行判断
|
||||||
|
// 1-入库区,2-出库区
|
||||||
|
const region_type = '1'
|
||||||
|
crudPoint.getPointList({ 'region_code': area_type, 'region_type': region_type }).then(res => {
|
||||||
this.pointlist = res
|
this.pointlist = res
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -323,10 +323,12 @@ export default {
|
|||||||
crudSectattr.getSect({ 'stor_id': this.storId }).then(res => {
|
crudSectattr.getSect({ 'stor_id': this.storId }).then(res => {
|
||||||
this.sects = res.content
|
this.sects = res.content
|
||||||
})
|
})
|
||||||
|
const area_type = 'YLXCQ'
|
||||||
const area_type = 'CKQ'
|
// 点位类型,因为卸货区的点位类型(出库区、入库区)会变动,因需要增加点位类型字段进行判断
|
||||||
crudPoint.getPointList({ 'region_code': area_type }).then(res => {
|
// 1-入库区,2-出库区
|
||||||
this.pointList = res
|
const region_type = '2'
|
||||||
|
crudPoint.getPointList({ 'region_code': area_type, 'region_type': region_type }).then(res => {
|
||||||
|
this.pointlist = res
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
close() {
|
close() {
|
||||||
|
|||||||
Reference in New Issue
Block a user