Browse Source

木箱装箱功能开发测试,出库wql修改

master
李帅 6 days ago
parent
commit
4e74fba86b
  1. 4
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/controller/BstIvtBoxstackController.java
  2. 4
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/enums/BoxStackEnum.java
  3. 6
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/service/dao/mapper/BstIvtBoxstackMapper.java
  4. 39
      lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/service/dao/mapper/BstIvtBoxstackMapper.xml
  5. 3
      lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dto/PdmBiSlittingproductionplanDto.java
  6. 340
      lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java
  7. 13
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java
  8. 2
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java
  9. 249
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java
  10. 165
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java
  11. 181
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/BoxSSXTask.java
  12. 215
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/InBoxTrussTask.java
  13. 92
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/MxOutTask.java
  14. 121
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/auto/AutoMxZxTask.java
  15. 2
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java
  16. 4
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java
  17. 6
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java
  18. 12
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java
  19. 28
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java
  20. 23
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java
  21. 66
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java
  22. 2
      lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java
  23. 39
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  24. 22
      lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java
  25. 3
      lms/nladmin-system/src/main/resources/config/application-dev.yml
  26. 2
      lms/nladmin-system/src/main/resources/config/application.yml
  27. 8
      lms/nladmin-ui/src/views/b_lms/bst/ivt/paper/index.vue
  28. 2
      lms/nladmin-ui/src/views/wms/pdm/order/rawfoilworkorder/index.vue
  29. 8
      lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/index.vue
  30. 18
      lms/nladmin-ui/src/views/wms/st/inStor/check/AddDialog.vue
  31. 2
      lms/nladmin-ui/src/views/wms/st/inStor/check/CheckDialog.vue
  32. 14
      lms/nladmin-ui/src/views/wms/st/inStor/check/RepairDialog.vue

4
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/controller/BstIvtBoxstackController.java

@ -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);
}
}
}

4
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/enums/BoxStackEnum.java

@ -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;

6
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/service/dao/mapper/BstIvtBoxstackMapper.java

@ -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);
}

39
lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/boxstack/service/dao/mapper/BstIvtBoxstackMapper.xml

@ -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>

3
lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dto/PdmBiSlittingproductionplanDto.java

@ -162,7 +162,8 @@ public class PdmBiSlittingproductionplanDto extends PdmBiSlittingproductionplan
private String point_location;
private String source_container_name;
/** 客户要求幅宽 */
private String width_standard;
/**
* 人员对应的区域

340
lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java

@ -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());

13
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java

@ -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);
}
}

2
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java

@ -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("未锁定"));

249
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java

@ -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();
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;
}
@Autowired
private SchBasePointMapper schPointMapper;
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);
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 (ObjectUtil.isEmpty(pointJson)) {
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");

165
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java

@ -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());
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");
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");
schBaseTaskMapper.insert(task);
return task.getTask_id();
}
@Override

181
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/BoxSSXTask.java

@ -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("取消"));
}
}

215
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/InBoxTrussTask.java

@ -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("取消"));
}
}

92
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/MxOutTask.java

@ -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();

121
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/boxstack/auto/AutoMxZxTask.java

@ -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();
}
}
}
}

2
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java

@ -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;
}

4
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java

@ -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 {

6
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java

@ -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;
}

12
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java

@ -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",

28
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java

@ -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());
wo_Task.update(map, "task_id='" + whereJson.getString("task_id") + "'");
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());
schBaseTaskMapper.updateById(schBaseTaskUpdate);
// 查询此任务下所有的分配明细
disDaoList.forEach(row -> {

23
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java

@ -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());

66
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java

@ -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);
List<SchBasePoint> schBasePoints = schBasePointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, "BLKCK").eq(SchBasePoint::getIs_used, "1"));
if (ObjectUtil.isEmpty(jsonList)) {
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);

2
lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java

@ -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")),

39
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -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
lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java

@ -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;
}

3
lms/nladmin-system/src/main/resources/config/application-dev.yml

@ -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

2
lms/nladmin-system/src/main/resources/config/application.yml

@ -6,7 +6,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: localDev
active: dev
jackson:
time-zone: GMT+8
data:

8
lms/nladmin-ui/src/views/b_lms/bst/ivt/paper/index.vue

@ -23,7 +23,7 @@
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" >
<crudOperation :permission="permission">
<el-button
slot="right"
class="filter-item"
@ -70,7 +70,7 @@
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="ivt_id" v-if="false" label="载具标识" :min-width="flexWidth('ivt_id',crud.data,'载具标识')" />
<el-table-column v-if="false" prop="ivt_id" label="载具标识" :min-width="flexWidth('ivt_id',crud.data,'载具标识')" />
<el-table-column prop="paper_code" label="管芯编码" :min-width="flexWidth('paper_code',crud.data,'管芯编码')" />
<el-table-column prop="material_code" label="管芯类型" :min-width="flexWidth('material_code',crud.data,'物料号')" />
<el-table-column prop="material_name" label="管芯类型名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
@ -78,7 +78,7 @@
<el-table-column prop="fact_weight" label="实际重量" :formatter="crud.formatNum3" :min-width="flexWidth('qty',crud.data,'实际重量')" />
<el-table-column prop="update_optname" label="修改人" :min-width="flexWidth('update_optname',crud.data,'修改人')" />
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改人姓名')" />
<el-table-column v-permission="['admin','paper:del','paper:edit','paper:add']" label="操作" width="120px" align="center" fixed="right">
<el-table-column v-permission="['admin','paper:del','paper:edit','paper:add']" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
@ -89,7 +89,7 @@
</el-table>
<!--分页组件-->
<pagination />
<MaterDialog :dialog-show.sync="materShow" :mater-opt-code="materType" @setMaterValue="tableChanged" />
<MaterDialog :dialog-show.sync="materShow" :mater-opt-code="materType" @setMaterValue="tableChanged" />
</div>
</div>
</template>

2
lms/nladmin-ui/src/views/wms/pdm/order/rawfoilworkorder/index.vue

@ -265,7 +265,7 @@
<el-table-column prop="productin_qty" label="重量(Kg)" :min-width="flexWidth('productin_qty',crud.data,'重量(Kg)')" :formatter="crud.formatNum3" />
<el-table-column prop="agvno" label="车号" :min-width="flexWidth('agvno',crud.data,'车号')" />
<el-table-column prop="pscn" label="SAP批次号" :min-width="flexWidth('pscn',crud.data,'批次号')" />
<el-table-column prop="origin" label="母卷来源" :min-width="flexWidth('origin',crud.data,'母卷来源')" :formatter="formatOrigin"/>
<el-table-column prop="origin" label="母卷来源" :min-width="flexWidth('origin',crud.data,'母卷来源')" :formatter="formatOrigin" />
<el-table-column prop="roll_status" label="母卷状态" :min-width="flexWidth('roll_status',crud.data,'母卷状态')" :formatter="formatRollStatus" />
<el-table-column prop="product_area" label="生产区域" :min-width="flexWidth('product_area',crud.data,'生产区域')" />
<el-table-column prop="is_baking" label="请求烘烤" :min-width="flexWidth('is_baking',crud.data,'请求烘烤')" :formatter="formatBakeIsOrNot" />

8
lms/nladmin-ui/src/views/wms/pdm/order/slittingplan/index.vue

@ -357,10 +357,10 @@
<el-table-column prop="status" label="状态" :formatter="formatStatusName" />
<el-table-column prop="order_type" label="订单类型" :formatter="formatTypeName" />
<el-table-column prop="mfg_order_name" label="订单号" min-width="200" />
<!-- <template slot-scope="scope">-->
<!-- <el-link type="primary" @click="toView2(scope.$index, scope.row)">{{ scope.row.mfg_order_name }}</el-link>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <template slot-scope="scope">-->
<!-- <el-link type="primary" @click="toView2(scope.$index, scope.row)">{{ scope.row.mfg_order_name }}</el-link>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="container_name" label="子卷号" min-width="140" show-overflow-tooltip />
<el-table-column prop="parent_container_name" label="母卷号" min-width="120" show-overflow-tooltip />
<el-table-column prop="ware_house" label="来源位置" :formatter="formatHouseName" width="120px" />

18
lms/nladmin-ui/src/views/wms/st/inStor/check/AddDialog.vue

@ -93,59 +93,59 @@
<!--左侧插槽-->
<slot name="left" />
<el-button
v-if="crud.status.cu > 0"
slot="left"
class="filter-item"
type="primary"
icon="el-icon-plus"
size="mini"
v-if="crud.status.cu > 0"
@click="queryDtl()"
>
添加盘点物料
</el-button>
<el-button
v-if="crud.status.view > 0"
slot="left"
class="filter-item"
type="success"
icon="el-icon-refresh"
size="mini"
:loading="showDtlLoading"
v-if="crud.status.view > 0"
@click="queryDtlCheck('1')"
>
已盘点
</el-button>
<el-button
v-if="crud.status.view > 0"
slot="left"
class="filter-item"
type="success"
icon="el-icon-refresh"
size="mini"
:loading="showDtlLoading"
v-if="crud.status.view > 0"
@click="queryDtlCheck('2')"
>
未盘点
</el-button>
<el-button
v-if="crud.status.view > 0"
slot="left"
class="filter-item"
type="success"
icon="el-icon-thumb"
size="mini"
:loading="showDtlLoading"
v-if="crud.status.view > 0"
@click="downdtl"
>
导出
</el-button>
<el-button
v-if="crud.status.view > 0"
slot="left"
class="filter-item"
type="success"
icon="el-icon-folder-add"
size="mini"
v-if="crud.status.view > 0"
@click="repairDialog"
>
补录信息
@ -170,11 +170,11 @@
<span v-if="crud.status.cu > 0">{{ scope.row.storagevehicle_code }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip v-if="crud.status.view > 0" prop="base_qty" label="净重" width="150" align="center" :formatter="crud.formatNum3"/>
<el-table-column v-if="crud.status.view > 0" show-overflow-tooltip prop="base_qty" label="净重" width="150" align="center" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="150" align="center" />
<el-table-column prop="material_name" label="物料名称" align="center" min-width="150" show-overflow-tooltip />
<el-table-column prop="date_of_production" label="生产日期" v-if="crud.status.view > 0" align="center" min-width="150" show-overflow-tooltip />
<el-table-column prop="remark" v-if="crud.status.view > 0" label="备注" align="center" min-width="150" show-overflow-tooltip />
<el-table-column v-if="crud.status.view > 0" prop="date_of_production" label="生产日期" align="center" min-width="150" show-overflow-tooltip />
<el-table-column v-if="crud.status.view > 0" prop="remark" label="备注" align="center" min-width="150" show-overflow-tooltip />
<el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="160" fixed="right">
<template scope="scope">
<el-button type="danger" class="filter-item" size="mini" icon="el-icon-delete" @click.native.prevent="deleteRow(scope.$index, form.tableData)" />
@ -182,7 +182,7 @@
</el-table-column>
</el-table>
<AddDtl :dialog-show.sync="dtlShow" :stor-id="storId" @tableChanged="tableChanged" />
<DtlViewDialog :dialog-show.sync="dtlViewShow" :open-param="paramDtlView"/>
<DtlViewDialog :dialog-show.sync="dtlViewShow" :open-param="paramDtlView" />
<RepairDialog :dialog-show.sync="repairShow" :open-param="check_code" :father-method="queryDtlView" />
</el-dialog>
</template>

2
lms/nladmin-ui/src/views/wms/st/inStor/check/CheckDialog.vue

@ -123,7 +123,7 @@
<el-button type="primary" @click="submitCheck">确认</el-button>
</span>
<MaterDialog :dialog-show.sync="materShow" @tableChanged2="tableChanged2" />
<DtlViewDialog :dialog-show.sync="dtlViewShow" :open-param="paramDtlView"/>
<DtlViewDialog :dialog-show.sync="dtlViewShow" :open-param="paramDtlView" />
</el-dialog>
</template>

14
lms/nladmin-ui/src/views/wms/st/inStor/check/RepairDialog.vue

@ -19,7 +19,7 @@
<el-input v-model="form1.material_code" style="width: 250px;" />
</el-form-item>
<el-form-item label="备注:" prop="remark">
<el-input type="textarea" v-model="form1.remark" style="width: 250px;" />
<el-input v-model="form1.remark" type="textarea" style="width: 250px;" />
</el-form-item>
</el-form>
@ -52,6 +52,12 @@ export default {
default: null
}
},
data() {
return {
dialogVisible: false,
form1: {}
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
@ -59,12 +65,6 @@ export default {
}
}
},
data() {
return {
dialogVisible: false,
form1: {}
}
},
methods: {
handleClose(done) {
this.$confirm('确认关闭?')

Loading…
Cancel
Save