木箱装箱功能开发测试,出库wql修改
This commit is contained in:
@@ -28,7 +28,7 @@ public class BstIvtBoxstackController {
|
||||
private IBstIvtBoxstackService boxstackService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询木箱堆叠位")
|
||||
// @Log("查询木箱堆叠位")
|
||||
public ResponseEntity<Object> query(BstIvtBoxstackQuery whereJson, PageQuery page) {
|
||||
return new ResponseEntity<>(boxstackService.queryAll(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
@@ -59,4 +59,4 @@ public class BstIvtBoxstackController {
|
||||
boxstackService.saveBoxStack(reqParam);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.Map;
|
||||
@Getter
|
||||
public enum BoxStackEnum {
|
||||
// 木箱任务类型
|
||||
TASK_TYPE(MapOf.of("木箱入库", "010702", "木箱出库", "010704", "木箱移库", "010705")),
|
||||
TASK_TYPE(MapOf.of("木箱入库", "010702", "木箱出库", "010704", "木箱移库", "010705","木箱缓存区到对接位", "010706","木箱行架", "010706","木箱对接位到缓存区", "010707")),
|
||||
// 木箱出入库任务二次分配类型
|
||||
AGV_ACTION_TYPE(MapOf.of("普通任务", "1", "取货二次分配", "2", "放货二次分配", "3", "取放货二次分配", "4")),
|
||||
//木箱库二次分配等待点
|
||||
@@ -34,7 +34,7 @@ public enum BoxStackEnum {
|
||||
//备货计划状态
|
||||
STOCK_UP_STATUS(MapOf.of("未开始", "1", "执行中", "2", "完成", "3")),
|
||||
//木箱库区域
|
||||
POINT_STATUS(MapOf.of("密集区", "1", "零散区", "2", "缓存区", "3", "出库区", "4", "等待区", "5"));
|
||||
POINT_STATUS(MapOf.of("密集区", "1", "零散区", "2", "缓存区", "3", "对接区", "4", "等待区", "5"));
|
||||
|
||||
|
||||
private Map<String, String> code;
|
||||
|
||||
@@ -13,4 +13,10 @@ import java.util.Map;
|
||||
public interface BstIvtBoxstackMapper extends BaseMapper<BstIvtBoxstack> {
|
||||
|
||||
List<Map> pageQuery(@Param("query") BstIvtBoxstackQuery query, @Param("pageQuery") PageQuery pageQuery);
|
||||
|
||||
List<BstIvtBoxstack> selectAndNoTask(String point_status);
|
||||
|
||||
List<BstIvtBoxstack> selectDJAndNoTask(@Param("param") BstIvtBoxstack boxstack);
|
||||
|
||||
List<BstIvtBoxstack> selectHCAndNoTask(BstIvtBoxstack bstIvtBoxstack);
|
||||
}
|
||||
|
||||
@@ -41,4 +41,43 @@
|
||||
</where>
|
||||
ORDER BY bs.stack_code ASC
|
||||
</select>
|
||||
<select id="selectAndNoTask" resultType="org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack"
|
||||
parameterType="java.lang.String">
|
||||
select * from bst_ivt_boxstack bs
|
||||
|
||||
where bs.point_status = #{point_status}
|
||||
and bs.current_layer_count = 0
|
||||
and bs.box_spec is null
|
||||
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[<]]> '07'
|
||||
AND (t.point_code2 = bs.stack_code))
|
||||
|
||||
|
||||
</select>
|
||||
<select id="selectDJAndNoTask" resultType="org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack"
|
||||
parameterType="java.lang.String">
|
||||
select * from bst_ivt_boxstack bs
|
||||
WHERE
|
||||
bs.current_layer_count > 0
|
||||
<if test="param.point_status != null and param.point_status != ''">
|
||||
AND bs.point_status = #{param.point_status}
|
||||
</if>
|
||||
|
||||
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[<]]> '07'
|
||||
AND (t.point_code1 = bs.stack_code or t.point_code2 = bs.stack_code))
|
||||
order by bs.update_time asc
|
||||
</select>
|
||||
<select id="selectHCAndNoTask" resultType="org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack"
|
||||
parameterType="org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack">
|
||||
select * from bst_ivt_boxstack bs
|
||||
WHERE
|
||||
bs.current_layer_coun= 0
|
||||
and bs.box_spec is null
|
||||
<if test="param.point_status != null and param.point_status != ''">
|
||||
AND bs.point_status = #{param.point_status}
|
||||
</if>
|
||||
|
||||
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[<]]> '07'
|
||||
AND (t.point_code1 = bs.stack_code or t.point_code2 = bs.stack_code))
|
||||
order by bs.update_time asc
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -162,7 +162,8 @@ public class PdmBiSlittingproductionplanDto extends PdmBiSlittingproductionplan
|
||||
private String point_location;
|
||||
|
||||
private String source_container_name;
|
||||
|
||||
/** 客户要求幅宽 */
|
||||
private String width_standard;
|
||||
|
||||
/**
|
||||
* 人员对应的区域
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.nl.b_lms.pdm.subpackagerelation.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
@@ -18,11 +18,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import lombok.Data;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.log4j.Log4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.enums.BoxStackEnum;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper;
|
||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
|
||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
||||
import org.nl.b_lms.pdm.info.dao.PdmBiContainerinbound;
|
||||
@@ -40,16 +41,17 @@ import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper;
|
||||
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.dto.SchBaseTaskDto;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.sch.tasks.TwoInBoxTrussTask;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.InBoxTrussTask;
|
||||
import org.nl.b_lms.sch.tasks.TwoOutBoxTask;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.MxMoveTask;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.MxOutTask;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueue;
|
||||
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.OutBoxManageServiceImpl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
@@ -64,17 +66,13 @@ import org.nl.modules.common.utils.FileUtil;
|
||||
import org.nl.modules.logging.service.EsLogService;
|
||||
import org.nl.modules.logging.service.dto.LogQuery;
|
||||
import org.nl.modules.logging.service.dto.LogRepositoryDTO;
|
||||
import org.nl.modules.logging.service.impl.LuceneLogServiceImpl;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl;
|
||||
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
|
||||
import org.nl.wms.sch.AcsUtil;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
@@ -87,9 +85,7 @@ import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -145,6 +141,16 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Autowired
|
||||
private IpdmBiSubpackagerelationService subpackagerelationService;
|
||||
|
||||
@Resource
|
||||
private BstIvtBoxstackMapper boxstackMapper;
|
||||
|
||||
|
||||
|
||||
@Autowired
|
||||
private MxOutTask mxOutTask;
|
||||
|
||||
|
||||
|
||||
@Resource
|
||||
@Qualifier("threadPoolExecutor")
|
||||
private ThreadPoolExecutor pool;
|
||||
@@ -168,8 +174,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
/**
|
||||
* 查询待检区木箱规格
|
||||
*
|
||||
* @param query 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @param query 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
*/
|
||||
@Override
|
||||
public Object queryBoxSpec(Map query, Pageable pageQuery) {
|
||||
@@ -188,9 +194,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据订单号查询子卷信息
|
||||
*
|
||||
* @param whereJson 查询条件
|
||||
*/
|
||||
@Override
|
||||
@@ -237,13 +243,16 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
r.setBox_group("0");
|
||||
}
|
||||
}
|
||||
// 调用方法获取木箱料号:输入:子卷号、输出:木箱信息
|
||||
r.setBox_type("");
|
||||
|
||||
//
|
||||
PdmBiOrderbominfo bomInfoDao = iPdmBiOrderbominfoService.getBiOrderbominfoByContainer(r.getContainer_name());
|
||||
if (ObjectUtil.isNotEmpty(bomInfoDao)) {
|
||||
r.setBox_type(bomInfoDao.getProductName());
|
||||
//是否开启mes
|
||||
String isOnMes = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_on_mes").getValue();
|
||||
if (isOnMes.equals("1")) {
|
||||
// 调用方法获取木箱料号:输入:子卷号、输出:木箱信息
|
||||
r.setBox_type("");
|
||||
PdmBiOrderbominfo bomInfoDao = iPdmBiOrderbominfoService.getBiOrderbominfoByContainer(r.getContainer_name());
|
||||
if (ObjectUtil.isNotEmpty(bomInfoDao)) {
|
||||
r.setBox_type(bomInfoDao.getProductName());
|
||||
}
|
||||
}
|
||||
});
|
||||
return pdmBiSubpackagerelationList;
|
||||
@@ -279,12 +288,12 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateEntityList(JSONObject whereJson) {
|
||||
String deviceCode = "ZXQ_1_1";
|
||||
List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class);
|
||||
|
||||
List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class);
|
||||
//子卷信息校验
|
||||
checkEntityList(whereJson, packagerelationList);
|
||||
//均衡获取木箱出库装箱区对接位
|
||||
//= getPointCode(packagerelationList.size());
|
||||
//= getPointCode(packagerelationList.size());
|
||||
List<String> workIdList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream()
|
||||
.map(PdmBiSubpackagerelation::getWorkorder_id)
|
||||
.map(String::valueOf)
|
||||
@@ -299,13 +308,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
.in("container_name", containerNameList));
|
||||
|
||||
for (BstIvtPackageinfoivt ivtPackageinfoivt : ivtList) {
|
||||
if (!ivtPackageinfoivt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))){
|
||||
throw new BadRequestException("当前子卷未质检"+ivtPackageinfoivt.getContainer_name());
|
||||
if (!ivtPackageinfoivt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
|
||||
throw new BadRequestException("当前子卷未质检" + ivtPackageinfoivt.getContainer_name());
|
||||
}
|
||||
}
|
||||
List<PdmBiSlittingproductionplan> planList = iPdmBiSlittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getContainer_name, containerNameList)
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete,IOSEnum.IS_NOTANDYES.code("否"))
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
|
||||
);
|
||||
List<PdmBiSubpackagerelation> subpackagerelations = this.list(new QueryWrapper<PdmBiSubpackagerelation>().in("workorder_id", workIdList));
|
||||
if (ObjectUtils.isEmpty(planList)) {
|
||||
@@ -314,9 +323,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
Optional<PdmBiSubpackagerelation> any = subpackagerelations.stream()
|
||||
.filter(sub -> sub.getStatus().equals("0") && StringUtils.isNotEmpty(sub.getPackage_box_sn()))
|
||||
.findAny();
|
||||
if (any.isPresent()){
|
||||
if (any.isPresent()) {
|
||||
PdmBiSubpackagerelation subpackagerelation = any.get();
|
||||
throw new BadRequestException(subpackagerelation.getPackage_box_sn()+"包装关系已存在"+subpackagerelation.getPackage_box_sn()+",如重新生成请确认MES跟LMS包装关系已解绑定");
|
||||
throw new BadRequestException(subpackagerelation.getPackage_box_sn() + "包装关系已存在" + subpackagerelation.getPackage_box_sn() + ",如重新生成请确认MES跟LMS包装关系已解绑定");
|
||||
}
|
||||
|
||||
BigDecimal totalWeight;
|
||||
@@ -339,11 +348,11 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
.max(Integer::compareTo)
|
||||
.orElse(0) + 1;
|
||||
//木箱出库任务
|
||||
// outBox(workIdList, containerNameList, deviceCode, maxBoxGroup, whereJson, totalWeight);
|
||||
outBox(workIdList, maxBoxGroup, whereJson, totalWeight);
|
||||
List<Long> collect = ivtList.stream().map(a -> a.getIvt_id()).collect(Collectors.toList());
|
||||
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>()
|
||||
.set("update_time", DateUtil.now())
|
||||
.in("ivt_id",collect));
|
||||
.in("ivt_id", collect));
|
||||
|
||||
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
|
||||
.eq("status", "0")
|
||||
@@ -352,14 +361,14 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
Set<String> containers = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toSet());
|
||||
String boxSn = subList.get(0).getPackage_box_sn();
|
||||
//子卷到装箱区
|
||||
// agvTransfer(containers, deviceCode);
|
||||
agvTransfer(containers);
|
||||
|
||||
PdmBiContainerinbound pdmBiContainerinbound = new PdmBiContainerinbound();
|
||||
pdmBiContainerinbound.setId(org.nl.common.utils.IdUtil.getStringId());
|
||||
pdmBiContainerinbound.setContainer_name(String.join(",", containerNameList));
|
||||
pdmBiContainerinbound.setBox(boxSn);
|
||||
Boolean inbound = whereJson.getBoolean("inbound");
|
||||
if (inbound!=null){
|
||||
if (inbound != null) {
|
||||
pdmBiContainerinbound.setInbound(inbound);
|
||||
}
|
||||
iPdmBiContainerinboundService.save(pdmBiContainerinbound);
|
||||
@@ -370,17 +379,17 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Override
|
||||
public List zjInBound(JSONObject whereJson) {
|
||||
String containerName = whereJson.getString("container_name");
|
||||
if (StringUtils.isEmpty(containerName)){
|
||||
if (StringUtils.isEmpty(containerName)) {
|
||||
throw new BadRequestException("子卷编码不能为空");
|
||||
}
|
||||
String[] split = containerName.split(",");
|
||||
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
|
||||
.eq("status", "0")
|
||||
.in("container_name", split));
|
||||
if (CollectionUtils.isEmpty(subList)){
|
||||
if (CollectionUtils.isEmpty(subList)) {
|
||||
throw new BadRequestException("当前子卷还为组盘");
|
||||
}
|
||||
if (subList.size() != split.length){
|
||||
if (subList.size() != split.length) {
|
||||
throw new BadRequestException("子卷包装信息与子卷不相符合");
|
||||
}
|
||||
return subList;
|
||||
@@ -390,7 +399,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Transactional
|
||||
public void zjInBoundConfirm(JSONObject param) {
|
||||
String containerName = param.getString("search");
|
||||
if (StringUtils.isEmpty(containerName)){
|
||||
if (StringUtils.isEmpty(containerName)) {
|
||||
throw new BadRequestException("子卷编码不能为空");
|
||||
}
|
||||
|
||||
@@ -399,21 +408,21 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
|
||||
.eq("status", "0")
|
||||
.in("container_name", split));
|
||||
if (subList.size() != split.length){
|
||||
if (subList.size() != split.length) {
|
||||
throw new BadRequestException("子卷包装信息与子卷不相符合");
|
||||
}
|
||||
Set<String> collect = subList.stream().map(PdmBiSubpackagerelation::getPackage_box_sn).collect(Collectors.toSet());
|
||||
List<String> containerList = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toList());
|
||||
if (collect.size() == 0){
|
||||
if (collect.size() == 0) {
|
||||
throw new BadRequestException("当前子卷还未进行装箱组盘操作");
|
||||
}
|
||||
if (collect.size()>1){
|
||||
throw new BadRequestException("当前子卷不属于同一组"+ collect);
|
||||
if (collect.size() > 1) {
|
||||
throw new BadRequestException("当前子卷不属于同一组" + collect);
|
||||
}
|
||||
if (subList.get(0).getQuanlity_in_box().intValue()!= split.length){
|
||||
throw new BadRequestException("当前木箱"+subList.get(0).getQuanlity_in_box()+"要装箱的子卷"+split.length+"未装完");
|
||||
if (subList.get(0).getQuanlity_in_box().intValue() != split.length) {
|
||||
throw new BadRequestException("当前木箱" + subList.get(0).getQuanlity_in_box() + "要装箱的子卷" + split.length + "未装完");
|
||||
}
|
||||
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZXRK,null,Boolean.TRUE,null,containerList);
|
||||
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZXRK, null, Boolean.TRUE, null, containerList);
|
||||
|
||||
}
|
||||
|
||||
@@ -421,13 +430,14 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
JSONArray jsonArray = whereJson.getJSONArray("tableMater");
|
||||
if (jsonArray == null || jsonArray.size() == 0) {
|
||||
throw new BadRequestException("无选中子卷信息");
|
||||
} if (jsonArray == null || jsonArray.size() == 0) {
|
||||
}
|
||||
if (jsonArray == null || jsonArray.size() == 0) {
|
||||
throw new BadRequestException("无选中子卷信息");
|
||||
}
|
||||
if (ObjectUtils.isEmpty(packagerelationList)) {
|
||||
throw new BadRequestException("无选中子卷信息");
|
||||
}
|
||||
if (!packagerelationList.get(0).getBox_type().equals(whereJson.getString("checked"))){
|
||||
if (!packagerelationList.get(0).getBox_type().equals(whereJson.getString("checked"))) {
|
||||
throw new BadRequestException("分切计划的木箱规格与所选木箱规格不一致,请重新操作");
|
||||
}
|
||||
//检查是否存在已分配规格的子卷号
|
||||
@@ -454,56 +464,105 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 空木箱绑定
|
||||
*/
|
||||
public void outBox(List<String> workIdList, Set<String> containerNameList, String deviceCode, Integer maxBoxGroup, JSONObject whereJson, BigDecimal totalWeight) {
|
||||
JSONObject boxInfo = new JSONObject();
|
||||
//确定木箱出库装箱区
|
||||
boxInfo.put("device_code", deviceCode);
|
||||
boxInfo.put("material_code", whereJson.getString("checked"));
|
||||
boxInfo.put("num", workIdList.size());
|
||||
String boxSn = outBoxManageService.outBoxNoTask(boxInfo);
|
||||
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
|
||||
new QueryWrapper<BstIvtBoxinfo>().lambda()
|
||||
.eq(BstIvtBoxinfo::getBox_no, boxSn)
|
||||
);
|
||||
//木箱重量
|
||||
BigDecimal boxWeight = new BigDecimal(boxDao.getBox_weight());
|
||||
public void outBox(List<String> workIdList, Integer maxBoxGroup, JSONObject whereJson, BigDecimal totalWeight) {
|
||||
|
||||
//查看对接位是否有同种规格的木箱,有的话生成木箱行架任务,没有生成agv搬运任务
|
||||
List<BstIvtBoxstack> bstIvtBoxstacks = boxstackMapper.selectList(new QueryWrapper<BstIvtBoxstack>()
|
||||
.eq("box_spec", whereJson.getString("checked"))
|
||||
.gt("current_layer_count", 0)
|
||||
.eq("point_status", BoxStackEnum.POINT_STATUS.code("对接区"))
|
||||
.orderByAsc("update_time"));
|
||||
if (CollUtil.isEmpty(bstIvtBoxstacks)) {
|
||||
List<BstIvtBoxstack> bstIvtBoxstacks1 = boxstackMapper.selectList(new QueryWrapper<BstIvtBoxstack>().eq("box_spec", whereJson.getString("checked")).eq("point_status", BoxStackEnum.POINT_STATUS.code("缓存区")));
|
||||
if (CollUtil.isEmpty(bstIvtBoxstacks1)) {
|
||||
throw new BadRequestException("缓存区无可用木箱,请新建备货计划");
|
||||
}
|
||||
//查看是否有相同物料类型的任务,如果有合并任务组,三个为一组
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getTask_type, BoxStackEnum.TASK_TYPE.code("木箱缓存区到对接位"))
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
|
||||
.eq(SchBaseTask::getMaterial_code, whereJson.getString("checked")));
|
||||
if (!taskList.isEmpty()) {
|
||||
List<SchBaseTask> taskSort = taskList.stream().filter(task -> task.getSort_seq().compareTo(BigDecimal.valueOf(3)) > 0).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(taskSort)) {
|
||||
SchBaseTask schBaseTask = taskSort.get(0);
|
||||
schBaseTask.setSort_seq(schBaseTask.getSort_seq().add(BigDecimal.valueOf(1)));
|
||||
taskService.updateById(schBaseTask);
|
||||
} else {
|
||||
//创建确定终点的半任务
|
||||
createTask(whereJson, bstIvtBoxstacks1);
|
||||
}
|
||||
} else {
|
||||
createTask(whereJson, bstIvtBoxstacks1);
|
||||
}
|
||||
} else {
|
||||
InBoxTrussTask inBoxTrussTask = new InBoxTrussTask();
|
||||
JSONObject taskParam = new JSONObject();
|
||||
|
||||
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱行架"));
|
||||
taskParam.put("acs_task_type", IOSEnum.ACS_TYPE.code("子卷装箱行架任务"));
|
||||
taskParam.put("start_device_code", bstIvtBoxstacks.get(0).getStack_code());
|
||||
taskParam.put("next_device_code", IOSEnum.SPECIAL_POINTS.code("退货行架对接位"));
|
||||
taskParam.put("material_code", whereJson.getString("checked"));
|
||||
taskParam.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
if (StrUtil.isEmpty(bstIvtBoxstacks.get(0).getBox_no())){
|
||||
throw new BadRequestException("未找到对接位木箱信息");
|
||||
}
|
||||
String[] split = bstIvtBoxstacks.get(0).getBox_no().split(",");
|
||||
// 根据当前层查询木箱信息
|
||||
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
|
||||
new QueryWrapper<BstIvtBoxinfo>().lambda()
|
||||
.eq(BstIvtBoxinfo::getBox_no, split[bstIvtBoxstacks.get(0).getCurrent_layer_count()]));
|
||||
if (boxDao == null) {
|
||||
throw new BadRequestException("木箱不存在!");
|
||||
}
|
||||
JSONObject boxParam = new JSONObject();
|
||||
boxParam.put("layer", whereJson.getString("layer"));
|
||||
boxParam.put("length", boxDao.getBox_length());
|
||||
boxParam.put("width", boxDao.getBox_width());
|
||||
boxParam.put("height", boxDao.getBox_high());
|
||||
boxParam.put("containerType", boxDao.getVehicle_type());
|
||||
boxParam.put("barcode",boxDao.getBox_no());
|
||||
taskParam.put("request_param", boxParam.toString());
|
||||
inBoxTrussTask.createTask(taskParam);
|
||||
}
|
||||
List<BstIvtBoxinfo> bstIvtBoxinfos = bstIvtBoxinfoMapper.selectList(new QueryWrapper<BstIvtBoxinfo>().eq("material_code", whereJson.getString("checked")));
|
||||
if (bstIvtBoxinfos.isEmpty()) {
|
||||
throw new BadRequestException("物料信息未维护");
|
||||
}
|
||||
|
||||
//维护包装关系
|
||||
BstIvtBoxinfo boxinfo = bstIvtBoxinfos.get(0);
|
||||
BigDecimal boxWeight = (boxinfo.getBox_weight() != null)
|
||||
? new BigDecimal(boxinfo.getBox_weight())
|
||||
: BigDecimal.ZERO;
|
||||
totalWeight = totalWeight.add(boxWeight);
|
||||
//更新及子卷包装状态已分配规格及木箱规格组
|
||||
String weightTotal = totalWeight.toString();
|
||||
UpdateWrapper<PdmBiSubpackagerelation> updateWrapper = new UpdateWrapper<>();
|
||||
//理论毛重
|
||||
updateWrapper.set("box_weight", NumberUtil.round(totalWeight, 2).toString());
|
||||
updateWrapper.set("package_box_sn", boxDao.getBox_no());
|
||||
updateWrapper.set("package_box_sn", bstIvtBoxinfos.get(0).getBox_no());
|
||||
updateWrapper.set("quanlity_in_box", workIdList.size());
|
||||
updateWrapper.set("box_type", boxDao.getMaterial_code());
|
||||
updateWrapper.set("box_length", boxDao.getBox_length());
|
||||
updateWrapper.set("box_width", boxDao.getBox_width());
|
||||
updateWrapper.set("box_high", boxDao.getBox_high());
|
||||
updateWrapper.set("box_type", bstIvtBoxinfos.get(0).getMaterial_code());
|
||||
updateWrapper.set("box_length", bstIvtBoxinfos.get(0).getBox_length());
|
||||
updateWrapper.set("box_width", bstIvtBoxinfos.get(0).getBox_width());
|
||||
updateWrapper.set("box_high", bstIvtBoxinfos.get(0).getBox_high());
|
||||
updateWrapper.set("box_group", maxBoxGroup);
|
||||
updateWrapper.set("status", "0");
|
||||
updateWrapper.in("workorder_id", workIdList);
|
||||
pdmBiSubpackagerelationMapper.update(null, updateWrapper);
|
||||
String isOnMes = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_on_mes").getValue();
|
||||
if (isOnMes.equals(IOSEnum.IS_NOTANDYES.code("是"))) {
|
||||
//给MES传输子卷包装关系
|
||||
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ, null, Boolean.TRUE, null, containerNameList.stream().collect(Collectors.toList()));
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
log.error("----回传子卷包装关系----");
|
||||
String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue();
|
||||
if ("1".equals(isConnect2)) {
|
||||
transferBoxPackageToMes(false, whereJson, containerNameList, boxSn, weightTotal);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("子卷装箱异常,transferBoxPackageToMes给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e);
|
||||
}
|
||||
}, pool);
|
||||
}
|
||||
}
|
||||
|
||||
private void createTask(JSONObject whereJson, List<BstIvtBoxstack> bstIvtBoxstacks1) {
|
||||
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱缓存区到对接位"));
|
||||
taskParam.put("point_code1", bstIvtBoxstacks1.get(0).getStack_code());
|
||||
taskParam.put("material_code", whereJson.getString("checked"));
|
||||
taskParam.put("task_status", TaskStatusEnum.SURE_END.getCode());
|
||||
mxOutTask.createTask(taskParam);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -601,7 +660,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 多选删除
|
||||
*
|
||||
@@ -675,22 +733,21 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
}
|
||||
}
|
||||
|
||||
protected void agvTransfer(Set<String> containerNameList, String deviceCode) {
|
||||
protected void agvTransfer(Set<String> containerNameList) {
|
||||
//待检区点位
|
||||
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService
|
||||
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
|
||||
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
|
||||
.in(BstIvtPackageinfoivt::getContainer_name,containerNameList));
|
||||
if (CollectionUtils.isEmpty(djqPointList)){
|
||||
throw new BadRequestException(containerNameList+"子卷信息不存在");
|
||||
.in(BstIvtPackageinfoivt::getContainer_name, containerNameList));
|
||||
if (CollectionUtils.isEmpty(djqPointList)) {
|
||||
throw new BadRequestException(containerNameList + "子卷信息不存在");
|
||||
}
|
||||
boolean hasNo = djqPointList.stream().anyMatch(a -> !a.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
|
||||
if (hasNo){
|
||||
throw new BadRequestException(containerNameList+"子卷未质检合格");
|
||||
if (hasNo) {
|
||||
throw new BadRequestException(containerNameList + "子卷未质检合格");
|
||||
}
|
||||
List<BstIvtPackageinfoivt> djqPoints = djqPointList.stream().filter(a -> a.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList());
|
||||
//任务组id
|
||||
String groupId = deviceCode.substring(deviceCode.indexOf("_") + 1, deviceCode.indexOf("_", deviceCode.indexOf("_") + 1));
|
||||
|
||||
String now = DateUtil.now();
|
||||
for (int i1 = 0; i1 < djqPoints.size(); i1++) {
|
||||
BstIvtPackageinfoivt item = djqPoints.get(i1);
|
||||
@@ -698,17 +755,22 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getVehicle_code, item.getContainer_name()).eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))
|
||||
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()));
|
||||
if (CollectionUtils.isEmpty(taskList)){
|
||||
|
||||
//装箱区有空位且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
if (ObjectUtils.isEmpty(zxqPackageinfoivtList)) {
|
||||
throw new BadRequestException(containerNameList + "装箱区无可用点位,请稍后再试");
|
||||
}
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
JSONObject jo = new JSONObject();
|
||||
//确定搬运任务不执行
|
||||
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
|
||||
jo.put("vehicle_code", item.getContainer_name());
|
||||
jo.put("point_code1", item.getPoint_code());
|
||||
jo.put("date",now);
|
||||
jo.put("task_step",i1);
|
||||
jo.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code());
|
||||
jo.put("date", now);
|
||||
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
|
||||
jo.put("vehicle_code2", groupId);
|
||||
zxqTask.createTaskReturnTask(jo);
|
||||
zxqTask.createTask(jo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,39 +779,39 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Override
|
||||
public Map toEndSubpackagerelation(String code) {
|
||||
HashMap result = MapOf.of("status", HttpStatus.OK.value());
|
||||
result.put("message", code+"子卷包装解除成功");
|
||||
if (StringUtils.isEmpty(code)){
|
||||
result.put("message", code + "子卷包装解除成功");
|
||||
if (StringUtils.isEmpty(code)) {
|
||||
throw new BadRequestException("子卷编码不能为空");
|
||||
}
|
||||
PdmBiSubpackagerelation containerName = this.getOne(new QueryWrapper<PdmBiSubpackagerelation>().eq("container_name", code));
|
||||
if (containerName==null){
|
||||
throw new BadRequestException("当前子卷"+code+"还未生成子卷包装");
|
||||
if (containerName == null) {
|
||||
throw new BadRequestException("当前子卷" + code + "还未生成子卷包装");
|
||||
}
|
||||
if (SUBEnum.STATUS.code("入库").equals(containerName.getStatus())
|
||||
||SUBEnum.STATUS.code("出库").equals(containerName.getStatus())){
|
||||
throw new BadRequestException("当前子卷"+code+"已完成出入库不允许手动解除");
|
||||
|| SUBEnum.STATUS.code("出库").equals(containerName.getStatus())) {
|
||||
throw new BadRequestException("当前子卷" + code + "已完成出入库不允许手动解除");
|
||||
}
|
||||
if (StringUtils.isNotEmpty(containerName.getPackage_box_sn())){
|
||||
if (StringUtils.isNotEmpty(containerName.getPackage_box_sn())) {
|
||||
String packageBoxSn = containerName.getPackage_box_sn();
|
||||
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
|
||||
JSONObject attr = attrTab.query("storagevehicle_code = '" + packageBoxSn + "'").uniqueResult(0);
|
||||
if (ObjectUtils.isNotEmpty(attr)){
|
||||
if (ObjectUtils.isNotEmpty(attr)) {
|
||||
String structCode = attr.getString("struct_code");
|
||||
int count = taskService.count(new QueryWrapper<SchBaseTask>()
|
||||
.eq("task_type", "010704")
|
||||
.eq("is_delete", "0")
|
||||
.eq("point_code1", structCode)
|
||||
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
|
||||
if (count>0){
|
||||
if (count > 0) {
|
||||
throw new BadRequestException("当前子卷已经生成装箱入库任务,不允许直接解绑");
|
||||
}
|
||||
attr.put("lock_type","1");
|
||||
attr.put("lock_type", "1");
|
||||
attrTab.update(attr);
|
||||
}
|
||||
}
|
||||
this.removeById(containerName.getWorkorder_id());
|
||||
result.put("message", code+"子卷包装解除成功,同时确认MES装箱以解绑定");
|
||||
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_REMOVE,MapOf.of("子卷编号",code),Boolean.TRUE,null,code);
|
||||
result.put("message", code + "子卷包装解除成功,同时确认MES装箱以解绑定");
|
||||
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_REMOVE, MapOf.of("子卷编号", code), Boolean.TRUE, null, code);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -767,12 +829,12 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
public void boxReturn(JSONObject whereJson) {
|
||||
String deviceCode = whereJson.getString("device_code");
|
||||
String box = whereJson.getString("box");
|
||||
if (StringUtils.isEmpty(deviceCode)||StringUtils.isEmpty(box)){
|
||||
if (StringUtils.isEmpty(deviceCode) || StringUtils.isEmpty(box)) {
|
||||
throw new BadRequestException("参数不全");
|
||||
}
|
||||
PdmBiSubpackagerelation one = this.getOne(new QueryWrapper<PdmBiSubpackagerelation>()
|
||||
.eq("container_name", whereJson.getString("container_name")));
|
||||
if (one!=null){
|
||||
if (one != null) {
|
||||
throw new BadRequestException("包装关系存在,请先在MES和LMS解绑包装关系");
|
||||
}
|
||||
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>()
|
||||
@@ -792,16 +854,16 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
} else {
|
||||
height = "3";
|
||||
}
|
||||
acsParam.put("device_code",deviceCode);
|
||||
acsParam.put("sub_volume","BR"+box);
|
||||
acsParam.put("height_level",height);
|
||||
acsParam.put("product_area","BLK");
|
||||
AcsUtil.notifyAcsObject("api/wms/returnBox", acsParam);
|
||||
acsParam.put("device_code", deviceCode);
|
||||
acsParam.put("sub_volume", "BR" + box);
|
||||
acsParam.put("height_level", height);
|
||||
acsParam.put("product_area", "BLK");
|
||||
AcsUtil.notifyAcsObject("api/wms/returnBox", acsParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadData(Integer day, HttpServletResponse response) {
|
||||
if (day>3){
|
||||
if (day > 3) {
|
||||
throw new BadRequestException("只能导出前三天数据");
|
||||
}
|
||||
Date time = DateUtil.offsetDay(new Date(), -day);
|
||||
@@ -815,57 +877,57 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
JSONObject logPage = luceneLogService.query(query);
|
||||
//forcedFeedShaft
|
||||
int total = logPage.getIntValue("total");
|
||||
List<Map<String,String>> log = new ArrayList<>();
|
||||
if (total>0){
|
||||
PageResult<LogRepositoryDTO> page = (PageResult)logPage.get("page");
|
||||
List<Map<String, String>> log = new ArrayList<>();
|
||||
if (total > 0) {
|
||||
PageResult<LogRepositoryDTO> page = (PageResult) logPage.get("page");
|
||||
for (LogRepositoryDTO dto : page) {
|
||||
String message = dto.getMessage();
|
||||
if (!StringUtils.isEmpty(message)){
|
||||
if (!StringUtils.isEmpty(message)) {
|
||||
String requestTime = dto.getRequestTime();
|
||||
int start = message.indexOf("{");
|
||||
int end = message.lastIndexOf("}");
|
||||
if (start>0 && end>start){
|
||||
if (start > 0 && end > start) {
|
||||
String substring = message.substring(start, end + 1);
|
||||
JSONObject object = JSONObject.parseObject(substring);
|
||||
String deviceCode = object.getString("device_code");
|
||||
log.add(MapOf.of("呼叫时间",requestTime,"设备",deviceCode));
|
||||
log.add(MapOf.of("呼叫时间", requestTime, "设备", deviceCode));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Map<String,String>> databases = this.baseMapper.downloadData(time.toString());
|
||||
List<Map<String, String>> databases = this.baseMapper.downloadData(time.toString());
|
||||
List<Map<String, String>> ioData = new ArrayList<>();
|
||||
int max = Math.max(databases.size(), log.size());
|
||||
for (int i = 0; i < max; i++) {
|
||||
Map<String, String> item = new HashMap<>();
|
||||
if (databases.size()>i){
|
||||
if (databases.size() > i) {
|
||||
Map<String, String> item1 = databases.get(i);
|
||||
item.putAll(item1);
|
||||
}else {
|
||||
item.put("下卷设备","");
|
||||
item.put("下卷开始","");
|
||||
item.put("下卷结束","");
|
||||
} else {
|
||||
item.put("下卷设备", "");
|
||||
item.put("下卷开始", "");
|
||||
item.put("下卷结束", "");
|
||||
}
|
||||
if (log.size()>i){
|
||||
if (log.size() > i) {
|
||||
Map<String, String> item2 = log.get(i);
|
||||
item.putAll(item2);
|
||||
}else {
|
||||
item.put("设备","");
|
||||
item.put("呼叫时间","");
|
||||
} else {
|
||||
item.put("设备", "");
|
||||
item.put("呼叫时间", "");
|
||||
}
|
||||
item.put("分割","");
|
||||
if (item.keySet().size()==6){
|
||||
item.put("分割", "");
|
||||
if (item.keySet().size() == 6) {
|
||||
ioData.add(item);
|
||||
}
|
||||
}
|
||||
String[] strings = new String[6];
|
||||
strings[0] = "下卷设备";
|
||||
strings[1] ="下卷开始";
|
||||
strings[2] ="下卷结束";
|
||||
strings[1] = "下卷开始";
|
||||
strings[2] = "下卷结束";
|
||||
strings[3] = "分割";
|
||||
strings[4] = "设备";
|
||||
strings[5] = "呼叫时间";
|
||||
new FileUtil().downloadExcelIO(ioData,strings,response);
|
||||
new FileUtil().downloadExcelIO(ioData, strings, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -881,7 +943,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
|
||||
@Override
|
||||
public void packagerelation(PdmBiSubpackagerelationQuery pdmBiSubpackagerelationQuery) {
|
||||
PdmBiSubpackagerelation subpackagerelation = new PdmBiSubpackagerelation();
|
||||
PdmBiSubpackagerelation subpackagerelation = new PdmBiSubpackagerelation();
|
||||
subpackagerelation.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
subpackagerelation.setSale_order_name(pdmBiSubpackagerelationQuery.getSale_order_name());
|
||||
subpackagerelation.setCustomer_name(pdmBiSubpackagerelationQuery.getCustomer_name());
|
||||
|
||||
@@ -578,11 +578,12 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
subpackagerelation.setThickness(slittingproductionplan.getThickness());
|
||||
|
||||
//重量运算
|
||||
Double paper_weight = Double.valueOf(slittingproductionplan.getPaper_weight());
|
||||
Double weight = Double.valueOf(slittingproductionplan.getWeight());
|
||||
Double packagWeightStr = Double.valueOf(packagWeight);
|
||||
String taltotal = String.valueOf(weight-paper_weight-packagWeightStr);
|
||||
subpackagerelation.setNet_weight(taltotal);
|
||||
|
||||
Double paperWeight = Optional.ofNullable(slittingproductionplan.getPaper_weight()).map(Double::valueOf).orElse(0.0);
|
||||
Double weight = Optional.ofNullable(slittingproductionplan.getWeight()).map(Double::valueOf).orElse(0.0);
|
||||
Double packageWeight = Optional.ofNullable(packagWeight).map(Double::valueOf).orElse(0.0);
|
||||
String total = String.valueOf(weight - paperWeight - packageWeight);
|
||||
subpackagerelation.setNet_weight(total);
|
||||
subpackagerelation.setLength(String.valueOf(slittingproductionplan.getSplit_height()));
|
||||
subpackagerelation.setStatus("99");
|
||||
subpackagerelation.setIsRePrintPackageBoxLabel("0");
|
||||
@@ -596,6 +597,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
subpackagerelation.setNeed_delete("99");
|
||||
subpackagerelation.setJoint_type(slittingproductionplan.getJoint_type());
|
||||
subpackagerelation.setMaterial_type(slittingproductionplan.getMaterial_type());
|
||||
subpackagerelation.setBox_type(slittingproductionplan.getBox_code());
|
||||
subpackagerelationService.save(subpackagerelation);
|
||||
} else {
|
||||
//更新入包装关系
|
||||
@@ -626,6 +628,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
subpackagerelation.setNeed_delete("99");
|
||||
subpackagerelation.setJoint_type(slittingproductionplan.getJoint_type());
|
||||
subpackagerelation.setMaterial_type(slittingproductionplan.getMaterial_type());
|
||||
subpackagerelation.setBox_type(slittingproductionplan.getBox_code());
|
||||
subpackagerelationService.update(subpackagerelation);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,10 +106,8 @@ public class TwoOutEmpTask extends AbstractAcsTask {
|
||||
if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务已执行不能取消");
|
||||
}
|
||||
|
||||
// 更新任务表删除字段
|
||||
map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
// 解锁仓位
|
||||
JSONObject jsonAttr = attrTab.query("struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
|
||||
jsonAttr.put("lock_type",IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.b_lms.sch.tasks;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -7,6 +8,12 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||
import org.nl.b_lms.sch.point.dao.SchBasePoint;
|
||||
import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.LashManageServiceImpl;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
@@ -19,11 +26,13 @@ import org.nl.wms.sch.AcsTaskDto;
|
||||
import org.nl.wms.sch.AcsUtil;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -34,126 +43,75 @@ import java.util.List;
|
||||
public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = TwoOutHeapTask.class.getName();
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
* 下发给ACS时需要特殊处理
|
||||
*/
|
||||
//任务表
|
||||
WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
|
||||
|
||||
List<JSONObject> taskArrAll = wo_Task
|
||||
.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
@Autowired
|
||||
private SchBaseTaskMapper schBaseTaskMapper;
|
||||
|
||||
// 是否下发多个AGV输送出库任务
|
||||
String is_send_many = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_send_many").getValue();
|
||||
// 是否异常出库口任务
|
||||
String TWO_EXCEP = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXCEP").getValue();
|
||||
@Autowired
|
||||
private SchBasePointMapper schPointMapper;
|
||||
|
||||
List<JSONObject> taskArr;
|
||||
if (TWO_EXCEP.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
if (is_send_many.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
// 只允许每个行架点位有一条任务
|
||||
taskArr = sendTask(taskArrAll);
|
||||
} else {
|
||||
taskArr = taskArrAll;
|
||||
}
|
||||
} else {
|
||||
taskArr = taskArrAll;
|
||||
}
|
||||
|
||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||
for (int i = 0; i < taskArr.size(); i++) {
|
||||
JSONObject json = taskArr.get(i);
|
||||
|
||||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.ext_task_id(json.getString("task_id"))
|
||||
.task_code(json.getString("task_code"))
|
||||
.task_type(json.getString("acs_task_type"))
|
||||
.start_device_code(json.getString("point_code1"))
|
||||
.next_device_code(json.getString("point_code2"))
|
||||
.vehicle_code(json.getString("vehicle_code2"))
|
||||
.vehicle_code2(json.getString("vehicle_code"))
|
||||
.interaction_json(json.getJSONObject("request_param"))
|
||||
.priority(json.getString("priority"))
|
||||
.class_type(IOSEnum.ACS_TYPE.code("RGV输送任务"))
|
||||
.dtl_type(String.valueOf(dtl_type))
|
||||
.product_area(IOSEnum.PRODUCT_AREA.code("BLK"))
|
||||
.remark(json.getString("remark"))
|
||||
.build();
|
||||
|
||||
if (json.getString("vehicle_code2").contains("A")) {
|
||||
dto.setRoute_plan_code("two");
|
||||
} else {
|
||||
dto.setRoute_plan_code("normal");
|
||||
}
|
||||
resultList.add(dto);
|
||||
|
||||
// 更新任务为下发
|
||||
JSONObject paramMap = new JSONObject();
|
||||
paramMap.put("task_status", TaskStatusEnum.ISSUE.getCode());
|
||||
wo_Task.update(paramMap, "task_id ='" + json.getString("task_id") + "'");
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private List<JSONObject> sendTask(List<JSONObject> taskArrAll) {
|
||||
private List<SchBaseTask> sendTask(List<SchBaseTask> taskArrAll) {
|
||||
/*
|
||||
* 一个行架点位只允许一个任务正在执行或下发中
|
||||
*/
|
||||
WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
|
||||
// 点位表
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
// WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
|
||||
// // 点位表
|
||||
// WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
|
||||
ArrayList<JSONObject> taskArr = new ArrayList<>();
|
||||
List<SchBaseTask> taskArr = new ArrayList<>();
|
||||
|
||||
// 判断这两个点位是否有任务:如果没有则下发任务
|
||||
List<JSONObject> pointJson = wo_Task.query("handle_class = '" + THIS_CLASS + "' AND task_status IN ('05','06') AND is_delete = '0' ORDER BY point_code2")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
// List<JSONObject> pointJson = wo_Task.query("handle_class = '" + THIS_CLASS + "' AND task_status IN ('05','06') AND is_delete = '0' ORDER BY point_code2")
|
||||
// .getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
if (ObjectUtil.isEmpty(pointJson)) {
|
||||
List<SchBaseTask> taskList = schBaseTaskMapper.selectList(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getHandle_class, THIS_CLASS).eq(SchBaseTask::getIs_delete, "0")
|
||||
.in(SchBaseTask::getTask_status, "05", "06").orderByAsc(SchBaseTask::getPoint_code2));
|
||||
|
||||
|
||||
if (CollUtil.isEmpty(taskList)) {
|
||||
// 下发两个的任务
|
||||
JSONObject oneJson = taskArrAll.stream()
|
||||
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
|
||||
SchBaseTask oneTask = taskArrAll.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位1")))
|
||||
.findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(oneJson)) {
|
||||
taskArr.add(oneJson);
|
||||
if (ObjectUtil.isNotEmpty(oneTask)) {
|
||||
taskArr.add(oneTask);
|
||||
}
|
||||
|
||||
JSONObject twoJson = taskArrAll.stream()
|
||||
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
|
||||
SchBaseTask towTask = taskArrAll.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位2")))
|
||||
.findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(twoJson)) {
|
||||
taskArr.add(twoJson);
|
||||
if (ObjectUtil.isNotEmpty(towTask)) {
|
||||
taskArr.add(towTask);
|
||||
}
|
||||
} else {
|
||||
// 哪里空了就下发哪里的
|
||||
if (pointJson.size() == 1) {
|
||||
JSONObject json = pointJson.get(0);
|
||||
if (json.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1"))) {
|
||||
if (taskList.size() == 1) {
|
||||
SchBaseTask schBaseTask = taskList.get(0);
|
||||
if (schBaseTask.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位1"))) {
|
||||
// 行架位1有任务则下发行架位2的任务
|
||||
JSONObject twoJson = taskArrAll.stream()
|
||||
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
|
||||
SchBaseTask towTask = taskArrAll.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位2")))
|
||||
.findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(twoJson)) {
|
||||
if (ObjectUtil.isNotEmpty(towTask)) {
|
||||
// 如果能找到去行架位2的任务则下发当前任务
|
||||
taskArr.add(twoJson);
|
||||
taskArr.add(towTask);
|
||||
} else {
|
||||
// 如果不能找到去行架位2则找去行架位1的任务进行二次分配到行架位2
|
||||
JSONObject twoJsonOne = taskArrAll.stream()
|
||||
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
|
||||
SchBaseTask twoJsonOne = taskArrAll.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位1")))
|
||||
.findFirst().orElse(null);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(twoJsonOne)) {
|
||||
if (twoJsonOne != null) {
|
||||
// 进行二次分配
|
||||
// 判断点位是否启用
|
||||
JSONObject jsonOne = pointTab.query("point_code = '" + IOSEnum.OUT_HANGER.code("行架位2") + "'")
|
||||
.uniqueResult(0);
|
||||
if (jsonOne.getString("is_used").equals("1")) {
|
||||
twoJsonOne.put("point_code2",IOSEnum.OUT_HANGER.code("行架位2"));
|
||||
wo_Task.update(twoJsonOne);
|
||||
// JSONObject jsonOne = pointTab.query("point_code = '" + IOSEnum.OUT_HANGER.code("行架位2") + "'")
|
||||
// .uniqueResult(0);
|
||||
SchBasePoint point = schPointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, IOSEnum.OUT_HANGER.code("行架位2")));
|
||||
if (point.getIs_used().equals("1")) {
|
||||
twoJsonOne.setPoint_code2(IOSEnum.OUT_HANGER.code("行架位2"));
|
||||
schBaseTaskMapper.updateById(twoJsonOne);
|
||||
taskArr.add(twoJsonOne);
|
||||
}
|
||||
}
|
||||
@@ -161,25 +119,27 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
}
|
||||
} else {
|
||||
// 行架位2有任务则下发行架位1的任务
|
||||
JSONObject oneJson = taskArrAll.stream()
|
||||
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
|
||||
SchBaseTask oneJson = taskArrAll.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位1")))
|
||||
.findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotEmpty(oneJson)) {
|
||||
// 如果能找到去行架位1的任务则下发当前任务
|
||||
taskArr.add(oneJson);
|
||||
} else {
|
||||
// 如果不能找到去行架位1则找去行架位2的任务进行二次分配到行架位1
|
||||
JSONObject twoJsonTwo = taskArrAll.stream()
|
||||
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
|
||||
SchBaseTask twoJsonTwo = taskArrAll.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(IOSEnum.OUT_HANGER.code("行架位2")))
|
||||
.findFirst().orElse(null);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(twoJsonTwo)) {
|
||||
if (twoJsonTwo!=null) {
|
||||
// 进行二次分配
|
||||
JSONObject jsonTwo = pointTab.query("point_code = '" + IOSEnum.OUT_HANGER.code("行架位1") + "'")
|
||||
.uniqueResult(0);
|
||||
if (jsonTwo.getString("is_used").equals("1")) {
|
||||
twoJsonTwo.put("point_code2",IOSEnum.OUT_HANGER.code("行架位1"));
|
||||
wo_Task.update(twoJsonTwo);
|
||||
// JSONObject jsonTwo = pointTab.query("point_code = '" + IOSEnum.OUT_HANGER.code("行架位1") + "'")
|
||||
// .uniqueResult(0);
|
||||
SchBasePoint point = schPointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, IOSEnum.OUT_HANGER.code("行架位1")));
|
||||
|
||||
if (point.getIs_used().equals("1")) {
|
||||
twoJsonTwo.setPoint_code2(IOSEnum.OUT_HANGER.code("行架位1"));
|
||||
schBaseTaskMapper.updateById(twoJsonTwo);
|
||||
taskArr.add(twoJsonTwo);
|
||||
}
|
||||
}
|
||||
@@ -191,6 +151,11 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
return taskArr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
@@ -206,20 +171,20 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("is_delete", "1");
|
||||
param.put("update_time", DateUtil.now());
|
||||
taskTab.update(param,"task_id = '" + task_id+ "'");
|
||||
taskTab.update(param, "task_id = '" + task_id + "'");
|
||||
}
|
||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
param.put("update_time", DateUtil.now());
|
||||
taskTab.update(param,"task_id = '" + task_id+ "'");
|
||||
taskTab.update(param, "task_id = '" + task_id + "'");
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
// 更新任务完成
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
param.put("update_time", DateUtil.now());
|
||||
taskTab.update(param,"task_id = '" + task_id+ "'");
|
||||
taskTab.update(param, "task_id = '" + task_id + "'");
|
||||
// 如果是异常出库口则不需要下发行架任务
|
||||
if (jsonTask.getString("point_code2").equals(IOSEnum.EXCEP_OUT.code("异常出库口"))) {
|
||||
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
|
||||
@@ -300,50 +265,80 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void sendTaskAcs(String groupTaskId,boolean retry) {
|
||||
WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
|
||||
List<JSONObject> taskArrAll = wo_Task
|
||||
.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
public void sendTaskAcs(String groupTaskId, boolean retry) {
|
||||
// WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
|
||||
// List<JSONObject> taskArrAll = wo_Task
|
||||
// .query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time")
|
||||
// .getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
|
||||
List<SchBaseTask> taskList = schBaseTaskMapper.selectList(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getHandle_class, THIS_CLASS)
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, "0").orderByAsc(SchBaseTask::getCreate_time));
|
||||
|
||||
|
||||
// 是否下发多个AGV输送出库任务
|
||||
if (CollectionUtils.isEmpty(taskArrAll)){
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
List<JSONObject> taskArr;
|
||||
List<SchBaseTask> taskArr;
|
||||
// 是否异常出库口任务
|
||||
String TWO_EXCEP = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXCEP").getValue();
|
||||
if (TWO_EXCEP.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
String is_send_many = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_send_many").getValue();
|
||||
if (is_send_many.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
// 只允许每个行架点位有一条任务
|
||||
taskArr = sendTask(taskArrAll);
|
||||
taskArr = sendTask(taskList);
|
||||
} else {
|
||||
taskArr = taskArrAll;
|
||||
taskArr = taskList;
|
||||
}
|
||||
} else {
|
||||
taskArr = taskArrAll;
|
||||
taskArr = taskList;
|
||||
}
|
||||
|
||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||
for (int i = 0; i < taskArr.size(); i++) {
|
||||
JSONObject json = taskArr.get(i);
|
||||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||
// SchBaseTask schBaseTask = taskArr.get(i);
|
||||
// char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||
// AcsTaskDto dto = AcsTaskDto.builder()
|
||||
// .ext_task_id(json.getString("task_id"))
|
||||
// .task_code(json.getString("task_code"))
|
||||
// .task_type(json.getString("acs_task_type"))
|
||||
// .start_device_code(json.getString("point_code1"))
|
||||
// .next_device_code(json.getString("point_code2"))
|
||||
// .vehicle_code(json.getString("vehicle_code2"))
|
||||
// .vehicle_code2(json.getString("vehicle_code"))
|
||||
// .interaction_json(json.getJSONObject("request_param"))
|
||||
// .priority(json.getString("priority"))
|
||||
// .class_type(IOSEnum.ACS_TYPE.code("RGV输送任务"))
|
||||
// .dtl_type(String.valueOf(dtl_type))
|
||||
// .product_area(IOSEnum.PRODUCT_AREA.code("BLK"))
|
||||
// .remark(json.getString("remark"))
|
||||
// .build();
|
||||
|
||||
SchBaseTask schBaseTask = taskArr.get(i);
|
||||
char dtl_type = schBaseTask.getTask_type().charAt(schBaseTask.getTask_type().length() - 1);
|
||||
// 处理request_param转换为JSONObject
|
||||
JSONObject requestParamJson = null;
|
||||
if (schBaseTask.getRequest_param() != null && !schBaseTask.getRequest_param().isEmpty()) {
|
||||
requestParamJson = JSONObject.parseObject(schBaseTask.getRequest_param());
|
||||
}
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.ext_task_id(json.getString("task_id"))
|
||||
.task_code(json.getString("task_code"))
|
||||
.task_type(json.getString("acs_task_type"))
|
||||
.start_device_code(json.getString("point_code1"))
|
||||
.next_device_code(json.getString("point_code2"))
|
||||
.vehicle_code(json.getString("vehicle_code2"))
|
||||
.vehicle_code2(json.getString("vehicle_code"))
|
||||
.interaction_json(json.getJSONObject("request_param"))
|
||||
.priority(json.getString("priority"))
|
||||
.ext_task_id(schBaseTask.getTask_id())
|
||||
.task_code(schBaseTask.getTask_code())
|
||||
.task_type(schBaseTask.getAcs_task_type())
|
||||
.start_device_code(schBaseTask.getPoint_code1())
|
||||
.next_device_code(schBaseTask.getPoint_code2())
|
||||
.vehicle_code(schBaseTask.getVehicle_code2())
|
||||
.vehicle_code2(schBaseTask.getVehicle_code())
|
||||
.interaction_json(requestParamJson)
|
||||
.priority(schBaseTask.getPriority())
|
||||
.class_type(IOSEnum.ACS_TYPE.code("RGV输送任务"))
|
||||
.dtl_type(String.valueOf(dtl_type))
|
||||
.product_area(IOSEnum.PRODUCT_AREA.code("BLK"))
|
||||
.remark(json.getString("remark"))
|
||||
.remark(schBaseTask.getRemark())
|
||||
.build();
|
||||
if (json.getString("vehicle_code2").contains("A")) {
|
||||
if (schBaseTask.getVehicle_code2().contains("A")) {
|
||||
dto.setRoute_plan_code("two");
|
||||
} else {
|
||||
dto.setRoute_plan_code("normal");
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
package org.nl.b_lms.sch.tasks;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvOutServiceImpl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.LashManageServiceImpl;
|
||||
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr;
|
||||
import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructattrMapper;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
@@ -19,9 +27,11 @@ import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.sch.AcsTaskDto;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -35,6 +45,18 @@ import static org.nl.wms.util.TaskUtil.getRoutePlanCode;
|
||||
public class TwoOutTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = TwoOutTask.class.getName();
|
||||
|
||||
|
||||
@Autowired
|
||||
SchBaseTaskMapper schBaseTaskMapper;
|
||||
|
||||
@Autowired
|
||||
StIvtIostorinvdisMapper stIvtIostorinvdisMapper;
|
||||
|
||||
@Autowired
|
||||
StIvtStructattrMapper stIvtStructattrMapper;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
@@ -160,58 +182,79 @@ public class TwoOutTask extends AbstractAcsTask {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
|
||||
WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配表
|
||||
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); // 仓位表
|
||||
|
||||
String task_id = taskObj.getString("task_id");
|
||||
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '07'").uniqueResult(0);
|
||||
|
||||
SchBaseTask jsonTask = schBaseTaskMapper.selectOne(new QueryWrapper<SchBaseTask>()
|
||||
.eq("task_id", task_id)
|
||||
.lt("task_status", "07"));
|
||||
|
||||
if (ObjectUtil.isEmpty(jsonTask)){
|
||||
return;
|
||||
}
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
if (jsonTask.getIntValue("task_status") > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消");
|
||||
if (Integer.parseInt(jsonTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务:" + jsonTask.getTask_code() + "已执行,不可取消");
|
||||
}
|
||||
jsonTask.put("is_delete", "1");
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
JSONObject map = new JSONObject();
|
||||
map.put("work_status", IOSEnum.WORK_STATUS.code("未生成"));
|
||||
map.put("point_id", "");
|
||||
map.put("task_id", "");
|
||||
disTab.update(map, "task_id = '" + task_id + "'");
|
||||
jsonTask.setIs_delete("1");
|
||||
jsonTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTaskMapper.updateById(jsonTask);
|
||||
|
||||
StIvtIostorinvdis stIvtIostorinvdis = new StIvtIostorinvdis();
|
||||
stIvtIostorinvdis.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
|
||||
stIvtIostorinvdis.setPoint_id("");
|
||||
stIvtIostorinvdis.setTask_id("");
|
||||
stIvtIostorinvdisMapper.update(stIvtIostorinvdis, new QueryWrapper<StIvtIostorinvdis>().eq("task_id", task_id));
|
||||
|
||||
// map.put("work_status", IOSEnum.WORK_STATUS.code("未生成"));
|
||||
// map.put("point_id", "");
|
||||
// map.put("task_id", "");
|
||||
// disTab.update(map, "task_id = '" + task_id + "'");
|
||||
}
|
||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
jsonTask.put("update_time", DateUtil.now());
|
||||
taskTab.update(jsonTask);
|
||||
jsonTask.setUpdate_time(DateUtil.now());
|
||||
jsonTask.setTask_status(TaskStatusEnum.EXECUTING.getCode());
|
||||
schBaseTaskMapper.updateById(jsonTask);
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
RedissonUtils.lock(c -> {
|
||||
StIvtIostorinvOutServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvOutServiceImpl.class);
|
||||
bean.finishTask(jsonTask);
|
||||
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(jsonTask);
|
||||
bean.finishTask(jsonObject);
|
||||
// 判断是否有异常货位的需要更新
|
||||
JSONObject jsonExt = attrTab.query("inv_code = '" + jsonTask.getString("vehicle_code") + "' AND lock_type = '"+IOSEnum.LOCK_TYPE.code("出库异常锁")+"'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(jsonExt)) {
|
||||
jsonExt.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
jsonExt.put("inv_code", "");
|
||||
attrTab.update(jsonExt);
|
||||
// JSONObject jsonExt = attrTab.query("inv_code = '" + jsonTask.getString("vehicle_code") + "' AND lock_type = '"+IOSEnum.LOCK_TYPE.code("出库异常锁")+"'").uniqueResult(0);
|
||||
|
||||
StIvtStructattr stIvtStructattr = stIvtStructattrMapper.selectOne(new QueryWrapper<StIvtStructattr>().eq("inv_code", jsonTask.getVehicle_code()).eq("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁")));
|
||||
|
||||
|
||||
if (ObjectUtil.isNotEmpty(stIvtStructattr)) {
|
||||
// jsonExt.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
// jsonExt.put("inv_code", "");
|
||||
stIvtStructattr.setLock_type(IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
stIvtStructattr.setInv_code("");
|
||||
stIvtStructattrMapper.updateById(stIvtStructattr);
|
||||
}
|
||||
|
||||
JSONObject parse = (JSONObject) JSONObject.parse(jsonTask.getRequest_param());
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("device_code",jsonTask.getString("point_code2"));
|
||||
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
|
||||
jsonParam.put("task_group_id",jsonTask.getString("task_group_id"));
|
||||
jsonParam.put("vehicle_type",jsonTask.getJSONObject("request_param").getString("containerType"));
|
||||
jsonParam.put("bill_type",jsonTask.getJSONObject("request_param").getString("bill_type"));
|
||||
jsonParam.put("device_code",jsonTask.getPoint_code2());
|
||||
jsonParam.put("vehicle_code",jsonTask.getVehicle_code());
|
||||
jsonParam.put("task_group_id",jsonTask.getTask_group_id());
|
||||
jsonParam.put("vehicle_type",parse.getString("containerType"));
|
||||
jsonParam.put("bill_type",parse.getString("bill_type"));
|
||||
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
|
||||
bean1.createHeapTask(jsonParam);
|
||||
// 判断此任务组是否全部完成
|
||||
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and handle_class = '"+THIS_CLASS+"'")
|
||||
.getResultJSONArray(0);
|
||||
if (ObjectUtil.isEmpty(resultJSONArray)) {
|
||||
// JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and handle_class = '"+THIS_CLASS+"'")
|
||||
// .getResultJSONArray(0);
|
||||
|
||||
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(new QueryWrapper<SchBaseTask>().eq("task_group_id", jsonTask.getTask_group_id()).ne("task_status", TaskStatusEnum.FINISHED.getCode()).eq("handle_class", THIS_CLASS));
|
||||
|
||||
|
||||
if (CollUtil.isEmpty(schBaseTasks)) {
|
||||
try {
|
||||
this.immediateNotifyAcs(null);
|
||||
}catch (Exception ex){
|
||||
} catch (Exception ex){
|
||||
log.warn("载具出库批量下发异常",ex.getMessage());
|
||||
if (!ex.getMessage().equals("存在相同的任务号")){
|
||||
throw new BadRequestException(ex.getMessage());
|
||||
@@ -237,33 +280,37 @@ public class TwoOutTask extends AbstractAcsTask {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
|
||||
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getSnowflake(1, 1).nextId() + "");
|
||||
task.setTask_code(IdUtil.getSnowflake(1, 1).nextId() + "");
|
||||
task.setTask_type(form.getString("task_type"));
|
||||
task.setVehicle_code(form.getString("vehicle_code"));
|
||||
task.setVehicle_code2(form.getString("vehicle_code2"));
|
||||
task.setVehicle_type(form.getString("vehicle_type"));
|
||||
task.setTask_name(form.getString("task_name"));
|
||||
task.setMaterial_id(form.getString("material_id"));
|
||||
task.setTask_group_id(form.getString("task_group_id"));
|
||||
task.setIs_auto_issue(form.getString("is_auto_issue"));
|
||||
task.setTable_fk(form.getString("table_fk"));
|
||||
task.setRequest_param(form.getString("request_param"));
|
||||
if (form.getString("sort_seq")!= null) {
|
||||
BigDecimal decimal = new BigDecimal(form.getString("sort_seq"));
|
||||
task.setSort_seq(decimal);
|
||||
}
|
||||
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
task.setPoint_code1(form.getString("start_device_code"));
|
||||
task.setPoint_code2(form.getString("next_device_code"));
|
||||
task.setHandle_class(this.getClass().getName());
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentUsername());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_task_type("7");
|
||||
|
||||
json.put("task_type", form.getString("task_type"));
|
||||
json.put("vehicle_code", form.getString("vehicle_code"));
|
||||
json.put("vehicle_code2", form.getString("vehicle_code2"));
|
||||
json.put("vehicle_type", form.getString("vehicle_type"));
|
||||
json.put("task_name", form.getString("task_name"));
|
||||
json.put("point_code1", form.getString("point_code1"));
|
||||
json.put("point_code2", form.getString("point_code2"));
|
||||
json.put("material_id", form.getString("material_id"));
|
||||
json.put("task_group_id", form.getString("task_group_id"));
|
||||
json.put("is_auto_issue", form.getString("is_auto_issue"));
|
||||
json.put("table_fk", form.getString("table_fk"));
|
||||
json.put("request_param", form.getString("request_param"));
|
||||
json.put("sort_seq", form.getIntValue("sort_seq"));
|
||||
|
||||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
json.put("handle_class", THIS_CLASS);
|
||||
json.put("create_id", currentUserId);
|
||||
json.put("create_name", currentUsername);
|
||||
json.put("create_time", DateUtil.now());
|
||||
json.put("acs_task_type", "7");
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
|
||||
|
||||
return json.getString("task_id");
|
||||
schBaseTaskMapper.insert(task);
|
||||
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
package org.nl.b_lms.sch.tasks.boxstack;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.sch.AcsTaskDto;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.nl.wms.util.TaskUtil.getRoutePlanCode;
|
||||
|
||||
/**
|
||||
* 木箱输送线任务类
|
||||
* Created by Lxy on 2024/1/19.
|
||||
*/
|
||||
@Service
|
||||
public class BoxSSXTask extends AbstractAcsTask {
|
||||
|
||||
/**
|
||||
* 处理类
|
||||
*/
|
||||
private final String THIS_CLASS = BoxSSXTask.class.getName();
|
||||
|
||||
@Resource
|
||||
private BstIvtBoxstackMapper boxstackMapper;
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
* 下发给ACS时需要特殊处理
|
||||
*/
|
||||
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject json = arr.getJSONObject(i);
|
||||
//JSONObject params = json.getJSONObject("params");
|
||||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.ext_task_id(json.getString("task_id"))
|
||||
.task_code(json.getString("task_code"))
|
||||
.task_type(json.getString("acs_task_type"))
|
||||
.start_device_code(json.getString("point_code1"))
|
||||
.next_device_code(json.getString("point_code2"))
|
||||
.route_plan_code(getRoutePlanCode(json.getString("point_code2")))
|
||||
.vehicle_code(json.getString("vehicle_code"))
|
||||
.priority(json.getString("priority"))
|
||||
.class_type(IOSEnum.ACS_TYPE.code("装箱行架任务"))
|
||||
.dtl_type(String.valueOf(dtl_type))
|
||||
.interaction_json(json.getJSONObject("request_param"))
|
||||
.remark(json.getString("remark"))
|
||||
.product_area(IOSEnum.PRODUCT_AREA.code("BLK"))
|
||||
.build();
|
||||
|
||||
|
||||
resultList.add(dto);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
// 任务表
|
||||
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||
|
||||
// 更新任务的参数
|
||||
JSONObject map = new JSONObject();
|
||||
|
||||
/*
|
||||
* 1-执行中, 2-完成 ,0-acs取消
|
||||
*/
|
||||
// 执行中
|
||||
if (status.equals(TaskStatusEnum.EXECUTING.getCode())) {
|
||||
|
||||
map.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
}
|
||||
// 完成
|
||||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
|
||||
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
|
||||
if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务已执行不能取消");
|
||||
}
|
||||
|
||||
// 更新任务表删除字段
|
||||
map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
}
|
||||
|
||||
map.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||
map.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||
map.put("update_time", DateUtil.now());
|
||||
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findStartPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findNextPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject form) {
|
||||
|
||||
if (StrUtil.isBlank(form.getString("task_type"))) {
|
||||
throw new BadRequestException("业务类型不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("start_device_code"))) {
|
||||
throw new BadRequestException("起点不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("next_device_code"))) {
|
||||
throw new BadRequestException("终点不能为空!");
|
||||
}
|
||||
//创建任务点位层数要扣减
|
||||
BstIvtBoxstack bstIvtBoxstackUpdate = boxstackMapper.selectOne(new QueryWrapper<BstIvtBoxstack>().eq("stack_code", form.getString("start_device_code")));
|
||||
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack();
|
||||
bstIvtBoxstack.setCurrent_layer_count(bstIvtBoxstackUpdate.getCurrent_layer_count() - 1);
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
|
||||
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
|
||||
json.put("task_type", form.getString("task_type"));
|
||||
json.put("vehicle_code", form.getString("vehicle_code"));
|
||||
json.put("vehicle_code2", form.getString("vehicle_code2"));
|
||||
json.put("vehicle_type", form.getString("vehicle_type"));
|
||||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
json.put("task_group_id", form.getLongValue("task_group_id"));
|
||||
json.put("point_code1", form.getString("start_device_code"));
|
||||
json.put("point_code2", form.getString("next_device_code"));
|
||||
json.put("product_area", "BLK");
|
||||
json.put("handle_class", this.getClass().getName());
|
||||
json.put("create_id", SecurityUtils.getCurrentUserId());
|
||||
json.put("create_name", SecurityUtils.getCurrentUsername());
|
||||
json.put("create_time", DateUtil.now());
|
||||
json.put("priority", "1");
|
||||
json.put("acs_task_type", "6");
|
||||
json.put("request_param", form.getString("request_param"));
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
|
||||
return json.getString("task_id");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void forceFinish(String task_id) {
|
||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,215 @@
|
||||
package org.nl.b_lms.sch.tasks.boxstack;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
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 org.nl.b_lms.bst.ivt.boxstack.service.IBstIvtBoxstackService;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.sch.AcsTaskDto;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.util.TaskUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.nl.wms.util.TaskUtil.getRoutePlanCode;
|
||||
|
||||
/**
|
||||
* 二期木箱行架任务类
|
||||
* Created by Lxy on 2024/1/19.
|
||||
*/
|
||||
@Service
|
||||
public class InBoxTrussTask extends AbstractAcsTask {
|
||||
|
||||
/**
|
||||
* 处理类
|
||||
*/
|
||||
private final String THIS_CLASS = InBoxTrussTask.class.getName();
|
||||
|
||||
@Resource
|
||||
private BstIvtBoxstackMapper boxstackMapper;
|
||||
|
||||
@Resource
|
||||
private IschBaseTaskService taskService;
|
||||
|
||||
@Resource
|
||||
private IBstIvtBoxstackService boxstackService;
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
* 下发给ACS时需要特殊处理
|
||||
*/
|
||||
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject json = arr.getJSONObject(i);
|
||||
//JSONObject params = json.getJSONObject("params");
|
||||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.ext_task_id(json.getString("task_id"))
|
||||
.task_code(json.getString("task_code"))
|
||||
.task_type(json.getString("acs_task_type"))
|
||||
.start_device_code(json.getString("point_code1"))
|
||||
.next_device_code(json.getString("point_code2"))
|
||||
.route_plan_code(getRoutePlanCode(json.getString("point_code2")))
|
||||
.vehicle_code(json.getString("vehicle_code"))
|
||||
.priority(json.getString("priority"))
|
||||
.class_type(IOSEnum.ACS_TYPE.code("装箱行架任务"))
|
||||
.dtl_type(String.valueOf(dtl_type))
|
||||
.interaction_json(json.getJSONObject("request_param"))
|
||||
.remark(json.getString("remark"))
|
||||
.product_area(IOSEnum.PRODUCT_AREA.code("BLK"))
|
||||
.build();
|
||||
|
||||
|
||||
resultList.add(dto);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
String now = DateUtil.now();
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String currentNickName = SecurityUtils.getCurrentNickName();
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
|
||||
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return;
|
||||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_id, taskObj.getString("task_id"))
|
||||
.set(SchBaseTask::getUpdate_optid, currentUserId)
|
||||
.set(SchBaseTask::getUpdate_optname, currentNickName)
|
||||
.set(SchBaseTask::getUpdate_time, now);
|
||||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||
// 更新任务状态为执行中
|
||||
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return;
|
||||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode());
|
||||
}
|
||||
// 完成
|
||||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
//更新木箱当前层数和木箱编码
|
||||
BstIvtBoxstack boxstack = boxstackService.getOne(new LambdaQueryWrapper<BstIvtBoxstack>()
|
||||
.eq(BstIvtBoxstack::getStack_code, schBaseTask.getPoint_code1()));
|
||||
|
||||
String originalString = boxstack.getBox_no();
|
||||
String itemToRemove = schBaseTask.getVehicle_code();
|
||||
|
||||
// 分割字符串,过滤掉指定项,然后重新组合
|
||||
String[] items = originalString.split(",");
|
||||
List<String> itemList = new ArrayList<>();
|
||||
for (String item : items) {
|
||||
if (!item.equals(itemToRemove)) {
|
||||
itemList.add(item);
|
||||
}
|
||||
}
|
||||
String modifiedString = String.join(",", itemList);
|
||||
boxstack.setBox_no(modifiedString);
|
||||
boxstack.setCurrent_layer_count(boxstack.getCurrent_layer_count() - 1);
|
||||
boxstack.setUpdate_id(currentUserId);
|
||||
boxstack.setUpdate_name(currentNickName);
|
||||
boxstack.setUpdate_time(DateUtil.now());
|
||||
boxstackMapper.updateById(boxstack);
|
||||
|
||||
//3.更改任务状态为完成
|
||||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
|
||||
|
||||
}
|
||||
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
|
||||
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务已执行不能取消");
|
||||
}
|
||||
//任务被标记为取消
|
||||
updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是"));
|
||||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode());
|
||||
updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。");
|
||||
|
||||
}
|
||||
|
||||
taskService.update(null, updateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findStartPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findNextPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject form) {
|
||||
|
||||
if (StrUtil.isBlank(form.getString("task_type"))) {
|
||||
throw new BadRequestException("业务类型不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("start_device_code"))) {
|
||||
throw new BadRequestException("起点不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("next_device_code"))) {
|
||||
throw new BadRequestException("终点不能为空!");
|
||||
}
|
||||
//创建任务点位层数要扣减
|
||||
BstIvtBoxstack bstIvtBoxstackUpdate = boxstackMapper.selectOne(new QueryWrapper<BstIvtBoxstack>().eq("stack_code", form.getString("start_device_code")));
|
||||
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack();
|
||||
bstIvtBoxstack.setCurrent_layer_count(bstIvtBoxstackUpdate.getCurrent_layer_count() - 1);
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
|
||||
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
|
||||
json.put("task_type", form.getString("task_type"));
|
||||
json.put("vehicle_code", form.getString("vehicle_code"));
|
||||
json.put("vehicle_code2", form.getString("vehicle_code2"));
|
||||
json.put("vehicle_type", form.getString("vehicle_type"));
|
||||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
json.put("task_group_id", form.getLongValue("task_group_id"));
|
||||
json.put("point_code1", form.getString("start_device_code"));
|
||||
json.put("point_code2", form.getString("next_device_code"));
|
||||
json.put("product_area", "BLK");
|
||||
json.put("handle_class", this.getClass().getName());
|
||||
json.put("create_id", SecurityUtils.getCurrentUserId());
|
||||
json.put("create_name", SecurityUtils.getCurrentUsername());
|
||||
json.put("create_time", DateUtil.now());
|
||||
json.put("priority", "1");
|
||||
json.put("acs_task_type", "6");
|
||||
json.put("request_param", form.getString("request_param"));
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
|
||||
return json.getString("task_id");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void forceFinish(String task_id) {
|
||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消"));
|
||||
}
|
||||
}
|
||||
@@ -3,20 +3,28 @@ package org.nl.b_lms.sch.tasks.boxstack;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
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 lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.enums.BoxStackEnum;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.IBstIvtBoxstackService;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.b_lms.sch.task.dto.SchBaseTaskVO;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
@@ -26,6 +34,7 @@ import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.util.TaskUtil;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -41,8 +50,7 @@ import java.util.stream.Collectors;
|
||||
* @author gbx
|
||||
* @since 2024-01-24
|
||||
*/
|
||||
@Service()
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
@Slf4j
|
||||
public class MxOutTask extends AbstractAcsTask {
|
||||
|
||||
@@ -51,9 +59,22 @@ public class MxOutTask extends AbstractAcsTask {
|
||||
@Resource
|
||||
private IschBaseTaskService taskService;
|
||||
|
||||
@Resource
|
||||
private IBstIvtBoxstackService boxstackService;
|
||||
|
||||
|
||||
@Resource
|
||||
private IbstIvtPackageinfoivtService packageinfoivtService;
|
||||
|
||||
@Resource
|
||||
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
|
||||
|
||||
@Autowired
|
||||
private SchBaseTaskMapper schBaseTaskMapper;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
@@ -86,6 +107,8 @@ public class MxOutTask extends AbstractAcsTask {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
String now = DateUtil.now();
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String currentNickName = SecurityUtils.getCurrentNickName();
|
||||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
|
||||
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return;
|
||||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<SchBaseTask>()
|
||||
@@ -100,12 +123,57 @@ public class MxOutTask extends AbstractAcsTask {
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------");
|
||||
//1.改变起点点位状态
|
||||
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
|
||||
//2.更新库存记录
|
||||
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2()));
|
||||
//3.更改任务状态为完成
|
||||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
|
||||
//更新终点库存
|
||||
String box_spec = schBaseTask.getMaterial_code();
|
||||
String vehicle_code = schBaseTask.getVehicle_code();
|
||||
String[] boxNos = vehicle_code.split(",");
|
||||
//修改木箱库木箱规格信息
|
||||
BstIvtBoxstack boxstack = boxstackService.getOne(new LambdaQueryWrapper<BstIvtBoxstack>()
|
||||
.eq(BstIvtBoxstack::getStack_code, schBaseTask.getPoint_code2()));
|
||||
if (!ObjectUtil.isEmpty(boxstack)) {
|
||||
boxstack.setBox_no(vehicle_code);
|
||||
boxstack.setCurrent_layer_count(boxNos.length);
|
||||
boxstack.setBox_spec(box_spec);
|
||||
boxstack.setUpdate_time(now);
|
||||
boxstack.setUpdate_id(currentUserId);
|
||||
boxstack.setUpdate_name(currentNickName);
|
||||
boxstackService.updateById(boxstack);
|
||||
BstIvtBoxstack boxstackStart = boxstackService.getOne(new LambdaQueryWrapper<BstIvtBoxstack>()
|
||||
.eq(BstIvtBoxstack::getStack_code, schBaseTask.getPoint_code1()));
|
||||
//agv任务完成生成行架任务
|
||||
InBoxTrussTask inBoxTrussTask = new InBoxTrussTask();
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱行架"));
|
||||
taskParam.put("acs_task_type", IOSEnum.ACS_TYPE.code("子卷装箱行架任务"));
|
||||
taskParam.put("start_device_code", schBaseTask.getPoint_code2());
|
||||
taskParam.put("next_device_code", IOSEnum.SPECIAL_POINTS.code("退货行架对接位"));
|
||||
taskParam.put("material_code", schBaseTask.getMaterial_code());
|
||||
taskParam.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
if (StrUtil.isEmpty(boxstackStart.getBox_no())){
|
||||
throw new BadRequestException("未找到对接位木箱信息");
|
||||
}
|
||||
String[] split = boxstackStart.getBox_no().split(",");
|
||||
// 根据当前层查询木箱信息
|
||||
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
|
||||
new QueryWrapper<BstIvtBoxinfo>().lambda()
|
||||
.eq(BstIvtBoxinfo::getBox_no, split[boxstackStart.getCurrent_layer_count()]));
|
||||
if (boxDao == null) {
|
||||
throw new BadRequestException("木箱不存在!");
|
||||
}
|
||||
|
||||
JSONObject boxParam = new JSONObject();
|
||||
boxParam.put("length", boxDao.getBox_length());
|
||||
boxParam.put("width", boxDao.getBox_width());
|
||||
boxParam.put("height", boxDao.getBox_high());
|
||||
boxParam.put("containerType", boxDao.getVehicle_type());
|
||||
boxParam.put("barcode", boxDao.getBox_no());
|
||||
taskParam.put("request_param", boxParam.toString());
|
||||
taskParam.put("vehicle_code", boxDao.getBox_no());
|
||||
inBoxTrussTask.createTask(taskParam);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
@@ -155,10 +223,7 @@ public class MxOutTask extends AbstractAcsTask {
|
||||
if (StrUtil.isBlank(pointCode1)) {
|
||||
throw new BadRequestException("起点不能为空");
|
||||
}
|
||||
String pointCode2 = form.getString("point_code2");
|
||||
if (StrUtil.isBlank(pointCode2)) {
|
||||
throw new BadRequestException("下一点不能为空");
|
||||
}
|
||||
|
||||
String pointCode3 = form.getString("point_code3");
|
||||
//是否立即下发
|
||||
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
|
||||
@@ -167,7 +232,6 @@ public class MxOutTask extends AbstractAcsTask {
|
||||
.vehicle_code(vehicleCode)
|
||||
.vehicle_code2(form.getString("vehicle_code2"))
|
||||
.point_code1(pointCode1)
|
||||
.point_code2(pointCode2)
|
||||
.point_code3(pointCode3)
|
||||
.point_code4(form.getString("point_code4"))
|
||||
.task_group_id(form.getString("task_group_id"))
|
||||
@@ -179,7 +243,7 @@ public class MxOutTask extends AbstractAcsTask {
|
||||
.create_time(DateUtil.now())
|
||||
.is_send(isSend ? "1" : "0")
|
||||
.acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type"))
|
||||
.task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status"))
|
||||
.task_status(form.getString("task_status"))
|
||||
.product_area(StrUtil.isEmpty(form.getString("product_area")) ? "BLK" : form.getString("product_area"))
|
||||
.build();
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
package org.nl.b_lms.sch.tasks.boxstack.auto;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import groovyjarjarpicocli.CommandLine;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.enums.BoxStackEnum;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.IBstIvtBoxstackService;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack;
|
||||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.MxMoveTask;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* 自动将木箱从缓存区到装箱位
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AutoMxZxTask {
|
||||
|
||||
@Resource
|
||||
private IschBaseTaskService taskService;
|
||||
private final String THIS_CLASS = AutoMxZxTask.class.getName();
|
||||
@Resource
|
||||
private RedissonClient redissonClient;
|
||||
@Resource
|
||||
private MxMoveTask mxMoveTask;
|
||||
@Resource
|
||||
private IBstIvtBoxstackService boxstackService;
|
||||
|
||||
@Resource
|
||||
private BstIvtBoxstackMapper boxstackMapper;
|
||||
|
||||
//缓存区->装箱位agv自动搬运任务
|
||||
public void run() {
|
||||
try {
|
||||
this.sendMxMove();
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
public void sendMxMove() {
|
||||
log.info(THIS_CLASS + "-根据装箱计划木箱库移库定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock("boxMove");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
//查找木箱转运agv任务
|
||||
List<SchBaseTask> taskList = taskService.list(new QueryWrapper<SchBaseTask>()
|
||||
.eq("task_type", BoxStackEnum.TASK_TYPE.code("木箱缓存区到对接位"))
|
||||
.eq("task_status",TaskStatusEnum.SURE_END.getCode())
|
||||
.orderByDesc("create_time","sort_seq"));
|
||||
if (CollectionUtil.isEmpty(taskList)){
|
||||
return;
|
||||
}
|
||||
//确定终点,有位置生成agv任务 ,无位置生成移库任务
|
||||
List<BstIvtBoxstack> bstIvtBoxstacks = boxstackMapper.selectAndNoTask( BoxStackEnum.POINT_STATUS.code("对接区"));
|
||||
if (CollectionUtil.isEmpty(bstIvtBoxstacks)){
|
||||
//获取对接区没有任务的对接位
|
||||
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack();
|
||||
bstIvtBoxstack.setPoint_status(BoxStackEnum.POINT_STATUS.code("对接区"));
|
||||
List<BstIvtBoxstack> bstIvtBoxstackDJList = boxstackMapper.selectDJAndNoTask(bstIvtBoxstack);
|
||||
if (CollectionUtil.isEmpty(bstIvtBoxstackDJList)){
|
||||
log.error("对接区有行架任务执行,需要等待执行完");
|
||||
return;
|
||||
}
|
||||
BstIvtBoxstack bstIvtBoxstackMove = bstIvtBoxstackDJList.get(0);
|
||||
List<BstIvtBoxstack> bstIvtBoxstackHCList = boxstackMapper.selectHCAndNoTask(bstIvtBoxstack);
|
||||
if (CollUtil.isEmpty(bstIvtBoxstackHCList)){
|
||||
log.error("缓存区无可用位置");
|
||||
return;
|
||||
}
|
||||
//对接位到缓存位
|
||||
MxMoveTask mxMoveDJtoHCTask = new MxMoveTask();
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱对接位到缓存区"));
|
||||
taskParam.put("start_device_code", bstIvtBoxstackMove.getStack_code());
|
||||
taskParam.put("next_device_code", bstIvtBoxstackHCList.get(0).getStack_code());
|
||||
taskParam.put("material_code",bstIvtBoxstackMove.getBox_spec());
|
||||
taskParam.put("task_status", TaskStatusEnum.SURE_END.getCode());
|
||||
taskParam.put("is_send", "1");
|
||||
mxMoveDJtoHCTask.createTask(taskParam);
|
||||
} else {
|
||||
//下发缓存位到对接位agv任务
|
||||
SchBaseTask schBaseTask = taskList.get(0);
|
||||
schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
schBaseTask.setPoint_code2(bstIvtBoxstacks.get(0).getStack_code());
|
||||
taskService.updateById(schBaseTask);
|
||||
}
|
||||
} else {
|
||||
log.info("木箱移库自动搬运任务正在创建被锁住。");
|
||||
}
|
||||
} finally {
|
||||
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -65,7 +65,7 @@ public class AutoSendMzToDjq {
|
||||
}
|
||||
JSONObject task = new JSONObject();
|
||||
//满轴有子卷且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("子卷缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"));
|
||||
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"));
|
||||
if (ObjectUtils.isEmpty(mzqPackageinfoivtList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -78,8 +78,8 @@ public class AutoSendToZxq extends Prun{
|
||||
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
|
||||
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
|
||||
task.put("vehicle_code", selectEmpPoints.get(0).getContainer_name());
|
||||
task.put("point_code1", zxqPackageinfoivtList.get(0).getPoint_code());
|
||||
task.put("point_code2", selectEmpPoints.get(0).getPoint_code());
|
||||
task.put("point_code1", selectEmpPoints.get(0).getPoint_code());
|
||||
task.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code());
|
||||
zxqTask.createTask(task);
|
||||
|
||||
} else {
|
||||
|
||||
@@ -51,7 +51,7 @@ public class AutoSendVehicleToKzj extends Prun{
|
||||
|
||||
@SneakyThrows
|
||||
public void toKzjHcw() {
|
||||
log.info(THIS_CLASS + "-待检区->子卷缓存位补空任务开始执行扫描。");
|
||||
log.info(THIS_CLASS + "-待检区->满轴缓存位补空任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
@@ -63,8 +63,8 @@ public class AutoSendVehicleToKzj extends Prun{
|
||||
if (ObjectUtils.isEmpty(djqPackageinfoivtList)) {
|
||||
return;
|
||||
}
|
||||
//子卷缓存位为空位且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("子卷缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
//满轴缓存位为空位且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
if (ObjectUtils.isEmpty(selectEmpPoints)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -110,13 +110,13 @@ public enum IOSEnum {
|
||||
"6","B_FH06_0")),
|
||||
|
||||
// 行架点位
|
||||
OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017")),
|
||||
OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017","木箱出库位", "CK2017")),
|
||||
|
||||
// 点位
|
||||
POINT_CODE(MapOf.of("退货入库位", "THRKDJW1", "2020","CK2020", "2022","CK2022")),
|
||||
POINT_CODE(MapOf.of("退货入库位", "THRKDJW1", "2020","CK2020", "2022","CK2022","木箱扫码位","CK2024")),
|
||||
|
||||
//acs申请任务
|
||||
ACSTOLMS_TYPE(MapOf.of("成品入库任务", "1","空盘入库","2","空盘出库","3","异常处理位","4","木箱入库","5","退货入库","6","贴标","1","捆扎","2")),
|
||||
ACSTOLMS_TYPE(MapOf.of("成品入库任务", "1","空盘入库","2","空盘出库","3","异常处理位","4","木箱入库","5","退货入库","6","贴标","1","捆扎","2","子卷装箱","7")),
|
||||
|
||||
// acs外部系统用户
|
||||
EXT_ACS(MapOf.of("acs", "2","kc","康成")),
|
||||
@@ -127,13 +127,15 @@ public enum IOSEnum {
|
||||
CHANGE_OUT(MapOf.of("换标出库口", "CK1020")),
|
||||
|
||||
// 下发acs任务类型(明细)
|
||||
ACS_TYPE(MapOf.of("木箱入库行架任务", "12","装箱入库行架任务", "13",
|
||||
ACS_TYPE(MapOf.of("子卷装箱行架任务", "12","装箱入库行架任务", "13",
|
||||
"子卷下线行架任务", "16","退货入库行架任务", "14","RGV输送任务", "15",
|
||||
"木箱堆叠行架任务", "17"
|
||||
)),
|
||||
|
||||
//特殊出入库点位
|
||||
SPECIAL_POINTS(MapOf.of("异常出库口", "CKYC","退货入库口","CKTH")),
|
||||
SPECIAL_POINTS(MapOf.of("异常出库口", "CKYC","退货入库口","CKTH","退货行架对接位","THHJDJ")),
|
||||
|
||||
|
||||
|
||||
// acs反馈异常出库
|
||||
ACS_EXCEPTIONAL_TYPE(MapOf.of("入库满入", "1","浅货位有货(入库)", "4",
|
||||
|
||||
@@ -1008,14 +1008,13 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
||||
@Override
|
||||
@Transactional
|
||||
public void finishTask(JSONObject whereJson) {
|
||||
//任务表
|
||||
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
|
||||
|
||||
// 查询任务
|
||||
JSONObject jsonTask = wo_Task.query("task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and task_id = '" + whereJson.getString("task_id") + "'")
|
||||
.uniqueResult(0);
|
||||
SchBaseTask schBaseTask = schBaseTaskMapper.selectOne(new QueryWrapper<SchBaseTask>().eq("task_id", whereJson.getString("task_id")).eq("task_status", TaskStatusEnum.FINISHED.getCode()));
|
||||
|
||||
if (jsonTask == null) {
|
||||
|
||||
if (schBaseTask == null) {
|
||||
throw new BadRequestException("查询不到操作的任务记录!" + whereJson.getString("task_id"));
|
||||
}
|
||||
|
||||
@@ -1068,9 +1067,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("need_delete", IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "package_box_sn = '" + jsonTask.getString("vehicle_code") + "'");
|
||||
WQLObject.getWQLObject("pdm_bi_subpackagerelation").update(map, "package_box_sn = '" + schBaseTask.getVehicle_code() + "'");
|
||||
|
||||
JSONArray rows = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + jsonTask.getString("vehicle_code") + "'").getResultJSONArray(0);
|
||||
JSONArray rows = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + schBaseTask.getVehicle_code() + "'").getResultJSONArray(0);
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject row = rows.getJSONObject(i);
|
||||
//插入包装关系出入库记录表
|
||||
@@ -1085,13 +1084,14 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
||||
}
|
||||
|
||||
//更新任务为完成
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
map.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||
map.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||
map.put("update_time", DateUtil.now());
|
||||
SchBaseTask schBaseTaskUpdate = new SchBaseTask();
|
||||
schBaseTaskUpdate.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
schBaseTaskUpdate.setTask_id(whereJson.getString("task_id"));
|
||||
schBaseTaskUpdate.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
schBaseTaskUpdate.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
schBaseTaskUpdate.setUpdate_time(DateUtil.now());
|
||||
|
||||
wo_Task.update(map, "task_id='" + whereJson.getString("task_id") + "'");
|
||||
schBaseTaskMapper.updateById(schBaseTaskUpdate);
|
||||
|
||||
// 查询此任务下所有的分配明细
|
||||
disDaoList.forEach(row -> {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -16,6 +17,9 @@ import com.github.pagehelper.PageHelper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.b_lms.pdm.storagevehicleext.dao.MdPbStoragevehicleext;
|
||||
import org.nl.b_lms.pdm.storagevehicleext.dao.mapper.MdPbStoragevehicleextMapper;
|
||||
import org.nl.b_lms.pdm.storagevehicleext.service.IMdPbStoragevehicleextService;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
|
||||
@@ -157,6 +161,9 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
@Autowired
|
||||
private StIvtSectattrMapper stIvtSectattrMapper;
|
||||
|
||||
@Autowired
|
||||
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
|
||||
|
||||
@Override
|
||||
public Object pageQuery(Map query, Pageable pageQuery) {
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPageNumber() + 1, pageQuery.getPageSize());
|
||||
@@ -558,8 +565,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
@Override
|
||||
@Transactional
|
||||
public String setPoint(Map whereJson) {
|
||||
// 载具扩展属性表
|
||||
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
|
||||
|
||||
|
||||
// 分配明细集合
|
||||
ArrayList<HashMap> list = (ArrayList<HashMap>) whereJson.get("tableMater");
|
||||
@@ -580,19 +586,22 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
StIvtIostorinv mstDao = this.getById(jsonDis.getString("iostorinv_id"));
|
||||
|
||||
// 查询木箱对应的绑定关系
|
||||
JSONArray storagevehicleCodes = veExtTab
|
||||
.query("pcsn = '" + jsonDis.get("storagevehicle_code") + "'", "UPDATE_TIME desc").getResultJSONArray(0);
|
||||
if (ObjectUtil.isEmpty(storagevehicleCodes)) {
|
||||
|
||||
|
||||
List<MdPbStoragevehicleext> mdPbStoragevehicleexts = mdPbStoragevehicleextMapper.selectList(new QueryWrapper<MdPbStoragevehicleext>()
|
||||
.eq("pcsn", jsonDis.get("storagevehicle_code"))
|
||||
.orderByDesc("UPDATE_TIME"));
|
||||
if (CollUtil.isEmpty(mdPbStoragevehicleexts)){
|
||||
throw new BadRequestException("此木箱没有绑定托盘号!"+whereJson.get("vehicle_code"));
|
||||
}
|
||||
JSONObject jsonVeExt = storagevehicleCodes.getJSONObject(0);
|
||||
MdPbStoragevehicleext mdPbStoragevehicleext = mdPbStoragevehicleexts.get(0);
|
||||
// 创建任务
|
||||
JSONObject jsonTaskParam = new JSONObject();
|
||||
jsonTaskParam.put("task_type", "010703");
|
||||
jsonTaskParam.put("start_device_code", pointDto.getPoint_code());
|
||||
jsonTaskParam.put("next_device_code", jsonDis.getString("struct_code"));
|
||||
jsonTaskParam.put("vehicle_code", jsonDis.get("storagevehicle_code"));
|
||||
jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
|
||||
jsonTaskParam.put("vehicle_code2", mdPbStoragevehicleext.getStoragevehicle_code());
|
||||
jsonTaskParam.put("inv_type", mstDao.getBill_type());
|
||||
jsonTaskParam.put("inv_id", mstDao.getIostorinv_id());
|
||||
jsonTaskParam.put("inv_code", mstDao.getBill_code());
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.nl.b_lms.sch.point.dao.SchBasePoint;
|
||||
import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.sch.tasks.TwoLashTask;
|
||||
import org.nl.b_lms.sch.tasks.TwoOutHeapTask;
|
||||
@@ -24,6 +27,8 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.TASKEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvOutMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.LashManageService;
|
||||
import org.nl.b_lms.storage_manage.md.dao.MdPdStoragevehicleext;
|
||||
import org.nl.b_lms.storage_manage.md.dao.mapper.MdPdStoragevehicleextMapper;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
@@ -40,6 +45,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -63,6 +69,11 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
*/
|
||||
private final SchBasePointMapper schBasePointMapper;
|
||||
|
||||
/**
|
||||
* 存储车辆扩展信息
|
||||
*/
|
||||
private final MdPdStoragevehicleextMapper mdPdStoragevehicleextMapper;
|
||||
|
||||
/**
|
||||
* 木箱捆扎绑定服务
|
||||
*/
|
||||
@@ -92,6 +103,7 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
* 任务服务
|
||||
*/
|
||||
private final ISysParamService iSysParamService;
|
||||
private final SchBaseTaskMapper schBaseTaskMapper;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@@ -256,19 +268,26 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
|
||||
@Override
|
||||
public void createHeapTask(JSONObject whereJson) {
|
||||
// 载具扩展属性表
|
||||
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
|
||||
// 点位表
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
// // 载具扩展属性表
|
||||
// WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
|
||||
// // 点位表
|
||||
// WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
|
||||
// 比较两行架点位的任务个数
|
||||
List<JSONObject> executeArr = WQLObject.getWQLObject("SCH_BASE_Task")
|
||||
.query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('04','05','06') and is_delete = '0' ")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
// List<JSONObject> executeArr = WQLObject.getWQLObject("SCH_BASE_Task")
|
||||
// .query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('04','05','06') and is_delete = '0' ")
|
||||
// .getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
|
||||
List<String> status = Stream.of("04","05","06")
|
||||
.collect(Collectors.toList());
|
||||
List<SchBaseTask> taskList = schBaseTaskMapper.selectList(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getHandle_class, TwoOutHeapTask.class.getName())
|
||||
.in(SchBaseTask::getTask_status, status).eq(SchBaseTask::getIs_delete, "0"));
|
||||
|
||||
|
||||
// 根据终点点位进行分组
|
||||
Map<String, List<JSONObject>> groupPointMap = executeArr.stream()
|
||||
.collect(Collectors.groupingBy(row -> row.getString("point_code2")));
|
||||
Map<String, List<SchBaseTask>> groupPointMap = taskList.stream()
|
||||
.collect(Collectors.groupingBy(SchBaseTask::getPoint_code2));
|
||||
|
||||
// 终点: 如果是异常口则直接生成到异常口的任务
|
||||
String next_device_code = IOSEnum.OUT_HANGER.code("行架位1");
|
||||
@@ -279,30 +298,37 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
next_device_code = IOSEnum.CHANGE_OUT.code("换标出库口");
|
||||
} else {
|
||||
// 判断是否是启用状态
|
||||
List<JSONObject> jsonList = pointTab.query("region_code = 'BLKCK' AND is_used = '1'")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
// List<JSONObject> jsonList = pointTab.query("region_code = 'BLKCK' AND is_used = '1'")
|
||||
// .getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
if (ObjectUtil.isEmpty(jsonList)) {
|
||||
List<SchBasePoint> schBasePoints = schBasePointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, "BLKCK").eq(SchBasePoint::getIs_used, "1"));
|
||||
|
||||
|
||||
if (CollUtil.isEmpty(schBasePoints)) {
|
||||
throw new BadRequestException("请检查CK2012/CK2017是否启用!");
|
||||
}
|
||||
if (jsonList.size() == 2) {
|
||||
List<JSONObject> heapOne = Optional.ofNullable(groupPointMap.get(IOSEnum.OUT_HANGER.code("行架位1"))).orElse(new ArrayList<>());
|
||||
List<JSONObject> heapTwo = Optional.ofNullable(groupPointMap.get(IOSEnum.OUT_HANGER.code("行架位2"))).orElse(new ArrayList<>());
|
||||
if (schBasePoints.size() == 2) {
|
||||
List<SchBaseTask> heapOne = Optional.ofNullable(groupPointMap.get(IOSEnum.OUT_HANGER.code("行架位1"))).orElse(new ArrayList<>());
|
||||
List<SchBaseTask> heapTwo = Optional.ofNullable(groupPointMap.get(IOSEnum.OUT_HANGER.code("行架位2"))).orElse(new ArrayList<>());
|
||||
|
||||
|
||||
if (heapOne.size() > heapTwo.size()) {
|
||||
next_device_code = IOSEnum.OUT_HANGER.code("行架位2");
|
||||
}
|
||||
} else {
|
||||
next_device_code = jsonList.get(0).getString("point_code");
|
||||
next_device_code = schBasePoints.get(0).getPoint_code();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 查询木箱对应的载具
|
||||
JSONObject jsonVeExt = extTab.query("pcsn = '" + whereJson.getString("vehicle_code") + "'")
|
||||
.uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(jsonVeExt)) {
|
||||
// JSONObject jsonVeExt = extTab.query("pcsn = '" + whereJson.getString("vehicle_code") + "'")
|
||||
// .uniqueResult(0);
|
||||
|
||||
MdPdStoragevehicleext mdPdStoragevehicleext = mdPdStoragevehicleextMapper.selectOne(new LambdaQueryWrapper<MdPdStoragevehicleext>().eq(MdPdStoragevehicleext::getPcsn, whereJson.getString("vehicle_code")));
|
||||
|
||||
|
||||
if (ObjectUtil.isEmpty(mdPdStoragevehicleext)) {
|
||||
throw new BadRequestException("此木箱没有绑定托盘号!" + whereJson.getString("vehicle_code"));
|
||||
}
|
||||
|
||||
@@ -314,7 +340,7 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id"));
|
||||
jsonTaskParam.put("point_code2", next_device_code);
|
||||
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
|
||||
jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
|
||||
jsonTaskParam.put("vehicle_code2",mdPdStoragevehicleext.getStoragevehicle_code());
|
||||
jsonTaskParam.put("request_param", whereJson);
|
||||
TwoOutHeapTask bean = SpringContextHolder.getBean(TwoOutHeapTask.class);
|
||||
bean.createTask(jsonTaskParam);
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.Map;
|
||||
@Getter
|
||||
public enum PackageInfoIvtEnum {
|
||||
//点位类型
|
||||
POINT_STATUS(MapOf.of("子卷缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5", "装箱区", "6","等待点", "7")),
|
||||
POINT_STATUS(MapOf.of("满轴缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5", "装箱区", "6","等待点", "7")),
|
||||
|
||||
//深浅位类型
|
||||
DEPTH_TYPE(MapOf.of("浅货位", "0", "深货位", "1")),
|
||||
|
||||
@@ -26,12 +26,15 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingprodu
|
||||
import org.nl.b_lms.pdm.info.dao.PdmBiContainerinbound;
|
||||
import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService;
|
||||
import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
|
||||
import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.sch.tasks.TwoBoxExcepTask;
|
||||
import org.nl.b_lms.sch.tasks.TwoExceptionInTask;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.BoxSSXTask;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.MxInTask;
|
||||
import org.nl.b_lms.sch.tasks.boxstack.MxMoveTask;
|
||||
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
|
||||
@@ -42,11 +45,14 @@ import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.TASKEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.LashManageServiceImpl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*;
|
||||
import org.nl.b_lms.storage_manage.md.dao.MdPdStorageVehicleInfo;
|
||||
import org.nl.b_lms.storage_manage.md.dao.MdPdStoragevehicleext;
|
||||
import org.nl.b_lms.storage_manage.md.dao.mapper.MdPdStoragevehicleextMapper;
|
||||
import org.nl.b_lms.storage_manage.md.dao.mapper.MdStorageVehicleInfoMapper;
|
||||
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr;
|
||||
import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructattrMapper;
|
||||
import org.nl.common.enums.NoticeTypeEnum;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.common.enums.SpecEnum;
|
||||
@@ -179,6 +185,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
|
||||
@Autowired
|
||||
private MdPdStoragevehicleextMapper mdPdStoragevehicleextMapper;
|
||||
@Autowired
|
||||
private PdmBiSubpackagerelationMapper pdmBiSubpackagerelationMapper;
|
||||
@Autowired
|
||||
private StIvtStructattrMapper stIvtStructattrMapper;
|
||||
|
||||
@Autowired
|
||||
private MxInTask mxInTask;
|
||||
@@ -1273,9 +1283,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
} else {
|
||||
String pcsn = mdPdStoragevehicleext.getPcsn();
|
||||
if (StringUtils.isNotEmpty(pcsn)) {
|
||||
JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0);
|
||||
|
||||
if (stIvtStructattr != null && stIvtStructattr.size() > 0) {
|
||||
List<StIvtStructattr> storagevehicleCode = stIvtStructattrMapper.selectList(new QueryWrapper<StIvtStructattr>().eq("storagevehicle_code", pcsn));
|
||||
if (storagevehicleCode != null && storagevehicleCode.size() > 0) {
|
||||
errorMsg.add("载具" + whereJson.getString("vehicle_code") + "已绑定" + pcsn);
|
||||
}
|
||||
}
|
||||
@@ -1321,11 +1331,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
throw new BadRequestException("托盘号有误,无法找到对应的托盘类型!");
|
||||
}
|
||||
// 更新子卷包装关系为生成
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("status", IOSEnum.IS_NOTANDYES.code("否"));
|
||||
WQLObject.getWQLObject("pdm_bi_subpackagerelation")
|
||||
.update(param, "package_box_sn = '" + jsonObject.getString("box_no") + "'");
|
||||
|
||||
PdmBiSubpackagerelation pdmBiSubpackagerelation = new PdmBiSubpackagerelation();
|
||||
pdmBiSubpackagerelation.setStatus(IOSEnum.IS_NOTANDYES.code("否"));
|
||||
pdmBiSubpackagerelationMapper.update(pdmBiSubpackagerelation, new QueryWrapper<PdmBiSubpackagerelation>().eq("package_box_sn", jsonObject.getString("box_no")));
|
||||
jsonTaskParam.put("request_param", request_param);
|
||||
TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class);
|
||||
bean.createTask(jsonTaskParam);
|
||||
@@ -1426,6 +1434,23 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
whereJson.put("material_barcode", material_barcode);
|
||||
inBussManageService.inTask(whereJson);
|
||||
|
||||
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("子卷装箱"))) {
|
||||
//校验
|
||||
List<PdmBiSubpackagerelation> pdmBiSubpackagerelations = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().eq("package_box_sn", whereJson.getString("box_no")).eq("status", "0"));
|
||||
if (ObjectUtil.isEmpty(pdmBiSubpackagerelations)){
|
||||
throw new BadRequestException("未查询到子卷包装信息!");
|
||||
}
|
||||
MdPdStorageVehicleInfo mdPdStorageVehicleInfo = mdStorageVehicleInfoMapper.selectOne(new QueryWrapper<MdPdStorageVehicleInfo>().eq("storagevehicle_code", whereJson.getString("vehicle_code")));
|
||||
if (ObjectUtil.isEmpty(mdPdStorageVehicleInfo)) {
|
||||
throw new BadRequestException("载具不存在!");
|
||||
}
|
||||
BoxSSXTask boxSSXTask = new BoxSSXTask();
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("start_device_code",IOSEnum.OUT_HANGER.code("木箱出库位"));
|
||||
jsonParam.put("next_device_code",IOSEnum.POINT_CODE.code("木箱扫码位"));
|
||||
jsonParam.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
boxSSXTask.createTask(jsonParam);
|
||||
|
||||
}
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "下发成功!");
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.List;
|
||||
public abstract class AbstractAcsTask {
|
||||
@Autowired
|
||||
AcsUtil acsUtil;
|
||||
|
||||
/**
|
||||
* @discription 在如果任务无法形成会一直定时刷新判断
|
||||
* @author ldjun
|
||||
@@ -113,19 +114,18 @@ public abstract class AbstractAcsTask {
|
||||
public JSONObject immediateNotifyAcs(String task_id) {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
}catch (Exception ex){
|
||||
} catch (Exception ex) {
|
||||
|
||||
}
|
||||
|
||||
List<AcsTaskDto> taskList = this.schedule();
|
||||
if (ObjectUtil.isNotEmpty(taskList)) {
|
||||
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList));
|
||||
if (acsUtil == null){
|
||||
return AcsUtil.notifyAcs("api/wms/task", arr);
|
||||
}else {
|
||||
return acsUtil.notifyAcs3("api/wms/task", arr);
|
||||
}
|
||||
}
|
||||
List<AcsTaskDto> taskList = this.schedule();
|
||||
if (ObjectUtil.isNotEmpty(taskList)) {
|
||||
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList));
|
||||
if (acsUtil == null) {
|
||||
return AcsUtil.notifyAcs("api/wms/task", arr);
|
||||
} else {
|
||||
return acsUtil.notifyAcs3("api/wms/task", arr);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
@@ -187,6 +187,8 @@ logging:
|
||||
file:
|
||||
path: C:\log\wms
|
||||
config: classpath:logback-spring.xml
|
||||
level:
|
||||
org.springframework: DEBUG
|
||||
|
||||
# Sa-Token配置
|
||||
sa-token:
|
||||
@@ -233,3 +235,4 @@ management:
|
||||
system: false
|
||||
jvm: false
|
||||
logback: false
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ spring:
|
||||
freemarker:
|
||||
check-template-location: false
|
||||
profiles:
|
||||
active: localDev
|
||||
active: dev
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
data:
|
||||
|
||||
Reference in New Issue
Block a user