fix:异常出库、NG卷校验

This commit is contained in:
zhouz
2025-07-20 18:49:04 +08:00
parent 4d6344c4bb
commit a366af32dd
12 changed files with 655 additions and 438 deletions

View File

@@ -166,8 +166,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
/**
* 查询待检区木箱规格
*
* @param query 查询条件
* @param pageQuery 分页参数
* @param query 查询条件
* @param pageQuery 分页参数
*/
@Override
public Object queryBoxSpec(Map query, Pageable pageQuery) {
@@ -186,9 +186,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
/**
* 根据订单号查询子卷信息
*
* @param whereJson 查询条件
*/
@Override
@@ -213,6 +213,16 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (ObjectUtils.isEmpty(ivtList)) {
throw new BadRequestException("该子卷未质检或品质不符合要求,请扫码质检!");
}
//调用MES接口判断是否是NG卷
JSONObject result_jo = new JSONObject();
result_jo.put("container_name", whereJson.get("container_name"));
JSONObject jsonObject = lmsToMesServiceImpl.GetChildWeightIsSamplePDA(result_jo);
if (ObjectUtils.isEmpty(jsonObject) || !jsonObject.containsKey("result")) {
throw new BadRequestException("反馈内容有误," + jsonObject.toString());
}
if (!jsonObject.getBoolean("result")) {
throw new BadRequestException("MES查询出当前子卷【" + whereJson.get("container_name") + "】检测结果不能通过无法进行装箱MES反馈内容为" + jsonObject.getString("rtdat") + "");
}
// if (ivtList.stream().noneMatch(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区")))) {
// throw new BadRequestException("该子卷不在待检区,请检查!");
// }
@@ -276,11 +286,11 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
@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)
@@ -295,13 +305,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)) {
@@ -310,9 +320,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;
@@ -338,23 +348,23 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
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));
}
@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;
@@ -364,7 +374,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("子卷编码不能为空");
}
String deviceCode = "ZXQ_1_1";
@@ -373,9 +383,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.eq("is_delete", "0")
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>()
.eq("point_status",PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq("ivt_status",PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
if (count+count2>8){
.eq("point_status", PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
if (count + count2 > 8) {
throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
}
@@ -384,63 +394,63 @@ 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());
Set<String> containers = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).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 + "未装完");
}
String boxSn = subList.get(0).getPackage_box_sn();
//查询木箱所在货位
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
JSONArray boxAttrs = attrTab.query("storagevehicle_code = '" + boxSn + "' and sect_id = '1748219897940414464'").getResultJSONArray(0);
if (boxAttrs.size() == 0){
throw new BadRequestException("当前木箱"+boxSn+"库存信息查询不到,请确认");
if (boxAttrs.size() == 0) {
throw new BadRequestException("当前木箱" + boxSn + "库存信息查询不到,请确认");
}
JSONObject boxAttr = boxAttrs.getJSONObject(0);
JSONObject boxAttr = boxAttrs.getJSONObject(0);
List<SchBaseTask> hasTask = taskService.list(new QueryWrapper<SchBaseTask>()
.select("point_code2")
.eq("is_delete", "0")
.eq("point_code1", boxAttr.getString("struct_code"))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (!CollectionUtils.isEmpty(hasTask)){
if (!CollectionUtils.isEmpty(hasTask)) {
boolean zxq = hasTask.stream().map(a -> a.getPoint_code2()).filter(a -> a.contains("ZXQ")).findAny().isPresent();
if (zxq){
if (zxq) {
throw new BadRequestException("当前子卷正在执行装箱入库操作");
}else{
throw new BadRequestException("当前空木箱"+boxSn+"存在正在执行的任务,稍后再操作");
} else {
throw new BadRequestException("当前空木箱" + boxSn + "存在正在执行的任务,稍后再操作");
}
}
// 查询木箱对应的托盘号
JSONObject jsonVeExt = WQLObject.getWQLObject("md_pb_storagevehicleext").query("pcsn = '" + boxSn + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+boxSn);
throw new BadRequestException("此木箱没有绑定托盘号!" + boxSn);
}
//子卷到装箱区
agvTransfer(containers, deviceCode, boxSn);
String task_group_id = null;
if (boxAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
JSONObject 浅Attr = attrTab
.query("zdepth = '1' and row_num = '"+boxAttr.getString("row_num")+"' and col_num = '" + boxAttr.getString("col_num") + "' and layer_num = '"+boxAttr.getString("layer_num")+"'")
.query("zdepth = '1' and row_num = '" + boxAttr.getString("row_num") + "' and col_num = '" + boxAttr.getString("col_num") + "' and layer_num = '" + boxAttr.getString("layer_num") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(浅Attr)){
throw new BadRequestException(boxAttr.getString("struct_code")+"对应浅货位信息不正确");
if (ObjectUtil.isEmpty(浅Attr)) {
throw new BadRequestException(boxAttr.getString("struct_code") + "对应浅货位信息不正确");
}
if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))){
if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))) {
if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("木箱货位"+boxAttr.getString("struct_code")+"的浅货位存在正在执行的任务");
throw new BadRequestException("木箱货位" + boxAttr.getString("struct_code") + "的浅货位存在正在执行的任务");
}
}else {
} else {
if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 判断浅货位木箱和深货位木箱是否相同规格
task_group_id = outBoxManageService.createBoxMove(浅Attr);
@@ -449,11 +459,11 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.eq("is_delete", "0")
.eq("point_code1", 浅Attr.getString("struct_code"))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code"));
if (!CollectionUtils.isEmpty(list)) {
throw new BadRequestException("当前木箱所在货位" + boxAttr.getString("struct_code") + "对应浅货位存在任务" + 浅Attr.getString("task_code"));
}
}else {
throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code"));
} else {
throw new BadRequestException("当前木箱所在货位" + boxAttr.getString("struct_code") + "对应浅货位存在任务" + 浅Attr.getString("task_code"));
}
}
}
@@ -462,7 +472,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
pdmBiContainerinbound.setContainer_name(containerName);
pdmBiContainerinbound.setBox(boxSn);
Boolean inbound = param.getBoolean("inbound");
if (inbound!=null){
if (inbound != null) {
pdmBiContainerinbound.setInbound(inbound);
}
iPdmBiContainerinboundService.save(pdmBiContainerinbound);
@@ -482,7 +492,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
attrTab.update(boxAttr);
twoOutBoxTask.createTask(jsonTaskParam);
twoOutBoxTask.immediateNotifyAcs(null);
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZXRK,null,Boolean.TRUE,null,containerList);
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZXRK, null, Boolean.TRUE, null, containerList);
}
@@ -490,7 +500,8 @@ 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)) {
@@ -526,8 +537,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
/**
* 空木箱绑定
*/
@@ -561,7 +570,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
updateWrapper.in("workorder_id", workIdList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper);
//给MES传输子卷包装关系
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ,null,Boolean.TRUE,null,containerNameList.stream().collect(Collectors.toList()));
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ, null, Boolean.TRUE, null, containerNameList.stream().collect(Collectors.toList()));
CompletableFuture.runAsync(() -> {
try {
log.error("----回传子卷包装关系----");
@@ -670,7 +679,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
/**
* 多选删除
*
@@ -749,13 +757,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
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
@@ -767,14 +775,14 @@ 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)){
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("date", now);
jo.put("task_step", i1);
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo.put("vehicle_code2", groupId);
zxqTask.createTaskReturnTask(jo);
@@ -786,39 +794,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;
}
@@ -836,12 +844,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>()
@@ -861,16 +869,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);
@@ -884,57 +892,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);
}
}

View File

@@ -36,5 +36,6 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper<BstIvtPackageinfo
List<SchBaseTask> getTaskList(Set<String> pointCodes1, Set<String> pointCodes2, Set<String> pointCodes3, Set<String> pointCodes4);
List<BstIvtPackageinfoivt> selectNoTaskPoint(@Param("pointStatus") String pointStatus, @Param("ivtStatus")String ivtStatus);
List<BstIvtPackageinfoivt> selectNoTaskPoint2(@Param("pointStatus") String pointStatus, @Param("ivtStatus")String ivtStatus);
List<BstIvtPackageinfoivt> selectNoTargetTaskPoint(@Param("pointStatus") String pointStatus, @Param("ivtStatus")String ivtStatus);
}

View File

@@ -90,6 +90,15 @@
AND (t.point_code1 = p.point_code OR t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code)
AND t.is_delete = '0')
</select>
<select id="selectNoTaskPoint2" resultType="org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt">
select p.*
from bst_ivt_packageinfoivt p
where point_status = #{pointStatus}
AND ivt_status = #{ivtStatus}
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[ < ]]> '07'
AND (t.point_code1 = p.point_code OR t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code)
AND t.is_delete = '0')
</select>
<select id="selectNoTargetTaskPoint" resultType="org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt">
select p.*

View File

@@ -92,7 +92,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
private IpdmBiSubpackagerelationService subpackagerelationService;
/**
* 查询数据分页
*
@@ -100,7 +99,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @param page 分页参数
*/
@Override
public IPage queryAll(Map whereJson, PageQuery page) {
public IPage queryAll(Map whereJson, PageQuery page) {
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new QueryWrapper<BstIvtPackageinfoivt>().lambda();
String isUsed = MapUtil.getStr(whereJson, "is_used");
String pointCode = MapUtil.getStr(whereJson, "point_code");
@@ -124,20 +123,20 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
Page selectPage = bstIvtPackageinfoivtMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()), queryWrapper);
List<BstIvtPackageinfoivt> records = selectPage.getRecords();
Set<String> containers = records.stream().map(BstIvtPackageinfoivt::getContainer_name).filter(a->StringUtils.isNotEmpty(a)).collect(Collectors.toSet());
Map<String,PdmBiSlittingproductionplan> listMap = new HashMap();
if (!CollectionUtils.isEmpty(containers)){
Set<String> containers = records.stream().map(BstIvtPackageinfoivt::getContainer_name).filter(a -> StringUtils.isNotEmpty(a)).collect(Collectors.toSet());
Map<String, PdmBiSlittingproductionplan> listMap = new HashMap();
if (!CollectionUtils.isEmpty(containers)) {
List<PdmBiSlittingproductionplan> containerInfo = iPdmBiSlittingproductionplanService.list(new QueryWrapper<PdmBiSlittingproductionplan>()
.in("container_name", containers)
.select("container_name", "weight", "paper_weight","split_breadth","split_height"));
listMap = containerInfo.stream().collect(HashMap::new,(m, o) -> m.put(o.getContainer_name(),o), HashMap::putAll);
.select("container_name", "weight", "paper_weight", "split_breadth", "split_height"));
listMap = containerInfo.stream().collect(HashMap::new, (m, o) -> m.put(o.getContainer_name(), o), HashMap::putAll);
}
List<BstIvtPackageinfoivtVO> voRecords = new ArrayList<>();
for (BstIvtPackageinfoivt record : records) {
BstIvtPackageinfoivtVO vo = new BstIvtPackageinfoivtVO();
BeanUtils.copyProperties(record,vo);
BeanUtils.copyProperties(record, vo);
PdmBiSlittingproductionplan planInfo = listMap.get(record.getContainer_name());
if (planInfo!=null){
if (planInfo != null) {
vo.setWeight(planInfo.getWeight());
vo.setPaper_weight(planInfo.getPaper_weight());
vo.setSplit_breadth(planInfo.getSplit_breadth().intValue());
@@ -159,8 +158,11 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
public Map<String, Object> secondaryAllocationPoint(String taskCode, String actionType) {
JSONObject result = new JSONObject();
result.put("status", HttpStatus.BAD_REQUEST.value());
RedissonUtils.lock(c-> {
try {Thread.sleep(1000);} catch (InterruptedException e) {}
RedissonUtils.lock(c -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
String pointCode = "";
String action = "";
switch (actionType) {
@@ -184,7 +186,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
result.put("status", HttpStatus.OK.value());
return null;
},"sendProductToFirstFloor"+actionType,null);
}, "sendProductToFirstFloor" + actionType, null);
log.info("一楼装箱区点位二次分配" + taskCode + "---------------------------------------------" + result);
return result;
}
@@ -221,7 +223,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.eq("is_delete", "0")
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
//检查是否满足二次分配条件
if (count>0){
if (count > 0) {
throw new BadRequestException("正在执行行架任务");
}
checkTaskInfo(baseTask);
@@ -247,13 +249,13 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
updateWrapper.set(SchBaseTask::getPoint_code1, newPoint.getPoint_code());
if (StringUtils.isNotBlank(newPoint.getContainer_name())) {
//更新子卷号
updateWrapper.set(SchBaseTask::getVehicle_code,newPoint.getContainer_name());
updateWrapper.set(SchBaseTask::getVehicle_code, newPoint.getContainer_name());
}
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
updateWrapper.set(SchBaseTask::getPoint_code2,newPoint.getPoint_code());
updateWrapper.set(SchBaseTask::getPoint_code2, newPoint.getPoint_code());
}
//标记二次分配已分配过点位
updateWrapper.set(SchBaseTask::getResponse_param,IOSEnum.IS_NOTANDYES.code(""));
updateWrapper.set(SchBaseTask::getResponse_param, IOSEnum.IS_NOTANDYES.code(""));
taskService.update(null, updateWrapper);
log.info("一楼装箱区二次分配" + taskCode + ",接口返回最新点位:---------------------------------------------" + newPoint.getPoint_code());
return newPoint.getPoint_code();
@@ -605,8 +607,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
/**
* 更新点位状态
*
@@ -653,8 +653,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
String pointCode = baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) ? baseTask.getPoint_code3() : baseTask.getPoint_code1();
upDateIvtOrTask(baseTask, pointCode);
}
}
else if ((baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) ||
} else if ((baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) ||
baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务"))
|| baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("管制区移库任务"))
)) {
@@ -769,7 +768,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
UpdateWrapper<SchBaseTask> updateWrapper1 = new UpdateWrapper<>();
updateWrapper1.eq("task_id", baseTask.getTask_id());
updateWrapper1.set("request_param", PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"));
taskService.update(null,updateWrapper1);
taskService.update(null, updateWrapper1);
log.info("一楼装箱区二次分配取货完成" + baseTask.getTask_code() + ",取货完成信号接收成功,点位:" + pointCode + "子卷号:" + baseTask.getVehicle_code());
@@ -828,7 +827,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
/**
* 判断点位是否有外层阻挡
*/
private static BstIvtPackageinfoivt getBstIvtPackageinfoivt(List<BstIvtPackageinfoivt> vehicleList,List<BstIvtPackageinfoivt> kzjIvtList) {
private static BstIvtPackageinfoivt getBstIvtPackageinfoivt(List<BstIvtPackageinfoivt> vehicleList, List<BstIvtPackageinfoivt> kzjIvtList) {
boolean hasEmptyVehicle;
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
if (ObjectUtils.isNotEmpty(vehicleList)) {
@@ -850,11 +849,11 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* 根据库存和空载具返回空点位
*/
private static BstIvtPackageinfoivt getSecondaryIvt(List<BstIvtPackageinfoivt> vehicleList, List<BstIvtPackageinfoivt> kzjIvtList) {
List<BstIvtPackageinfoivt> emptyVehicleList;
List<BstIvtPackageinfoivt> emptyVehicleList;
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
if (ObjectUtils.isNotEmpty(vehicleList)) {
emptyVehicleList = vehicleList.stream()
.filter(r -> r.getSort_seq().compareTo(kzjIvtList.get(0).getSort_seq()) < 0 ).collect(Collectors.toList());
.filter(r -> r.getSort_seq().compareTo(kzjIvtList.get(0).getSort_seq()) < 0).collect(Collectors.toList());
//有空位匹配
if (ObjectUtils.isNotEmpty(emptyVehicleList)) {
return emptyVehicleList.get(0);
@@ -951,8 +950,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
/**
* 创建
*
@@ -994,130 +991,158 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
UpdateWrapper<BstIvtPackageinfoivt> updateWrapper = new UpdateWrapper<>();
//LMS获取MES称重后子卷信息
JSONObject jo = new JSONObject();
//子卷质检合格品和管制品
if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isBlank(whereJson.getString("pointCode"))) {
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))) {
throw new BadRequestException("质检结果只能为合格品或管制品");
}
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))) {
PdmBiSubpackagerelation one = subpackagerelationService.getOne(new QueryWrapper<PdmBiSubpackagerelation>()
.eq("container_name", whereJson.getString("container_name")));
if (one!=null){
throw new BadRequestException("包装关系存在,请先解绑MES及LMS包装关系");
}
}
dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getContainer_name, whereJson.getString("container_name")));
if (ObjectUtils.isEmpty(dtoList)) {
throw new BadRequestException("子卷号或点位信息有误,请核对是否存在!");
}
if (dtoList.size() > 1) {
result.put("status", org.springframework.http.HttpStatus.BAD_REQUEST.value());
result.put("message", "存在多个相同子卷号或点位信息有误,请核对是否存在!");
return result;
}
BstIvtPackageinfoivt packageinfoivt = dtoList.get(0);
if (packageinfoivt.getPoint_status().equals("4")) {
throw new BadRequestException("管制点设置子卷状态时需要选择点位");
}
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
if (packageinfoivt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))){
throw new BadRequestException("当前子卷已设置为管制品");
}
//获取子卷最新信息
jo.put("container_name", whereJson.getString("container_name"));
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
/*
* 自动打标
*/
// 判断是否自动打标
String auto_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("AUTO_PRINT_TABLE").getValue();
if (auto_table.equals(IOSEnum.IS_NOTANDYES.code(""))) {
// 内标默认打印机
String within_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("WITHIN_PEINT_TWO").getValue();
JSONObject within_print = WQLObject.getWQLObject("pdm_bi_printinfo")
.query("print_name = '" + within_table + "'")
.uniqueResult(0);
// 管标默认打印机
String pipe_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("PIPE_PEINT_TWO").getValue();
JSONObject pipe_print = WQLObject.getWQLObject("pdm_bi_printinfo")
.query("print_name = '" + pipe_table + "'")
.uniqueResult(0);
// 组织数据
JSONObject param = new JSONObject();
param.put("pcsn", whereJson.getString("container_name"));
param.put("print_code", pipe_print.getString("print_id"));
printTableTwoService.pipeTable(param);
param.put("print_code", within_print.getString("print_id"));
printTableTwoService.withinTable(param);
String is_error = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_error").getValue();
String point_code = whereJson.getString("pointCode");
if ("1".equals(is_error) && "ZXQ_137,ZXQ_138".contains(point_code) && ObjectUtils.isNotEmpty(point_code)) {
String ivt_status = whereJson.getString("ivt_status");
String container_name = whereJson.getString("container_name");
if (point_code.equals("ZXQ_137")) {
//只能进行绑定空
if (!whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code(""))) {
throw new BadRequestException("该点位只能设置为空!");
}
packageinfoivtService.update(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.set(BstIvtPackageinfoivt::getIvt_status, ivt_status)
.eq(BstIvtPackageinfoivt::getPoint_code, point_code));
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZJ,MapOf.of("质检结果",whereJson.getString("ivt_status")),Boolean.TRUE,null, packageinfoivt.getContainer_name());
updateWrapper.set("container_name", packageinfoivt.getContainer_name());
updateWrapper.set("ivt_status", whereJson.getString("ivt_status"));
}
//复称
else if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isNotBlank(whereJson.getString("pointCode"))) {
dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_code, whereJson.getString("pointCode")));
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
//获取子卷最新信息
jo.put("container_name", whereJson.getString("container_name"));
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
updateWrapper.set("container_name", whereJson.getString("container_name"));
updateWrapper.set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品"));
if (point_code.equals("ZXQ_138")) {
//只能进行绑定空
if (!whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
throw new BadRequestException("该点位只能绑定合格品!");
}
packageinfoivtService.update(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.set(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))
.set(BstIvtPackageinfoivt::getContainer_name, container_name)
.eq(BstIvtPackageinfoivt::getPoint_code, point_code));
}
} else {
//子卷质检合格品和管制品
if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isBlank(whereJson.getString("pointCode"))) {
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))) {
throw new BadRequestException("质检结果只能为合格品或管制品");
}
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))) {
PdmBiSubpackagerelation one = subpackagerelationService.getOne(new QueryWrapper<PdmBiSubpackagerelation>()
.eq("container_name", whereJson.getString("container_name")));
if (one != null) {
throw new BadRequestException("包装关系存在,请先解绑MES及LMS包装关系");
}
}
dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getContainer_name, whereJson.getString("container_name")));
if (ObjectUtils.isEmpty(dtoList)) {
throw new BadRequestException("子卷号或点位信息有误,请核对是否存在!");
}
if (dtoList.size() > 1) {
result.put("status", org.springframework.http.HttpStatus.BAD_REQUEST.value());
result.put("message", "存在多个相同子卷号或点位信息有误,请核对是否存在!");
return result;
}
BstIvtPackageinfoivt packageinfoivt = dtoList.get(0);
if (packageinfoivt.getPoint_status().equals("4")) {
throw new BadRequestException("管制点设置子卷状态时需要选择点位");
}
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
if (packageinfoivt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))) {
throw new BadRequestException("当前子卷已设置为管制品");
}
//获取子卷最新信息
jo.put("container_name", whereJson.getString("container_name"));
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
/*
* 自动打标
*/
// 判断是否自动打标
String auto_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("AUTO_PRINT_TABLE").getValue();
if (auto_table.equals(IOSEnum.IS_NOTANDYES.code(""))) {
// 内标默认打印机
String within_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("WITHIN_PEINT_TWO").getValue();
JSONObject within_print = WQLObject.getWQLObject("pdm_bi_printinfo")
.query("print_name = '" + within_table + "'")
.uniqueResult(0);
// 管标默认打印机
String pipe_table = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("PIPE_PEINT_TWO").getValue();
JSONObject pipe_print = WQLObject.getWQLObject("pdm_bi_printinfo")
.query("print_name = '" + pipe_table + "'")
.uniqueResult(0);
// 组织数据
JSONObject param = new JSONObject();
param.put("pcsn", whereJson.getString("container_name"));
param.put("print_code", pipe_print.getString("print_id"));
printTableTwoService.pipeTable(param);
param.put("print_code", within_print.getString("print_id"));
printTableTwoService.withinTable(param);
}
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.ZJ, MapOf.of("质检结果", whereJson.getString("ivt_status")), Boolean.TRUE, null, packageinfoivt.getContainer_name());
updateWrapper.set("container_name", packageinfoivt.getContainer_name());
updateWrapper.set("ivt_status", whereJson.getString("ivt_status"));
}
//复称
else if (StringUtils.isNotBlank(whereJson.getString("container_name")) && StringUtils.isNotBlank(whereJson.getString("pointCode"))) {
dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_code, whereJson.getString("pointCode")));
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品"))) {
//获取子卷最新信息
jo.put("container_name", whereJson.getString("container_name"));
lmsToMesService.getInspectionResult(jo);
//子卷下料信息MES传递给LMS
iPdmBiContainerinfoService.createSubInfoByContainer(whereJson.getString("container_name"));
updateWrapper.set("container_name", whereJson.getString("container_name"));
updateWrapper.set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品"));
} else {
result.put("status", org.springframework.http.HttpStatus.BAD_REQUEST.value());
result.put("message", "该点位只能放复称的合格品!");
return result;
}
}
//取放空载具
else if (StringUtils.isNotBlank(whereJson.getString("pointCode")) && StringUtils.isBlank(whereJson.getString("container_name"))) {
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))) {
throw new BadRequestException("人工管制点只能设置空载具或空点位");
}
String pointCode = whereJson.getString("pointCode");
if (StringUtils.isEmpty(pointCode)) {
throw new BadRequestException("人工管制点不能为空");
}
JSONObject task = new JSONObject();
task.put("point_code1", pointCode);
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("is_delete", "0")
.eq("point_code1", pointCode)
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (count > 0) {
throw new BadRequestException("当前人工管制点存在任务,稍后操作");
}
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))) {
autoSendVehicleToDjq.getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
}
dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_code, whereJson.getString("pointCode")));
updateWrapper.set("container_name", null);
updateWrapper.set("ivt_status", whereJson.getString("ivt_status"));
} else {
result.put("status", org.springframework.http.HttpStatus.BAD_REQUEST.value());
result.put("message", "该点位只能放复称的合格品");
result.put("message", "请输入子卷号或管制点位信息");
return result;
}
}
//取放空载具
else if (StringUtils.isNotBlank(whereJson.getString("pointCode")) && StringUtils.isBlank(whereJson.getString("container_name"))) {
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("合格品")) || whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))) {
throw new BadRequestException("人工管制点只能设置空载具或空点位");
String pointCode = dtoList.get(0).getPoint_code();
if (dtoList.get(0).getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))) {
throw new BadRequestException("满轴缓存位无法设置子卷状态");
}
String pointCode = whereJson.getString("pointCode");
if (StringUtils.isEmpty(pointCode)){
throw new BadRequestException("人工管制点不能为空");
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
if (!CollectionUtils.isEmpty(schBaseTasks)) {
throw new BadRequestException("当前点位" + dtoList.get(0).getPoint_name() + "正在执行搬运任务" + schBaseTasks.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
JSONObject task = new JSONObject();
task.put("point_code1", pointCode);
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("is_delete", "0")
.eq("point_code1", pointCode)
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (count>0){
throw new BadRequestException("当前人工管制点存在任务,稍后操作");
}
if (whereJson.getString("ivt_status").equals(PackageInfoIvtEnum.IVT_STATUS.code("管制品"))){
autoSendVehicleToDjq.getPointCode(task,PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
}
dtoList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_code, whereJson.getString("pointCode")));
updateWrapper.set("container_name", null);
updateWrapper.set("ivt_status", whereJson.getString("ivt_status"));
} else {
result.put("status", org.springframework.http.HttpStatus.BAD_REQUEST.value());
result.put("message", "请输入子卷号或管制点位信息!");
return result;
updateWrapper.eq("point_code", pointCode);
updateWrapper.set("update_optid", Long.valueOf(SecurityUtils.getCurrentUserId()));
updateWrapper.set("update_optname", SecurityUtils.getCurrentNickName());
updateWrapper.set("update_time", DateUtil.now());
bstIvtPackageinfoivtMapper.update(null, updateWrapper);
}
String pointCode = dtoList.get(0).getPoint_code();
if (dtoList.get(0).getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))){
throw new BadRequestException("满轴缓存位无法设置子卷状态");
}
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
if (!CollectionUtils.isEmpty(schBaseTasks)){
throw new BadRequestException("当前点位"+dtoList.get(0).getPoint_name()+"正在执行搬运任务"+schBaseTasks.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
updateWrapper.eq("point_code", pointCode);
updateWrapper.set("update_optid", Long.valueOf(SecurityUtils.getCurrentUserId()));
updateWrapper.set("update_optname", SecurityUtils.getCurrentNickName());
updateWrapper.set("update_time", DateUtil.now());
bstIvtPackageinfoivtMapper.update(null, updateWrapper);
result.put("status", org.springframework.http.HttpStatus.OK.value());
result.put("message", "检验成功!");
return result;
@@ -1202,15 +1227,16 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
@Override
public List<BstIvtPackageinfoivt> selectEmpPoints(String point_status, String ivt_status) {
if (StringUtils.isEmpty(point_status)||StringUtils.isEmpty(ivt_status)){
if (StringUtils.isEmpty(point_status) || StringUtils.isEmpty(ivt_status)) {
throw new BadRequestException("点位类型或状态不能为空");
}
return this.baseMapper.selectNoTaskPoint(point_status, ivt_status);
}
@Override
public List<BstIvtPackageinfoivt> selectNoTargetTaskPoints(String point_status, String ivt_status) {
if (StringUtils.isEmpty(point_status)||StringUtils.isEmpty(ivt_status)){
if (StringUtils.isEmpty(point_status) || StringUtils.isEmpty(ivt_status)) {
throw new BadRequestException("点位类型或状态不能为空");
}
return this.baseMapper.selectNoTargetTaskPoint(point_status, ivt_status);

View File

@@ -189,7 +189,7 @@ public class TwoOutTask extends AbstractAcsTask {
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
RedissonUtils.lock(c -> {
StIvtIostorinvOutServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvOutServiceImpl.class);
bean.finishTask(jsonTask);
// bean.finishTask(jsonTask);
// 判断是否有异常货位的需要更新
JSONObject jsonExt = attrTab.query("inv_code = '" + jsonTask.getString("vehicle_code") + "' AND lock_type = '"+IOSEnum.LOCK_TYPE.code("出库异常锁")+"'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonExt)) {

View File

@@ -26,6 +26,7 @@ import org.nl.wms.util.TaskUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -48,6 +49,7 @@ public class GzqTask extends AbstractAcsTask {
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private ShiftingTask shiftingTask;
@Override
public List<AcsTaskDto> addTask() {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
@@ -83,7 +85,7 @@ public class GzqTask extends AbstractAcsTask {
public void updateTaskStatus(JSONObject taskObj, String status) {
String now = DateUtil.now();
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;
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, SecurityUtils.getCurrentUserId())
@@ -94,17 +96,23 @@ public class GzqTask extends AbstractAcsTask {
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return;
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode());
}
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.更新库存记录
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.更新库存记录
if (schBaseTask.getTask_type().equals("010999")) {
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
} else if (schBaseTask.getTask_type().equals("010998")) {
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
} else {
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("管制品")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
//3.更改任务状态为完成
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
//4.判断是否存在任务组任务
packageinfoivtService.handleGroupTask(schBaseTask);
}
//3.更改任务状态为完成
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
//4.判断是否存在任务组任务
packageinfoivtService.handleGroupTask(schBaseTask);
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
@@ -113,9 +121,9 @@ public class GzqTask extends AbstractAcsTask {
//任务被标记为取消
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() + "调用接口强制取消。");
updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。");
}
taskService.update(null,updateWrapper);
taskService.update(null, updateWrapper);
}
private void sendTask(SchBaseTask schBaseTask, SchBaseTask groupTask) {
@@ -188,13 +196,11 @@ public class GzqTask extends AbstractAcsTask {
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS,TaskStatusEnum.FINISHED.getCode())) return;
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return;
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -210,12 +216,9 @@ public class GzqTask extends AbstractAcsTask {
//任务被标记为取消
updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""));
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode());
updateWrapper.set(SchBaseTask::getRemark,"任务被用户:" + schBaseTask.getUpdate_optname() + "在:" +DateUtil.now() + "强制取消。");
taskService.update(null,updateWrapper);
updateWrapper.set(SchBaseTask::getRemark, "任务被用户:" + schBaseTask.getUpdate_optname() + "在:" + DateUtil.now() + "强制取消。");
taskService.update(null, updateWrapper);
}
}

View File

@@ -1,5 +1,6 @@
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
@@ -7,17 +8,25 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
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.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask;
import org.nl.b_lms.sch.tasks.first_floor_area.GzqTask;
import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask;
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl;
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.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
@@ -40,6 +49,10 @@ public class AutoSendMzToDjq {
private RedissonClient redissonClient;
@Resource
private DjqTask djqTask;
@Resource
private GzqTask gzqTask;
@Resource
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
@Resource
private ShiftingTask shiftingTask;
@@ -51,17 +64,21 @@ public class AutoSendMzToDjq {
//满轴->待检区agv自动搬运任务
public void run() {
try {
this.sendMzqToDjq();
}catch (Exception ex){
String is_error = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_error").getValue();
if ("1".equals(is_error)) {
this.sendErrorPointCode();
} else {
this.sendMzqToDjq();
}
} catch (Exception ex) {
log.error(ex.getMessage());
}
}
@SneakyThrows
public void sendMzqToDjq() {
log.info(THIS_CLASS+"-满轴->待检区定时任务开始执行扫描。");
log.info(THIS_CLASS + "-满轴->待检区定时任务开始执行扫描。");
RLock lock = redissonClient.getLock("todjq");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
@@ -81,7 +98,7 @@ public class AutoSendMzToDjq {
//待检区有库位为空位且过滤未完成任务
List<BstIvtPackageinfoivt> selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""));
if (ObjectUtils.isEmpty(selectEmpPoints)) {
log.error(THIS_CLASS+"满轴->待检区agv自动搬运任务暂无可用空位,子卷号为:" + mzqPackageinfoivtList.get(0).getContainer_name());
log.error(THIS_CLASS + "满轴->待检区agv自动搬运任务暂无可用空位,子卷号为:" + mzqPackageinfoivtList.get(0).getContainer_name());
return;
}
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配"));
@@ -102,4 +119,59 @@ public class AutoSendMzToDjq {
}
}
@SneakyThrows
public void sendErrorPointCode() {
log.info(THIS_CLASS + "-异常点位定时任务开始执行扫描。");
RLock lock = redissonClient.getLock("todjq");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = bstIvtPackageinfoivtMapper.selectNoTaskPoint2(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))
.stream().filter(row -> row.getPoint_code().equals("ZXQ_138")).collect(Collectors.toList());
List<BstIvtPackageinfoivt> kzjPackageinfoivtList = bstIvtPackageinfoivtMapper.selectNoTaskPoint2(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""))
.stream().filter(row -> row.getPoint_code().equals("ZXQ_137")).collect(Collectors.toList());
//如果异常满轴点有货,创建任务搬运到待检区
if (ObjectUtils.isNotEmpty(mzqPackageinfoivtList)) {
//待检区有库位为空位且过滤未完成任务
List<BstIvtPackageinfoivt> selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""));
if (ObjectUtils.isNotEmpty(selectEmpPoints)) {
//校验重复任务
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getVehicle_code, mzqPackageinfoivtList.get(0).getContainer_name()).eq(SchBaseTask::getTask_type, "010998")
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")).lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()));
if (CollectionUtils.isEmpty(taskList)) {
JSONObject task = new JSONObject();
task.put("point_code1", "ZXQ_138");
task.put("point_code2", selectEmpPoints.get(0).getPoint_code());
task.put("task_type", "010998");
task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name());
task.put("is_send", "1");
gzqTask.createTask(task);
}
}
}
//如果异常空载具点为空,创建任务搬运待检区空载具到异常空载具点
if (ObjectUtils.isNotEmpty(kzjPackageinfoivtList)) {
List<BstIvtPackageinfoivt> vehiclePoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
if (ObjectUtils.isNotEmpty(vehiclePoints)) {
JSONObject task = new JSONObject();
task.put("point_code1", vehiclePoints.get(0).getPoint_code());
task.put("point_code2", "ZXQ_137");
task.put("task_type", "010999");
task.put("vehicle_code", "kzj");
task.put("is_send", "1");
gzqTask.createTask(task);
}
}
} else {
log.info("满轴->待检区agv自动搬运任务正在创建被锁住。");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
}

View File

@@ -121,7 +121,7 @@ public class LashManageServiceImpl implements LashManageService {
.query("package_box_sn = '" + boxDao.getBox_no() + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("子卷包装关系不存在:【"+boxDao.getBox_no()+"");
throw new BadRequestException("子卷包装关系不存在:【" + boxDao.getBox_no() + "");
}
//查询木箱对应的托盘绑定关系,并清除
@@ -270,30 +270,63 @@ public class LashManageServiceImpl implements LashManageService {
Map<String, List<JSONObject>> groupPointMap = executeArr.stream()
.collect(Collectors.groupingBy(row -> row.getString("point_code2")));
// 终点: 如果是异常口则直接生成到异常口的任务
String next_device_code = IOSEnum.OUT_HANGER.code("行架位1");
String TWO_EXCEP = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXCEP").getValue();
if (TWO_EXCEP.equals(IOSEnum.IS_NOTANDYES.code(""))) {
next_device_code = IOSEnum.EXCEP_OUT.code("异常出库口");
} else {
// 判断是否是启用状态
List<JSONObject> jsonList = pointTab.query("region_code = 'BLKCK' AND is_used = '1'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(jsonList)) {
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 (heapOne.size() > heapTwo.size()) {
next_device_code = IOSEnum.OUT_HANGER.code("行架位2");
String TWO_EXC_OUT_TYPE = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXC_OUT_TYPE").getValue();
if (TWO_EXC_OUT_TYPE.equals("1") || TWO_EXC_OUT_TYPE.equals("2")) {
//1-大托盘全部出到异常口2-大托盘负载到异常口和正常出库口
if (whereJson.getString("device_code").equals("CK2038")) {
if (TWO_EXC_OUT_TYPE.equals("1")) {
next_device_code = IOSEnum.EXCEP_OUT.code("异常出库口");
}
if (TWO_EXC_OUT_TYPE.equals("2")) {
// 判断是否是启用状态
List<JSONObject> jsonList = pointTab.query("region_code = 'BLKCK' AND is_used = '1'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
int min_task_num = 999;
next_device_code = IOSEnum.EXCEP_OUT.code("异常出库口");
for (int i = 0; i < jsonList.size(); i++) {
String point_code = jsonList.get(i).getString("point_code");
int task_num = Optional.ofNullable(groupPointMap.get(point_code)).orElse(new ArrayList<>()).size();
if (task_num < min_task_num) {
next_device_code = point_code;
min_task_num = task_num;
}
}
int exc_task_num = Integer.parseInt(SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXC_OUT_TASK_NUM").getValue());
List<JSONObject> heapExc = Optional.ofNullable(groupPointMap.get(IOSEnum.EXCEP_OUT.code("异常出库口"))).orElse(new ArrayList<>());
if (heapExc.size() < min_task_num && exc_task_num > heapExc.size()) {
next_device_code = IOSEnum.EXCEP_OUT.code("异常出库口");
}
}
}
} else {
String TWO_EXCEP = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXCEP").getValue();
if (TWO_EXCEP.equals(IOSEnum.IS_NOTANDYES.code(""))) {
next_device_code = IOSEnum.EXCEP_OUT.code("异常出库口");
} else {
next_device_code = jsonList.get(0).getString("point_code");
// 判断是否是启用状态
List<JSONObject> jsonList = pointTab.query("region_code = 'BLKCK' AND is_used = '1'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(jsonList)) {
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 (heapOne.size() > heapTwo.size()) {
next_device_code = IOSEnum.OUT_HANGER.code("行架位2");
}
} else {
next_device_code = jsonList.get(0).getString("point_code");
}
}
}
@@ -338,7 +371,7 @@ public class LashManageServiceImpl implements LashManageService {
//判断木箱信息是否为空
String box_no = vehicle_ext.getString("pcsn");
if (StrUtil.isEmpty(box_no)) {
throw new BadRequestException("未查询到托盘:"+vehicle_code+"绑定了相关木箱!");
throw new BadRequestException("未查询到托盘:" + vehicle_code + "绑定了相关木箱!");
}
// 查询木箱信息
BstIvtBoxinfo boxinfo = iBstIvtBoxinfoService.getOne(
@@ -391,7 +424,6 @@ public class LashManageServiceImpl implements LashManageService {
result.put("isBinding", isBinding);
// TODO 是否贴标
result.put("isLabeling", IOSEnum.IS_SEND.code(""));
// TODO 贴标数量
@@ -415,7 +447,7 @@ public class LashManageServiceImpl implements LashManageService {
result.put("labelingTemplate", labelingTemplate);
Param label_num = null;
//CK2019,CK2015
if(device_code.equals("CK2019") || device_code.equals("CK2015")){
if (device_code.equals("CK2019") || device_code.equals("CK2015")) {
label_num = iSysParamService.findMinByCode(device_code);
String print_code = label_num.getCode();
JSONObject print_info = WQLObject.getWQLObject("pdm_bi_printinfo").query("print_name = '" + print_code + "'").uniqueResult(0);
@@ -423,7 +455,7 @@ public class LashManageServiceImpl implements LashManageService {
print_jo.put("box_no", box_no);
print_jo.put("print_type", print_info.getString("print_id"));
int times = Integer.parseInt(labelingTemplateNum);
for(int i=0;i<times;i++){
for (int i = 0; i < times; i++) {
new PrintServiceImpl().customerPrintBY2(print_jo);
try {
Thread.sleep(1000);
@@ -446,8 +478,8 @@ public class LashManageServiceImpl implements LashManageService {
if (Integer.valueOf(label_num_down) >= Integer.valueOf(now_num)) {
result.put("message", "标签纸数量过低,请更换!");
}
}else{
throw new BadRequestException("贴标请求设备点位异常:"+device_code);
} else {
throw new BadRequestException("贴标请求设备点位异常:" + device_code);
}
}
return result;

View File

@@ -97,7 +97,7 @@ import java.util.stream.Collectors;
@Slf4j
public class AcsToWmsServiceImpl implements AcsToWmsService {
private static Map<String,String> Task_Status_Convers = MapOf.of("1",TaskStatusEnum.EXECUTING.getCode(),"2",TaskStatusEnum.FINISHED.getCode(),"3","0");
private static Map<String, String> Task_Status_Convers = MapOf.of("1", TaskStatusEnum.EXECUTING.getCode(), "2", TaskStatusEnum.FINISHED.getCode(), "3", "0");
private final RawAssistIStorService rawAssistIStorService;
@@ -115,7 +115,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private final ISysNoticeService noticeService;
@Autowired
private IPdmBiContainerinboundService iPdmBiContainerinboundService;
private IPdmBiContainerinboundService iPdmBiContainerinboundService;
/**
* 入库处理类服务
@@ -176,7 +176,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private final IPdmBiSlittingproductionplanService slittingproductionplanService;
private final OutBussManageService outBussManageService;
private final OutBussManageService outBussManageService;
@Autowired
private ProductOutTwoService productOutTwoService;
@@ -214,39 +214,39 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject task = WQLObject.getWQLObject("SCH_BASE_Task")
.query("task_id = '" + task_id + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(task)){
throw new BadRequestException("未找到任务标识为:" + task_id + "的任务!");
if (ObjectUtil.isEmpty(task)) {
throw new BadRequestException("未找到任务标识为:" + task_id + "的任务!");
}
if ("1".equals(task.getString("is_delete"))){
log.debug(task_id+"当前LMS任务已删除不需要再次反馈更新");
if ("1".equals(task.getString("is_delete"))) {
log.debug(task_id + "当前LMS任务已删除不需要再次反馈更新");
continue;
}
if ("08,07".contains(task.getString("task_status"))){
log.debug(task_id+"当前LMS任务完成或取消不需要再次反馈更新");
if ("08,07".contains(task.getString("task_status"))) {
log.debug(task_id + "当前LMS任务完成或取消不需要再次反馈更新");
continue;
}
if (StrUtil.isNotEmpty(row.getString("car_no"))) {
WQLObject.getWQLObject("SCH_BASE_Task")
.update(MapOf.of("car_no",row.getString("car_no")),"task_id = '" + task_id + "'");
.update(MapOf.of("car_no", row.getString("car_no")), "task_id = '" + task_id + "'");
}
String handleClassName = task.getString("handle_class");
if (StrUtil.isEmpty(handleClassName)) {
throw new BadRequestException("当前任务的处理类未找到!");
}
AbstractAcsTask abstractTask = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getString("handle_class")));
abstractTask.updateTaskStatus(row,Task_Status_Convers.get(row.getString("task_status")));
AbstractAcsTask abstractTask = (AbstractAcsTask) SpringContextHolder.getBean(Class.forName(task.getString("handle_class")));
abstractTask.updateTaskStatus(row, Task_Status_Convers.get(row.getString("task_status")));
} else {
throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!");
}
}catch (BadRequestException ex){
log.error(task_id+"acs更新任务失败:{}", ex);
WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark",DateUtil.now()+"更新"+row.getString("task_status")+"失败:"+ex.getMessage()),"task_id = '" + task_id + "'");
} catch (BadRequestException ex) {
log.error(task_id + "acs更新任务失败:{}", ex);
WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark", DateUtil.now() + "更新" + row.getString("task_status") + "失败:" + ex.getMessage()), "task_id = '" + task_id + "'");
throw ex;
}catch (Exception ex){
log.error(task_id+"acs更新任务失败:{}", ex);
WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark",DateUtil.now()+"更新"+row.getString("task_status")+"失败,系统异常"),"task_id = '" + task_id + "'");
} catch (Exception ex) {
log.error(task_id + "acs更新任务失败:{}", ex);
WQLObject.getWQLObject("SCH_BASE_Task").update(MapOf.of("remark", DateUtil.now() + "更新" + row.getString("task_status") + "失败,系统异常"), "task_id = '" + task_id + "'");
throw ex;
}finally {
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
@@ -543,7 +543,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
} else {
struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq desc").uniqueResult(0);
}
if (!ObjectUtil.isEmpty(struct_jo)){
if (!ObjectUtil.isEmpty(struct_jo)) {
break;
}
} else {
@@ -1629,7 +1629,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功,ACS上报无货且此时LMS该点位没有任何任务");
return result;
}else {
} else {
boolean need_clean = false;
for (int i = 0; i < left_arr.size(); i++) {
JSONObject left_jo = left_arr.getJSONObject(i);
@@ -1654,7 +1654,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功,ACS上报无货且此时LMS该点位没有任何任务");
return result;
}else {
} else {
boolean need_clean = false;
for (int i = 0; i < right_arr.size(); i++) {
JSONObject right_jo = right_arr.getJSONObject(i);
@@ -1853,62 +1853,69 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
public JSONObject sendProductToFirstFloor(JSONObject whereJson) {
log.info("sendProductToFirstFloor被调用--------------------------" + whereJson.toString());
if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为空");
}
if (whereJson.getString("device_code").equals("null") || whereJson.getString("material_barcode").equals("null")) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为null");
}
String is_error = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_error").getValue();
JSONObject result = new JSONObject();
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("data", whereJson.getString("material_barcode"));
RedissonUtils.lock(c->{
//1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> MzPoints = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code(""))
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
if (CollectionUtils.isEmpty(MzPoints)){
result.put("message", "满轴位无可用位置");
return result;
}
List<BstIvtPackageinfoivt> empPoints = packageinfoivtService
.selectNoTargetTaskPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
if (CollectionUtils.isEmpty(empPoints)){
result.put("message", "空轴位无可用位置");
return result;
}
// 创建前先判断是否有已创建相同任务
List<String> taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")));
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(taskTypes);
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(existTaskList2) ||!CollectionUtils.isEmpty(existTaskList3) ){
result.put("message", "存在正在执行的输送线行架任务");
return result;
}
List<BstIvtPackageinfoivt> sortEmpPoint = empPoints.stream().sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList());
JSONObject taskParam = new JSONObject();
taskParam.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
taskParam.put("vehicle_code", whereJson.getString("material_barcode"));
taskParam.put("point_code1", whereJson.getString("device_code"));
taskParam.put("point_code2", MzPoints.get(0).getPoint_code());
taskParam.put("point_code3", sortEmpPoint.get(0).getPoint_code());
taskParam.put("point_code4", whereJson.getString("device_code"));
taskParam.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
taskParam.put("is_send", true);
mzhcwTask.createTask(taskParam);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,null,Boolean.TRUE,null,whereJson.getString("material_barcode"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
if ("1".equals(is_error)) {
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
return result;
},"sendProductToFirstFloor",null);
} else {
if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为空");
}
if (whereJson.getString("device_code").equals("null") || whereJson.getString("material_barcode").equals("null")) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为null");
}
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("data", whereJson.getString("material_barcode"));
RedissonUtils.lock(c -> {
//1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> MzPoints = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code(""))
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
if (CollectionUtils.isEmpty(MzPoints)) {
result.put("message", "满轴位无可用位置");
return result;
}
List<BstIvtPackageinfoivt> empPoints = packageinfoivtService
.selectNoTargetTaskPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
if (CollectionUtils.isEmpty(empPoints)) {
result.put("message", "空轴位无可用位置");
return result;
}
// 创建前先判断是否有已创建相同任务
List<String> taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")));
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(taskTypes);
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(existTaskList2) || !CollectionUtils.isEmpty(existTaskList3)) {
result.put("message", "存在正在执行的输送线行架任务");
return result;
}
List<BstIvtPackageinfoivt> sortEmpPoint = empPoints.stream().sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList());
JSONObject taskParam = new JSONObject();
taskParam.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
taskParam.put("vehicle_code", whereJson.getString("material_barcode"));
taskParam.put("point_code1", whereJson.getString("device_code"));
taskParam.put("point_code2", MzPoints.get(0).getPoint_code());
taskParam.put("point_code3", sortEmpPoint.get(0).getPoint_code());
taskParam.put("point_code4", whereJson.getString("device_code"));
taskParam.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
taskParam.put("is_send", true);
mzhcwTask.createTask(taskParam);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX, null, Boolean.TRUE, null, whereJson.getString("material_barcode"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
return result;
}, "sendProductToFirstFloor", null);
}
log.info("sendProductToFirstFloor调用成功--------------------------" + result);
return result;
}
@@ -1923,13 +1930,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 创建前先判断是否有已创建相同任务
List<String> taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")));
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(taskTypes);
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (ObjectUtils.isEmpty(existTaskList2)&&ObjectUtils.isEmpty(existTaskList3)) {
if (ObjectUtils.isEmpty(existTaskList2) && ObjectUtils.isEmpty(existTaskList3)) {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,null,Boolean.TRUE,null,containerName);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX, null, Boolean.TRUE, null, containerName);
//不确定起点的空载具缓存位->输送线任务
createTask3(containerName);
@@ -1965,16 +1972,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 创建前先判断是否有已创建相同任务
List<String> taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"), PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")));
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(taskTypes);
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))||r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (ObjectUtils.isEmpty(existTaskList2)&&ObjectUtils.isEmpty(existTaskList3)) {
if (ObjectUtils.isEmpty(existTaskList2) && ObjectUtils.isEmpty(existTaskList3)) {
jo.put("point_code3", pointCode3);
//终点为输送线点位
jo.put("point_code4", pointCode4);
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX,null,Boolean.TRUE,null,containerName);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX, null, Boolean.TRUE, null, containerName);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
@@ -2023,11 +2030,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
// 5-木箱入库.木箱回库
String materialBarcode = whereJson.getString("material_barcode");
if (materialBarcode.contains("BRMX")){
if (materialBarcode.contains("BRMX")) {
String brBox = Arrays.asList(materialBarcode.split(",")).get(0);
whereJson.put("box_no", brBox.replace("BR", ""));
inBoxManageService.inBox(whereJson);
}else {
} else {
if (whereJson.getIntValue("weight") <= 0) {
throw new BadRequestException("上报的重量不能为0!");
}
@@ -2046,39 +2053,39 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.lt("task_status", TaskStatusEnum.EXECUTING.getCode()));
JSONObject jsonExt = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonExt)) {
errorMsg.add("载具无数据"+whereJson.getString("vehicle_code"));
}else {
errorMsg.add("载具无数据" + whereJson.getString("vehicle_code"));
} else {
String pcsn = jsonExt.getString("pcsn");
if (StringUtils.isNotEmpty(pcsn)){
if (StringUtils.isNotEmpty(pcsn)) {
JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0);
if (stIvtStructattr != null && stIvtStructattr.size() > 0) {
errorMsg.add("载具"+whereJson.getString("vehicle_code")+"已绑定"+pcsn);
errorMsg.add("载具" + whereJson.getString("vehicle_code") + "已绑定" + pcsn);
}
}
}
if (!compaerResult){
errorMsg.add("称重"+current_weight+"不匹配"+box_weight);
if (!compaerResult) {
errorMsg.add("称重" + current_weight + "不匹配" + box_weight);
Param notify = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("weight_notify");
if (notify!=null && StringUtils.isNotEmpty(notify.getValue())){
AutoSendFeiShu.sendFeiShuMsg(notify.getValue(),box_no+"称重"+current_weight+",理论"+box_weight,"二期称重异常提醒");
if (notify != null && StringUtils.isNotEmpty(notify.getValue())) {
AutoSendFeiShu.sendFeiShuMsg(notify.getValue(), box_no + "称重" + current_weight + ",理论" + box_weight, "二期称重异常提醒");
}
}
if (!inbound){
if (!inbound) {
errorMsg.add("手动至异常口");
}
if (count>0){
errorMsg.add(whereJson.getString("vehicle_code")+"存在任务");
if (count > 0) {
errorMsg.add(whereJson.getString("vehicle_code") + "存在任务");
}
//"material_barcode":"C1101,","device_code":"RK1018","weight":500.95,"vehicle_code":"B01401","type":"1"
if (CollectionUtils.isEmpty(errorMsg)) {
whereJson.put("bill_type", IOSEnum.IN_TYPE.code("生产入库"));
inBussManageService.inTask(whereJson);
PdmProductSpecServiceImpl.doRecord(SpecEnum.RK,null,Boolean.TRUE,null,containers);
PdmProductSpecServiceImpl.doRecord(SpecEnum.RK, null, Boolean.TRUE, null, containers);
} else {
iPdmBiContainerinboundService
.update(new UpdateWrapper<PdmBiContainerinbound>()
.set("remark",JSONObject.toJSONString(errorMsg))
.eq("box",box_no));
.set("remark", JSONObject.toJSONString(errorMsg))
.eq("box", box_no));
//更新子卷入库备注信息
JSONObject jsonTaskParam = new JSONObject();
//创建异常任务去异常入库口
@@ -2100,14 +2107,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
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")+"'");
.update(param, "package_box_sn = '" + jsonObject.getString("box_no") + "'");
jsonTaskParam.put("request_param", request_param);
TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class);
bean.createTask(jsonTaskParam);
bean.immediateNotifyAcs(null);
PdmProductSpecServiceImpl.doRecord(SpecEnum.TYCK,null,Boolean.FALSE,errorMsg.toString(),containers);
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.TYCK, null, Boolean.FALSE, errorMsg.toString(), containers);
}
}
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库"))) {
@@ -2139,20 +2146,20 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
inBoxManageService.inBox(whereJson);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("退货入库"))) {
String materialBarcode = whereJson.getString("material_barcode");
if(StrUtil.isEmpty(materialBarcode)){
if (StrUtil.isEmpty(materialBarcode)) {
throw new BadRequestException("当前木箱号不能为空!");
}
String[] box_arr = materialBarcode.split("-");
if (box_arr.length < 2) {
// 处理分割结果不足的情况
throw new BadRequestException("当前木箱号数据异常!"+box_arr.toString());
throw new BadRequestException("当前木箱号数据异常!" + box_arr.toString());
}
if (box_arr[1].equals("9")){
if (box_arr[1].equals("9")) {
//空木箱入库
// -{"material_barcode":"MX250324000091-1","device_code":"CK2005","vehicle_code":"B00165","type":"6"}
whereJson.put("box_no", box_arr[0]);
inBoxManageService.inBox(whereJson);
}else {
} else {
//退货入库
WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo");
// 载具扩展属性表
@@ -2183,8 +2190,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.eq("is_delete", "0")
.eq("vehicle_code2", whereJson.getString("vehicle_code"))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (hasTask>0){
throw new BadRequestException("托盘"+whereJson.getString("vehicle_code")+"存在执行的任务");
if (hasTask > 0) {
throw new BadRequestException("托盘" + whereJson.getString("vehicle_code") + "存在执行的任务");
}
JSONObject ext_jo = veExtTab.query("storagevehicle_code = '" + jsonVehicle.getString("storagevehicle_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(ext_jo)) {
@@ -2199,10 +2206,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
veExtTab.insert(jsonVeExt);
} else {
String pcsn = ext_jo.getString("pcsn");
if (StringUtils.isNotEmpty(pcsn)){
if (StringUtils.isNotEmpty(pcsn)) {
JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + pcsn + "'").getResultJSONArray(0);
if (stIvtStructattr != null && stIvtStructattr.size() > 0) {
throw new BadRequestException("当前托盘"+whereJson.getString("vehicle_code")+"已经绑定木箱"+pcsn);
throw new BadRequestException("当前托盘" + whereJson.getString("vehicle_code") + "已经绑定木箱" + pcsn);
}
}
ext_jo.put("pcsn", whereJson.getString("box_no"));
@@ -2515,7 +2522,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
updateWrapper.set(PdmBiSlittingproductionplan::getWeight, NumberUtil.round(weight, 2).toString())
.eq(PdmBiSlittingproductionplan::getContainer_name, subVolume);
boolean update = slittingproductionplanService.update(updateWrapper);
PdmProductSpecServiceImpl.doRecord(SpecEnum.FQ_WG,param,Boolean.TRUE,null,subVolume);
PdmProductSpecServiceImpl.doRecord(SpecEnum.FQ_WG, param, Boolean.TRUE, null, subVolume);
if (update) {
res.put("code", cn.hutool.http.HttpStatus.HTTP_OK);
res.put("message", "更新成功!");
@@ -2534,33 +2541,33 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
public JSONObject getBoxInfo(JSONObject param) {
String material_barcode = param.getString("material_barcode");
if (StringUtils.isEmpty(material_barcode)){
if (StringUtils.isEmpty(material_barcode)) {
throw new BadRequestException("material_barcode参数不能为空");
}
String isUncap = "1";
String boxOr子卷 = material_barcode.split("-")[0];
BstIvtBoxinfo boxNo;
String desiccantTemplate = null;
if (boxOr子卷.contains("MX")){
if (boxOr子卷.contains("MX")) {
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxOr子卷)
);
if (boxDao==null){
throw new BadRequestException("当前木箱码在木箱表不存在"+boxOr子卷);
if (boxDao == null) {
throw new BadRequestException("当前木箱码在木箱表不存在" + boxOr子卷);
}
boxNo=boxDao;
}else {
boxNo = boxDao;
} else {
JSONObject sub_jo = WQLObject.getWQLObject("pdm_bi_subpackagerelation")
.query("container_name = '" + boxOr子卷 + "' order by create_time desc").uniqueResult(0);
if (sub_jo==null || StringUtils.isEmpty(sub_jo.getString("package_box_sn"))){
throw new BadRequestException("当前子卷不存在子卷包装关系"+boxOr子卷);
if (sub_jo == null || StringUtils.isEmpty(sub_jo.getString("package_box_sn"))) {
throw new BadRequestException("当前子卷不存在子卷包装关系" + boxOr子卷);
}
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, sub_jo.getString("package_box_sn"))
);
boxNo=boxDao;
boxNo = boxDao;
String material_type = sub_jo.getString("material_type");
if (material_type.equals("FG1")) {
desiccantTemplate = "6";
@@ -2732,7 +2739,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject vehicle_info = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + material_barcode + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_info)) {
vehicle_info = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_info)){
if (ObjectUtil.isEmpty(vehicle_info)) {
throw new BadRequestException("未查询到载具号【" + vehicle_code + "】对应的载具信息!");
}
}
@@ -2748,18 +2755,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isNotEmpty(sub_jo)) {
//木箱类型
String box_type = sub_jo.getString("box_type");
if(ObjectUtil.isEmpty(box_type)){
if (ObjectUtil.isEmpty(box_type)) {
throw new BadRequestException("未查询到木箱号【" + material_barcode + "】对应的包装关系缺少木箱类型信息!");
}
//查询木箱类型数据
LambdaQueryWrapper<MdpbBoxtype> queryWrapper = new QueryWrapper<MdpbBoxtype>().lambda();
queryWrapper.eq(MdpbBoxtype::getBox_type,box_type);
queryWrapper.eq(MdpbBoxtype::getBox_type, box_type);
MdpbBoxtype boxType = iMdpbBoxtypeService.getOne(queryWrapper);
if(ObjectUtil.isEmpty(boxType)){
if (ObjectUtil.isEmpty(boxType)) {
throw new BadRequestException("未查询到木箱类型【" + box_type + "】信息!");
}
desiccantTemplate = String.valueOf(boxType.getDesiccant_num());
}else{
} else {
throw new BadRequestException("未查询到木箱号【" + material_barcode + "】对应的包装关系!");
}
//根据木箱高度,判断入库仓位的高度
@@ -2888,13 +2895,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isEmpty(qzzSize)) {
throw new BadRequestException("气涨轴规格不能为空!");
}
String qzz= qzzSize.substring(qzzSize.length() - 3);
String qzz = qzzSize.substring(qzzSize.length() - 3);
String[] split = qzz.split("-");
String size = split[0];
String qzz_generation = split[1];
// 获取空位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation,"0");
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation, "0");
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
}

View File

@@ -153,4 +153,11 @@ public class LmsToMesController {
public ResponseEntity<Object> GetInspectionResult(@RequestBody JSONObject jo) {
return new ResponseEntity<>(lmsToMesService.getInspectionResult(jo), HttpStatus.OK);
}
@PostMapping("/GetChildWeightIsSamplePDA")
@Log("判断子卷是否是NG卷")
@SaIgnore
public ResponseEntity<Object> GetChildWeightIsSamplePDA(@RequestBody JSONObject jo) {
return new ResponseEntity<>(lmsToMesService.getInspectionResult(jo), HttpStatus.OK);
}
}

View File

@@ -186,4 +186,6 @@ public interface LmsToMesService {
JSONObject BoxDataCollectionSubmit2(JSONObject jo);
JSONObject getInspectionResult(JSONObject jo);
JSONObject GetChildWeightIsSamplePDA(JSONObject jo);
}

View File

@@ -981,9 +981,9 @@ public class LmsToMesServiceImpl implements LmsToMesService {
if ("E".equals(RTYPE)) {
throw new BadRequestException(result.getString("RTMSG"));
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.TRUE,null,list);
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES, param, Boolean.TRUE, null, list);
} catch (Exception e) {
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES,param,Boolean.FALSE,e.getMessage(),list);
PdmProductSpecServiceImpl.doRecord(SpecEnum.BZ_MES, param, Boolean.FALSE, e.getMessage(), list);
throw new BadRequestException("MES提示错误" + e.getMessage());
}
return result;
@@ -1022,25 +1022,25 @@ public class LmsToMesServiceImpl implements LmsToMesService {
JSONArray rows = new JSONArray();
JSONObject row1 = new JSONObject();
row1.put("DataPointName","保护棉是否填充");
row1.put("DataType","7");
row1.put("DataValue","true");
row1.put("DataCollectionDefId","001c61800000004f");
row1.put("DataCollectionDefName","PACKAGE");
row1.put("DataPointName", "保护棉是否填充");
row1.put("DataType", "7");
row1.put("DataValue", "true");
row1.put("DataCollectionDefId", "001c61800000004f");
row1.put("DataCollectionDefName", "PACKAGE");
rows.add(row1);
JSONObject row2 = new JSONObject();
row2.put("DataPointName","信息核对准确");
row2.put("DataType","7");
row2.put("DataValue","true");
row2.put("DataCollectionDefId","001c61800000004f");
row2.put("DataCollectionDefName","PACKAGE");
row2.put("DataPointName", "信息核对准确");
row2.put("DataType", "7");
row2.put("DataValue", "true");
row2.put("DataCollectionDefId", "001c61800000004f");
row2.put("DataCollectionDefName", "PACKAGE");
rows.add(row2);
JSONObject row3 = new JSONObject();
row3.put("DataPointName","木箱是否防护");
row3.put("DataType","7");
row3.put("DataValue","true");
row3.put("DataCollectionDefId","001c61800000004f");
row3.put("DataCollectionDefName","PACKAGE");
row3.put("DataPointName", "木箱是否防护");
row3.put("DataType", "7");
row3.put("DataValue", "true");
row3.put("DataCollectionDefId", "001c61800000004f");
row3.put("DataCollectionDefName", "PACKAGE");
rows.add(row3);
param.put("DataPoints", rows);
log.info("BoxDataCollectionSubmit2接口请求参数为-------------------" + param.toString());
@@ -1054,13 +1054,13 @@ public class LmsToMesServiceImpl implements LmsToMesService {
String RTYPE = result.getString("RTYPE");
if ("E".equals(RTYPE)) {
throw new BadRequestException("MES提示错误" +result.getString("RTMSG"));
throw new BadRequestException("MES提示错误" + result.getString("RTMSG"));
}
} catch (Exception e) {
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.FALSE,e.getMessage(),containerName);
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES, param, Boolean.FALSE, e.getMessage(), containerName);
throw new BadRequestException("MES错误" + e.getMessage());
}
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES,param,Boolean.TRUE,null,containerName);
PdmProductSpecServiceImpl.doRecord(SpecEnum.YX_MES, param, Boolean.TRUE, null, containerName);
return result;
}
@@ -1100,7 +1100,7 @@ public class LmsToMesServiceImpl implements LmsToMesService {
String RTYPE = result.getString("RTYPE");
if ("E".equals(RTYPE)) {
throw new BadRequestException("MES提示错误" +result.getString("RTMSG"));
throw new BadRequestException("MES提示错误" + result.getString("RTMSG"));
}
IpdmBiSubpackagerelationService subpackagerelationService = SpringContextHolder.getBean(IpdmBiSubpackagerelationService.class);
@@ -1224,4 +1224,54 @@ public class LmsToMesServiceImpl implements LmsToMesService {
return result;
}
@Override
public JSONObject GetChildWeightIsSamplePDA(JSONObject param) {
String container_name = param.getString("container_name");
if (StrUtil.isEmpty(container_name)) {
throw new BadRequestException("子卷号不能为空!");
}
JSONObject result = new JSONObject();
log.info("GetChildWeightIsSamplePDA接口输入参数为-------------------" + param.toString());
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue();
String api = "CamstarApi/GetChildWeightIsSamplePDA";
url = url + api;
String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue();
String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue();
param.put("UserName", UserName);
param.put("Password", Password);
param.put("ContainerName", container_name);
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(param))
.timeout(time_out)//超时时间,毫秒
.execute().body();
result = JSONObject.parseObject(resultMsg);
log.info("GetChildWeightIsSamplePDA接口输出参数为-------------------" + result.toString());
String RTYPE = result.getString("RTYPE");
if ("E".equals(RTYPE)) {
throw new BadRequestException(result.getString("RTMSG"));
}
JSONObject rtdat = result.getJSONObject("RTDAT");
result.put("result", false);
result.put("rtdat", rtdat);
if (ObjectUtil.isNotEmpty(rtdat.getString("IsSampleTest")) && ObjectUtil.isNotEmpty(rtdat.getString("SampleCount")) && ObjectUtil.isNotEmpty(rtdat.getString("SampleTestResult"))) {
if (rtdat.getString("IsSampleTest").equals(rtdat.getString("SampleCount")) && "PASS".equals(rtdat.getString("SampleTestResult"))) {
result.put("result", true);
}
}
} catch (Exception e) {
throw new BadRequestException("MES提示错误" + e.getMessage());
}
return result;
}
}