opt: 内包间改造

This commit is contained in:
2025-04-18 10:12:29 +08:00
parent 8b5bfab361
commit 7256afda39
31 changed files with 860 additions and 153 deletions

View File

@@ -159,7 +159,8 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
@Override
public List<PdmBiSlittingproductionplan> getByContainerNames(List<String> collect) {
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
lam.in(PdmBiSlittingproductionplan::getContainer_name, collect);
lam.in(PdmBiSlittingproductionplan::getContainer_name, collect)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0");
return pdmBiSlittingproductionplanMapper.selectList(lam);
}

View File

@@ -17,4 +17,6 @@ public interface StIvtShaftivtMapper extends BaseMapper<StIvtShaftivt> {
List<StIvtShaftivt> getCachePointNoTask(String productArea);
List<StIvtShaftivt> getCanUsePoint(String qzzSize, String qzzGeneration, String productArea);
List<StIvtShaftivt> getSubRollCacheNoTaskPoints();
}

View File

@@ -18,4 +18,14 @@
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[ < ]]> '07'
AND t.point_code1 = ss.point_code AND t.is_delete = '0')
</select>
<select id="getSubRollCacheNoTaskPoints" resultType="org.nl.b_lms.sch.point.dao.StIvtShaftivt">
SELECT *
FROM st_ivt_shaftivt ss
WHERE ss.point_type = '11'
AND ss.have_qzz = '2'
AND ss.is_used = '1'
AND 0 = (SELECT COUNT(*)
FROM sch_base_task t
WHERE t.point_code1 = ss.point_code AND t.is_delete = '0' AND t.task_status <![CDATA[ < ]]> '07')
</select>
</mapper>

View File

@@ -61,6 +61,8 @@ public interface IstIvtShaftivtService extends IService<StIvtShaftivt> {
List<StIvtShaftivt> getCachePointNoTask(String productArea);
List<StIvtShaftivt> getCanUsePoint(String qzzSize, String qzzGeneration, String productArea);
List<StIvtShaftivt> getSubRollCacheNoTaskPoints();
}

View File

@@ -92,6 +92,11 @@ public class StIvtShaftivtServiceImpl extends ServiceImpl<StIvtShaftivtMapper, S
return stIvtShaftivtMapper.getCanUsePoint(qzzSize, qzzGeneration, productArea);
}
@Override
public List<StIvtShaftivt> getSubRollCacheNoTaskPoints() {
return stIvtShaftivtMapper.getSubRollCacheNoTaskPoints();
}
/**
* 获取实体基础信息

View File

@@ -160,4 +160,11 @@ public interface WmsToAcsService {
* @return
*/
JSONObject queryRGVStatus(JSONObject jo);
/**
* 通知ACS取消任务
* @param jo
* @return
*/
JSONObject toNoticeACSCancelTask(JSONObject jo);
}

View File

@@ -121,7 +121,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* 空载具出库处理服务
*/
private final OutVehicleManageService outVehicleManageService;
@Autowired
private IMdpbBoxtypeService iMdpbBoxtypeService;
@@ -1142,11 +1142,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String cbz_generation = cbz_jo.getString("qzz_generation");
// 套轴申请
if ("6".equals(type)) {
log.info("ACS套轴申请>>>>>>");
//判断当前穿拔轴位置的气涨轴和纸管位的纸管是否匹配
JSONObject zg_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '4'").uniqueResult(0);
String zg_size = zg_jo.getString("qzz_size");
String zg_generation = zg_jo.getString("qzz_generation");
log.info("套管工位对应的尺寸:{},代数:{}", zg_size, zg_generation);
log.info("穿拔轴点对应的尺寸:{},代数:{}", cbz_size, cbz_generation);
if (StrUtil.isEmpty(zg_generation) || StrUtil.isEmpty(zg_size)) {
/*如果纸管工位的代数和尺寸为空,判断是否存在正在纸管出库且符合条件的任务
1、存在则反馈ACS等待
@@ -1194,32 +1196,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject jo = new JSONObject();
jo.put("task_type", "010604");
jo.put("point_code1", cbz_jo.getString("point_code"));
JSONObject fhd_jo;
// 判断是不是3寸的
if (openTzArea && "3".equals(cbz_size) && openTempArea) {
//查询可用的空点位
fhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001")
.addParam("need_size", cbz_size)
.addParam("need_generation", cbz_generation)
.addParam("product_area", product_area)
.process().uniqueResult(0);
} else {
// A1_FHD_01
fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0);
}
// remove: 判断是不是3寸的
// A1_FHD_01
JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0);
jo.put("point_code2", fhd_jo.getString("point_code"));
JSONObject qhd_jo;
if ("3".equals(zg_size) && openTempArea && openTzArea) {
// 判断是不是3寸的
//查询可用的空点位
qhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002")
.addParam("need_size", zg_size)
.addParam("need_generation", zg_generation)
.addParam("product_area", product_area)
.process().uniqueResult(0);
} else {
qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0);
}
JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0);
jo.put("point_code3", qhd_jo.getString("point_code"));
jo.put("point_code4", cbz_jo.getString("point_code"));
jo.put("product_area", product_area);
@@ -1243,6 +1224,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 套轴完成
if ("7".equals(type)) {
log.info("ACS套轴完成>>>>>>");
String container_name1;
String container_name2;
// 如果给不到任务,就从套管共为获取
@@ -1390,6 +1372,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject struct_jo = new JSONObject();
// 申请取货
if ("4".equals(type)) {
log.info("ACS申请取货>>>>>>");
//查询可用的空气涨轴点位
struct_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002")
.addParam("need_size", need_size)
@@ -1406,9 +1389,21 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
//更新任务
if ("010602".equals(task_jo.getString("task_type")) || "010606".equals(task_jo.getString("task_type"))) {
if(!task_jo.getString("point_code1").contains("QHD")) {
result.put("status", HttpStatus.OK.value());
result.put("device_code", task_jo.getString("point_code1"));
result.put("message", "多次反馈成功!");
return result;
}
task_jo.put("point_code1", struct_jo.getString("point_code"));
}
if ("010604".equals(task_jo.getString("task_type"))) {
if(!task_jo.getString("point_code3").contains("QHD")) {
result.put("status", HttpStatus.OK.value());
result.put("device_code", task_jo.getString("point_code3"));
result.put("message", "多次反馈成功!");
return result;
}
task_jo.put("point_code3", struct_jo.getString("point_code"));
}
result.put("version", need_generation);
@@ -1416,6 +1411,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
// 申请放货
if ("3".equals(type)) {
log.info("ACS申请放货>>>>>>");
//查询可用的空点位
struct_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001")
.addParam("need_size", have_size)
@@ -1460,12 +1456,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
//更新任务
if ("010603".equals(task_jo.getString("task_type")) || "010604".equals(task_jo.getString("task_type"))) {
if(!task_jo.getString("point_code2").contains("FHD")) {
result.put("status", HttpStatus.OK.value());
result.put("device_code", task_jo.getString("point_code2"));
result.put("message", "多次反馈成功!");
return result;
}
task_jo.put("point_code2", new_point);
}
if ("010606".equals(task_jo.getString("task_type"))) {
if(!task_jo.getString("point_code1").contains("FHD")) {
result.put("status", HttpStatus.OK.value());
result.put("device_code", task_jo.getString("point_code1"));
result.put("message", "多次反馈成功!");
return result;
}
task_jo.put("point_code1", new_point);
@@ -1476,8 +1478,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
// 反馈尺寸
if ("2".equals(type)) {
log.info("ACS反馈尺寸>>>>>>");
String size = whereJson.getString("size");
if ("0".equals(size)) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "反馈失败, 尺寸为0!");
return result;
}
JSONObject request_jo = task_jo.getJSONObject("request_param");
@@ -1488,6 +1493,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 拔轴完成
//拔轴任务完成更新穿拔轴机上的库存
if ("8".equals(type)) {
log.info("ACS拔轴完成>>>>>>");
JSONObject cbz_device = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '0'").uniqueResult(0);
JSONObject request_jo = task_jo.getJSONObject("request_param");
cbz_device.put("have_qzz", "1");
@@ -1502,6 +1508,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
// 反馈重量
if ("9".equals(type)) {
log.info("ACS反馈重量>>>>>>");
String is_hand = whereJson.getString("is_hand");
if (StrUtil.isNotEmpty(is_hand) && is_hand.equals("1")) {
JSONObject rgv_device = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '5'").uniqueResult(0);
@@ -1523,23 +1530,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
//todo:创建桁架任务搬运一个符合的气涨轴
JSONObject jo = new JSONObject();
jo.put("task_type", "010602");
JSONObject qhd_jo = null;
String flag = "1";
// 判断是不是3寸的
if (openTzArea && "3".equals(need_size) && openTempArea) {
//查询可用的空点位
qhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002")
.addParam("need_size", need_size)
.addParam("need_generation", need_generation)
.addParam("product_area", product_area)
.process().uniqueResult(0);
jo.put("truss_type", "1");
flag = "1";
} else {
qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + public_area + "'").uniqueResult(0);
jo.put("truss_type", "8");
flag = "2";
}
// remove: 判断是不是3寸的
JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + public_area + "'").uniqueResult(0);
jo.put("truss_type", "8");
String flag = "2";
jo.put("point_code1", qhd_jo.getString("point_code"));
jo.put("point_code2", cbz_jo.getString("point_code"));
jo.put("vehicle_code", tggw_jo.getString("container_name1") + "-qzz");
@@ -1556,14 +1550,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
// 扫码异常放货到人工RGV
if ("10".equals(type)) {
log.info("ACS扫码异常放货到人工RGV>>>>>>");
if (ObjectUtil.isEmpty(task_jo)) {
throw new BadRequestException("桁架任务不能为空!");
}
JSONObject rgv_jo = ivt_shaftivt.query("point_code = '" + device_code + "'").uniqueResult(0);
int have_qzz = rgv_jo.getIntValue("have_qzz");
rgv_jo.put("have_qzz", have_qzz + 1);
ivt_shaftivt.update(rgv_jo);
task_jo.put("point_code2", device_code);
task_jo.put("point_code2", task_jo.getString("product_area") + "_RG_RGV");
task_jo.put("remark", "桁架异常自动到人工RGV");
task_jo.put("update_time", DateUtil.now());
task_jo.put("update_optid", SecurityUtils.getCurrentUserId());
@@ -1619,21 +1610,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject jo = new JSONObject();
jo.put("task_type", "010603");
jo.put("point_code1", cbz_jo.getString("point_code"));
JSONObject fhd_jo = null;
// 判断是不是3寸的
if (RenUtils.isOpenTzArea(product_area) && "3".equals(cbz_size) && RenUtils.isOpenTempArea(product_area)) {
//查询可用的空点位
fhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001")
.addParam("need_size", cbz_size)
.addParam("need_generation", cbz_generation)
.addParam("product_area", product_area)
.process().uniqueResult(0);
jo.put("truss_type", "1");
} else {
// A1_FHD_01
fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0);
jo.put("truss_type", "8");
}
// remove: 判断是不是3寸的
// A1_FHD_01
JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0);
jo.put("truss_type", "8");
jo.put("point_code2", fhd_jo.getString("point_code"));
jo.put("product_area", product_area);
jo.put("vehicle_code", DateUtil.format(DateUtil.date(), "HHmm") + "qzz");
@@ -1699,15 +1679,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// task_jo托盘到out的任务|剩余轴回库
String product_area = task_jo.getString("product_area");
// 如果有下发的取轴桁架任务,则跳过
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getProduct_area, product_area)
.eq(SchBaseTask::getIs_delete, "0")
.ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_type, "010606")
.gt(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()));
if (list.size() > 0) {
return result;
}
// List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
// .eq(SchBaseTask::getProduct_area, product_area)
// .eq(SchBaseTask::getIs_delete, "0")
// .ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
// .eq(SchBaseTask::getTask_type, "010606")
// .gt(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()));
// if (list.size() > 0) {
// return result;
// }
//判断对应的内包间区域是否启用
JSONObject pack_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '9' AND product_area = '" + product_area + "'").uniqueResult(0);
if ((task_jo.getString("task_type").equals("010401") || task_jo.getString("task_type").equals("010409")) && pack_jo.getString("is_used").equals("1")) {

View File

@@ -525,4 +525,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
arr.add(jo);
return AcsUtil.notifyAcs(api, arr);
}
@Override
public JSONObject toNoticeACSCancelTask(JSONObject jo) {
String api = "api/wms/toNoticeACSFinishTask";
JSONArray arr = new JSONArray();
arr.add(jo);
return AcsUtil.notifyAcs(api, arr);
}
}

View File

@@ -42,6 +42,12 @@ public class OutController {
return new ResponseEntity<>(outService.disuseConfirm(whereJson), HttpStatus.OK);
}
@PostMapping("/pdaDownRoll")
@Log("反收下卷")
public ResponseEntity<Object> pdaDownRoll(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(outService.pdaDownRoll(whereJson), HttpStatus.OK);
}
@PostMapping("/conveyPointQuery")
@Log("缓存点位查询")

View File

@@ -31,7 +31,7 @@ public class PaperTubeController {
@PostMapping("/queryPaperMaterial")
@Log("查询纸管物料")
@SaIgnore
public ResponseEntity<Object> queryPaperMaterial(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(paperTubeService.queryPaperMaterial(whereJson), HttpStatus.OK);
}

View File

@@ -44,4 +44,5 @@ public interface OutService {
*/
JSONObject conveyConfirm(JSONObject whereJson);
JSONObject pdaDownRoll(JSONObject param);
}

View File

@@ -10,10 +10,9 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
import org.nl.common.utils.TaskUtils;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
@@ -31,11 +30,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.List;
import java.util.stream.Collectors;
@Service
@@ -146,7 +143,11 @@ public class OutServiceImpl implements OutService {
}
String cut_qzzno = rows.getJSONObject(0).getString("qzzno");
List<String> cons = new ArrayList<>();
for (int i = 0; i < rows.size(); i++) {
JSONObject rowsJSONObject = rows.getJSONObject(i);
cons.add(rowsJSONObject.getString("container_name"));
}
//判断是否末次下卷
if ("1".equals(is_last)) {
// hint: 最后一次下卷,到左边的输送线上,如果没有则到中转点
@@ -170,15 +171,19 @@ public class OutServiceImpl implements OutService {
.eq(PdmBiSlittingproductionplan::getResource_name, resource_name)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
.lt(PdmBiSlittingproductionplan::getStatus, "06")
.ne(PdmBiSlittingproductionplan::getSplit_group, split_group));
.ne(PdmBiSlittingproductionplan::getSplit_group, split_group)
.orderByAsc(PdmBiSlittingproductionplan::getSplit_group));
// 比如当前A组可能得到BC两组的数据这时候只要B组
if (allPlans.size() > 0) {
PdmBiSlittingproductionplan demoPlan = allPlans.get(0);
String group = demoPlan.getSplit_group();
// 判断当前是分切机的什么位置(上/下)
if (cut_ivt.getString("up_point_code").equals(point_code)) {
// 上轴
nextPlan = allPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).collect(Collectors.toList());
nextPlan = allPlans.stream().filter(p -> "1".equals(p.getUp_or_down()) && group.equals(p.getSplit_group())).collect(Collectors.toList());
} else {
// 下轴
nextPlan = allPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).collect(Collectors.toList());
nextPlan = allPlans.stream().filter(p -> "2".equals(p.getUp_or_down()) && group.equals(p.getSplit_group())).collect(Collectors.toList());
}
if (nextPlan.size() > 0) {
// hint: 虚拟分切计划不动,直到搬运成功后清除点位时删除(*
@@ -239,6 +244,7 @@ public class OutServiceImpl implements OutService {
jo.put("vehicle_code", dec.getQzzno());
jo.put("task_type", "010403");
}
jo.put("cons", cons);
cutTrussTask.createTask(jo);
JSONObject result = new JSONObject();
result.put("message", "操作成功!");
@@ -351,6 +357,7 @@ public class OutServiceImpl implements OutService {
jo.put("vehicle_code", delivery_point.getString("qzzno"));
jo.put("vehicle_code2", cut_qzzno);
jo.put("product_area", cut_ivt.getString("product_area"));
jo.put("cons", cons);
} else {
char dtl_type = delivery_point.getString("point_code").charAt(delivery_point.getString("point_code").length() - 1);
@@ -393,8 +400,8 @@ public class OutServiceImpl implements OutService {
.eq("point_code1", point_code)
.lt("task_status", TaskStatusEnum.FINISHED.getCode())
.eq("is_delete", "0"));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前分切机"+point_code+"存在任务,如需继续下卷请先取消任务"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
if (!CollectionUtils.isEmpty(list)) {
throw new BadRequestException("当前分切机" + point_code + "存在任务,如需继续下卷请先取消任务" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
//查询该分切机邻近位置的空载具的输送线点位
JSONObject empty_vehicle = WQL.getWO("PDA_02")
@@ -483,5 +490,102 @@ public class OutServiceImpl implements OutService {
return jo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject pdaDownRoll(JSONObject param) {
log.info("用户:[{}]使用手持下卷,下卷参数:{}", SecurityUtils.getCurrentNickName(), param);
// point_code、container: [{"container_name":"子卷号", "site":"上下轴1/2"}]
String point_code = param.getString("point_code");
JSONArray conArray = param.getJSONArray("container");
List<String> cons = new ArrayList<>();
for (int i = 0; i < conArray.size(); i++) {
JSONObject container = conArray.getJSONObject(i);
cons.add(container.getString("container_name"));
}
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByContainerNames(cons);
if (plans.size() == 0) {
throw new BadRequestException("MES未把计划推送到LMS系统请稍后在试或者使用废箔下卷");
}
//查询该点位对应的机台编号
JSONObject cut_ivt = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("up_point_code ='" + point_code + "' OR down_point_code ='" + point_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(cut_ivt)) {
throw new BadRequestException("未查询到对应的分切机!");
}
// update: 如果是到托盘的桁架任务,则会出错,已修改
String cut_qzzno = "废箔";
boolean isOpen = RenUtils.isOpenTzArea(cut_ivt.getString("product_area"));
if (!isOpen) {
throw new BadRequestException("所在区域车间无法使用该功能!");
}
JSONObject empty_vehicle = WQL.getWO("PDA_02")
.addParam("sort_seq", cut_ivt.getString("sort_seq"))
.addParam("sql_str", " ORDER BY abs(" + cut_ivt.getString("sort_seq") + "-sort_seq),point_code")
.addParam("product_area", cut_ivt.getString("product_area"))
.addParam("point_location", cut_ivt.getString("point_location"))
.addParam("flag", "3").process().uniqueResult(0);
if (ObjectUtil.isEmpty(empty_vehicle)) {
// hint: 如果没有载具号,就需要创建到中转架的任务
// mark查找子卷缓存架的空位固定:点位类型03
List<Deliverycachepointivt> caches = deliverycachepointivtService.getVolumeDeliveryCacheNoTask(DeliveryConDto.builder()
.area(cut_ivt.getString("product_area"))
.location(cut_ivt.getString("point_location"))
.pointStatus("01")
.sortSeq(cut_ivt.getString("sort_seq"))
.build());
if (caches.size() > 0) {
Deliverycachepointivt cachePoint = caches.get(0);
JSONObject jo = new JSONObject();
jo.put("point_code1", point_code);
jo.put("point_code2", cachePoint.getPoint_code());
jo.put("vehicle_code", cut_qzzno);
jo.put("product_area", cut_ivt.getString("product_area"));
//分切机->子卷中转架 子卷出站
jo.put("task_type", "010404");
jo.put("cons", cons);
cutTrussTask.createTask(jo);
JSONObject result = new JSONObject();
result.put("message", "操作成功!");
return result;
}
}
// hint: 改造的内包间业务如果暂存架不存在才去校验外侧的位置。
//查询缓存位的空载具
// 内测没有找外侧
if (ObjectUtil.isEmpty(empty_vehicle)) {
empty_vehicle = WQL.getWO("PDA_02")
.addParam("sort_seq", cut_ivt.getString("sort_seq"))
.addParam("sql_str", " ORDER BY abs(" + cut_ivt.getString("sort_seq") + "-sort_seq),point_code")
.addParam("product_area", cut_ivt.getString("product_area"))
.addParam("point_location", cut_ivt.getString("point_location"))
.addParam("flag", "303").process().uniqueResult(0);
}
if (ObjectUtil.isEmpty(empty_vehicle)) {
throw new BadRequestException("未查询到可用的空载具或当前载具存在任务!!");
}
JSONObject jo = new JSONObject();
jo.put("point_code1", point_code);
jo.put("point_code2", empty_vehicle.getString("point_code"));
jo.put("vehicle_code", cut_qzzno);
jo.put("cons", cons);
if (StrUtil.isEmpty(empty_vehicle.getString("vehicle_code"))) {
throw new BadRequestException("点位:" + empty_vehicle.getString("point_code") + "载具号为空!");
}
jo.put("vehicle_code2", empty_vehicle.getString("vehicle_code"));
jo.put("product_area", cut_ivt.getString("product_area"));
//分切>输送线 子卷出站
jo.put("task_type", "010404");
char dtl_type = empty_vehicle.getString("point_code").charAt(empty_vehicle.getString("point_code").length() - 1);
//判断起点是否远离分切机
if (Integer.valueOf(String.valueOf(dtl_type)) % 2 == 0) {
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo.put("point_code2", "");
}
cutTrussTask.createTask(jo);
JSONObject result = new JSONObject();
result.put("message", "操作成功!");
return result;
}
}

View File

@@ -255,6 +255,7 @@ public class PaperTubeServiceImpl implements PaperTubeService {
String location = param.getString("location");
String qzz_size = param.getString("qzz_size");
Integer number = param.getInteger("qqz_num");
String labour = param.getString("labour");
String qzz_generation = param.getString("qzz_generation");
StIvtCutpointivt xnDevice = cutpointivtService.getOne(new LambdaQueryWrapper<StIvtCutpointivt>()
.eq(StIvtCutpointivt::getPoint_location, location)
@@ -368,6 +369,11 @@ public class PaperTubeServiceImpl implements PaperTubeService {
plan.setUp_or_down("1");
plan.setLeft_or_right("2");
}
if (ObjectUtil.isNotEmpty(labour) && "1".equals(labour)) {
plan.setQzzno("qzz-" + plan.getContainer_name());
plan.setIs_paper_ok("1");
plan.setIs_child_tz_ok("1");
}
plans.add(plan);
}
}
@@ -410,6 +416,7 @@ public class PaperTubeServiceImpl implements PaperTubeService {
String location = param.getString("location");
String qzz_generation = param.getString("qzz_generation");
// 插入分切计划
param.put("labour", "1");
JSONObject planObj = doInsertPlan(param);
JSONArray plansArray = planObj.getJSONArray("plans");
List<PdmBiSlittingproductionplan> plans = plansArray.toJavaList(PdmBiSlittingproductionplan.class);

View File

@@ -13,7 +13,9 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.pda.mps.service.ShippingService;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.tasks.CutConveyorTask;
import org.nl.wms.sch.tasks.PaperTrussTask;
import org.nl.wms.sch.tasks.renovation.util.RenUtils;
@@ -33,6 +35,7 @@ public class ShippingServiceImpl implements ShippingService {
private final PaperTrussTask paperTrussTask;
private final IschBaseTaskService taskService;
private final WmsToAcsService wmsToAcsService;
@Override
public JSONObject queryMaterialInfo(JSONObject whereJson) {
@@ -101,6 +104,7 @@ public class ShippingServiceImpl implements ShippingService {
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject confirm(JSONObject whereJson) {
log.info("请求参数:{}", whereJson);
// todo: 输送线配送套好轴的气胀轴到分切车间(分切机对面的移栽台位置-这里需要注意,任务完成之后需要创建桁架任务挪到空轴取轴位)
JSONObject jo = new JSONObject();
// 分切计划
@@ -173,6 +177,7 @@ public class ShippingServiceImpl implements ShippingService {
if (StrUtil.isNotEmpty(qzzno)) {
map.put("qzzno", qzzno);
}
log.info("气胀轴编码:{}", qzzno);
JSONArray plan = WQL.getWO("PDA_02").addParamMap(map).process().getResultJSONArray(0);
if (ObjectUtil.isEmpty(plan)) {
throw new BadRequestException("未找到气涨轴【" + qzzno + "】对应的分切计划!");
@@ -231,7 +236,7 @@ public class ShippingServiceImpl implements ShippingService {
// hint: 只能在外侧point_type=01
JSONObject empty_point;
if (openTzArea) {
// todo: 校验无任务
// hint: 校验无任务
empty_point = WQL.getWO("PDA_02")
.addParam("sql_str", " ORDER BY abs(" + plan_jo.getString("sort_seq") + "-sort_seq),point_code")
.addParam("product_area", plan_jo.getString("product_area"))
@@ -245,6 +250,14 @@ public class ShippingServiceImpl implements ShippingService {
.addParam("flag", "4").process().uniqueResult(0);
}
if (ObjectUtil.isEmpty(empty_point)) {
// todo: 优化成半条任务
if (openTzArea) {
//下发输送线任务
String remark = "没空闲点位,已创建半条任务,系统会自动创建!";
doCreateHalfTask(vehicle_code, plan_jo, remark, map);
jo.put("message", "没空闲点位,已创建半条任务,系统会自动创建!");
return jo;
}
throw new BadRequestException("未查询到可用的空点位!");
}
@@ -266,9 +279,25 @@ public class ShippingServiceImpl implements ShippingService {
//判断是否存在任务
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0);
if (!"01".equals(right_point.getString("point_status"))) {
// todo: 优化成半条任务
if (openTzArea) {
//下发输送线任务
String remark = empty_point.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!";
doCreateHalfTask(vehicle_code, plan_jo, remark, map);
jo.put("message", remark);
return jo;
}
throw new BadRequestException(empty_point.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!");
}
if (ObjectUtil.isNotEmpty(task_jo)) {
// todo: 优化成半条任务
if (openTzArea) {
//下发输送线任务
String remark = empty_point.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!";
doCreateHalfTask(vehicle_code, plan_jo, remark, map);
jo.put("message", remark);
return jo;
}
throw new BadRequestException(empty_point.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!");
}
}
@@ -292,7 +321,7 @@ public class ShippingServiceImpl implements ShippingService {
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(row);
}
// hint: 改造后的右边一定存放的是空载具
// hint: 改造后的右边一定存放的是空载具 (改造之后不会走以下流程)
if (Integer.valueOf(String.valueOf(dtl_type)) % 2 == 0 && !openTzArea) {
//如果是右边(外侧)的任务,判断左边是否存在空载具且没任务,如果存在则把左边的空载具送出
JSONObject left_point = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_location = '" + empty_point.getString("point_location") + "' AND product_area = '" + empty_point.getString("product_area") + "' AND sort_seq = '" + empty_point.getString("sort_seq") + "' order by point_code").uniqueResult(0);
@@ -317,6 +346,29 @@ public class ShippingServiceImpl implements ShippingService {
return jo;
}
public void doCreateHalfTask(String vehicle_code, JSONObject plan_jo, String remark, HashMap map) {
JSONObject form = new JSONObject();
JSONObject ss_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + plan_jo.getString("product_area") + "' AND point_type = '6'").uniqueResult(0);
form.put("point_code1", ss_jo.getString("point_code"));
form.put("point_code2", "-");
form.put("task_type", "010402-1");
form.put("product_area", plan_jo.getString("product_area"));
form.put("vehicle_code", plan_jo.getString("qzzno"));
form.put("vehicle_code2", vehicle_code);
form.put("remark", remark);
form.put("plans", plan_jo);
form.put("task_status", TaskStatusEnum.SURE_START.getCode());
cutConveyorTask.createTask(form);
//更新该气涨轴对应的分切计划状态
JSONArray plan_rows = WQL.getWO("PDA_02").addParamMap(map).process().getResultJSONArray(0);
for (int i = 0; i < plan_rows.size(); i++) {
JSONObject row = plan_rows.getJSONObject(i);
row.put("status", "02");
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(row);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject returnVehicle(JSONObject whereJson) {
@@ -330,13 +382,23 @@ public class ShippingServiceImpl implements ShippingService {
}
JSONObject vehicle_task = WQLObject.getWQLObject("sch_base_task").query("vehicle_code2 = '" + vehicle_code + "' AND is_delete = '0' AND task_status < '07'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(vehicle_task)) {
throw new BadRequestException("载具码:" + vehicle_code + "存在未完成的输送线任务!");
// 请求ACS删除任务
log.info("载具码:" + vehicle_code + "存在未完成的输送线任务正在请求ACS删除任务");
JSONObject taskParams = new JSONObject();
taskParams.put("product_area", vehicle_task.getString("product_area"));
taskParams.put("task_code", vehicle_task.getString("task_code"));
JSONObject acsRes = wmsToAcsService.toNoticeACSCancelTask(taskParams);
// 删除任务
log.info("请求ACS删除完毕ACS返回值{}", acsRes);
vehicle_task.put("task_status", TaskStatusEnum.FINISHED.getCode());
vehicle_task.put("remark", "异常自动完成任务!");
WQLObject.getWQLObject("sch_base_task").update(vehicle_task);
// throw new BadRequestException("载具码:" + vehicle_code + "存在未完成的输送线任务!");
}
JSONObject del_jo = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(del_jo)) {
throw new BadRequestException("载具码:" + vehicle_code + "存在点位:" + del_jo.getString("point_code") + "上!");
}
//判断起点是否存在
JSONObject start_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + point_code + "' AND is_delete = '0' AND is_used = '1'").uniqueResult(0);
if (ObjectUtil.isEmpty(start_jo)) {
@@ -345,22 +407,29 @@ public class ShippingServiceImpl implements ShippingService {
if (!"6".equals(start_jo.getString("point_type"))) {
throw new BadRequestException("请选择输送线入库口作为起点!");
}
boolean isOpenTzArea = RenUtils.isOpenTzArea(start_jo.getString("product_area"));
//查询该载具码对应的区域位置
JSONObject vehicle_area = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + vehicle_code + "' AND product_area = '" + start_jo.getString("product_area") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_area)) {
throw new BadRequestException("未查询到该载具对应的区域位置!");
}
String tempPoint;
String remark = "";
String taskStatus = TaskStatusEnum.START_AND_POINT.getCode();
//根据起点判断区域查询对应的输送线空点位
JSONObject point_jo = WQL.getWO("PDA_02").addParam("flag", "4").addParam("product_area", vehicle_area.getString("product_area"))
.addParam("point_location", vehicle_area.getString("point_location"))
.addParam("sql_str", " ORDER BY point_code")
.process().uniqueResult(0);
if (ObjectUtil.isEmpty(point_jo)) {
throw new BadRequestException("对应输送线不存在可用空点位!");
if (isOpenTzArea) {
taskStatus = TaskStatusEnum.SURE_START.getCode();
remark = "对应输送线不存在可用空点位!";
} else {
throw new BadRequestException("对应输送线不存在可用空点位!");
}
}
tempPoint = point_jo.getString("point_code");
//如果为左边点位判断右边是否存在未完成的任务,如果有则提示不能下发
//判断输送出来的任务起点是否靠近分切机,如果靠近分切机且远离分切机的点位上存在载具且不存在任务进行载具横移
char dtl_type = point_jo.getString("point_code").charAt(point_jo.getString("point_code").length() - 1);
@@ -369,19 +438,33 @@ public class ShippingServiceImpl implements ShippingService {
//判断是否存在任务
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(task_jo)) {
throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!");
if (isOpenTzArea) {
tempPoint = "";
taskStatus = TaskStatusEnum.SURE_START.getCode();
remark = point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!";
} else {
throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!");
}
}
if (!"01".equals(right_point.getString("point_status"))) {
throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!");
if (isOpenTzArea) {
tempPoint = "";
taskStatus = TaskStatusEnum.SURE_START.getCode();
remark = point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!";
} else {
throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!");
}
}
}
//下发输送线任务
JSONObject form = new JSONObject();
form.put("point_code1", point_code);
form.put("point_code2", point_jo.getString("point_code"));
form.put("point_code2", tempPoint);
form.put("task_type", "010402");
form.put("product_area", point_jo.getString("product_area"));
form.put("task_status", taskStatus);
form.put("remark", remark);
form.put("product_area", start_jo.getString("product_area"));
form.put("vehicle_code2", vehicle_code);
cutConveyorTask.createTask(form);
JSONObject jo = new JSONObject();

View File

@@ -303,6 +303,15 @@
point_status = '01'
AND ivt.is_used = '1'
AND ivt.point_type = '01'
AND 0 = (
SELECT
COUNT(*)
FROM
sch_base_task t
WHERE
t.is_delete = '0'
AND t.point_code2 = ivt.point_code
AND t.task_status < '07' )
OPTION 输入.product_area <> ""
ivt.product_area = 输入.product_area
ENDOPTION

View File

@@ -1,5 +1,6 @@
package org.nl.wms.pdm.ivt.deliverycache.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
@@ -28,6 +29,7 @@ public class DeliverycachepointivtController {
private IDeliverycachepointivtService deliverycachepointivtService;
@GetMapping
@SaIgnore
@Log("查询分切缓存架")
//@SaCheckPermission("@el.check('deliverycachepointivt:list')")
public ResponseEntity<Object> query(DeliverycachepointivtQuery deliverycachepointivtQuery, PageQuery page){

View File

@@ -294,7 +294,7 @@
status = 输入.status
ENDOPTION
OPTION 输入.limits <> ""
1=1 order by date_of_FG_inbound desc limit 0,10000
1=1 order by date_of_FG_inbound desc limit 0,50000
ENDOPTION
ENDSELECT
ENDQUERY

View File

@@ -50,13 +50,18 @@ public class AcsUtil {
if (jo.containsKey("class_type") && jo.getString("class_type").contains("0107")) {
product_area = "BLK";
}
if (!"A1,A2,A3,A4,LK".contains(product_area)) {
log.warn("不是一期任务,跳过下发!");
continue;
}
if (StrUtil.isEmpty(product_area)) {
throw new BadRequestException("区域不能为空!下发信息:" + jo.toString());
log.warn("区域不能为空!下发信息:" + jo.toString());
continue;
}
String acs_url = URLEnum.find(product_area);
if (StrUtil.isEmpty(acs_url)) {
log.info(product_area);
throw new BadRequestException("未查询到区域对应的acs地址");
log.warn("未查询到区域{}对应的acs地址", product_area);
continue;
}
String url =acs_url + api;
try {

View File

@@ -0,0 +1,41 @@
{
"data": [
{
"carrier_direction": 0,
"heartbeat": 0,
"material12": "701990999000018",
"qty3": 0,
"material10": "701990999000019",
"qty2": 0,
"material11": "0",
"qty5": 15,
"qty4": 7,
"error": 0,
"qty1": 0,
"mode": 3,
"out_qty_arr": "0",
"move": 1,
"out_seq_arr": "0",
"material8": "0",
"material7": "0",
"material9": "0",
"material2": "0",
"task": 48166,
"material1": "0",
"material4": "701990999000019",
"qty7": 0,
"material3": "0",
"qty6": 0,
"material6": "0",
"qty9": 0,
"device_code": "A4_ZGK",
"material5": "482210000000018",
"qty8": 0,
"qty11": 1,
"qty12": 15,
"qty10": 3
}
],
"message": "操作成功",
"status": 200
}

View File

@@ -32,12 +32,13 @@ import org.nl.wms.sch.tasks.URLEnum;
import org.nl.wms.sch.tasks.renovation.util.RenUtils;
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.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static org.nl.wms.sch.tasks.renovation.util.RenUtils.isOpenTzArea;
@@ -102,6 +103,7 @@ public class AutoCallEmptyVehicle {
}
@Transactional(rollbackFor = Exception.class)
void callEmptyVehicle(String product_area, String point_location, String dayNum) {
log.info("区域:{}, 位置:{}", product_area, point_location);
//下半部分的分切组
@@ -113,7 +115,31 @@ public class AutoCallEmptyVehicle {
// todo: 拦截排序最终需要的分切组
// todo: 空载具只有按需呼叫不在自动创建到out点
//下半部分需要的总空载具
int donw_num = 0;
// todo: 获取当前未执行的任务010606状态=02
List<SchBaseTask> waitTasks = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, "010606")
.eq(SchBaseTask::getIs_delete, "0")
.eq(SchBaseTask::getProduct_area, product_area)
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()));
// 过滤上下半区
List<SchBaseTask> needLocation = waitTasks.stream().filter(t -> {
JSONObject requestParam = JSONObject.parseObject(t.getRequest_param());
return point_location.equals(requestParam.getString("need_location"));
}).collect(Collectors.toList());
// // 获取管芯任务
// List<SchBaseTask> gxTask = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
// .eq(SchBaseTask::getTask_type, "010601")
// .eq(SchBaseTask::getIs_delete, "0")
// .eq(SchBaseTask::getProduct_area, product_area)
// .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()));
// // 过滤上下半区
// List<SchBaseTask> needLocation2 = gxTask.stream().filter(t -> {
// JSONObject result = WQLObject.getWQLObject("pdm_bi_slittingproductionplan")
// .query("container_name = '" + t.getVehicle_code() + "'").uniqueResult(0);
// return point_location.equals(result.getString("need_location"));
// }).collect(Collectors.toList());
// log.info("任务");
int donw_num = needLocation.size();
for (int i = 0; i < down_rows.size(); i++) {
JSONObject row = down_rows.getJSONObject(i);
String parent_container_name = row.getString("parent_container_name");
@@ -125,12 +151,6 @@ public class AutoCallEmptyVehicle {
// 下发ACS任务呼叫纸管
// this.callPaperTube(plan_rows, product_area);
// hint: 如果是两个分切计划以上,必定是两根轴
if (plan_rows.size() >= 2) {
donw_num += 2;
} else if (plan_rows.size() == 1) {
donw_num += 1;
}
if (plan_rows.size() > 0) {
JSONObject plan = plan_rows.getJSONObject(0);
// 判断是否有气胀轴,没有气胀轴就跳过
@@ -142,7 +162,7 @@ public class AutoCallEmptyVehicle {
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.like(SchBaseTask::getPoint_code1, "QHD"));
log.info("需要的轴数:{}个,气胀轴还有:{}个,取货点任务有:{}个", donw_num, allQzzPoints.size(), qhd);
if (donw_num > allQzzPoints.size()) {
if (donw_num > allQzzPoints.size() - qhd) {
log.warn("气胀轴不够用,该计划不套轴!!!");
continue;
}
@@ -160,26 +180,32 @@ public class AutoCallEmptyVehicle {
break;
}
}
// hint: 如果是两个分切计划以上,必定是两根轴
if (plan_rows.size() >= 2) {
donw_num += 2;
} else if (plan_rows.size() == 1) {
donw_num += 1;
}
// 下发ACS任务呼叫纸管
this.callPaperTube(plan_rows, product_area);
}
/* ******************* 校验需要呼叫的载具数(待优化) ******************* */
// 断点:"A1".equals(product_area) && "1".equals(point_location)
//减去对应已经在出库的空载具任务
// JSONArray out_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "2").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0);
// donw_num -= out_task.size();
JSONArray out_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "2").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0);
donw_num -= out_task.size();
//减去出口对应的载具
// JSONObject out_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "3").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0);
// if (ObjectUtil.isNotEmpty(out_jo)) {
// donw_num--;
// }
// 减去出口对应的载具
JSONObject out_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "3").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(out_jo)) {
donw_num--;
}
//减去入库口对应的载具
// JSONObject in_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "4").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0);
// if (ObjectUtil.isNotEmpty(in_jo)) {
// donw_num--;
// }
// 减去入库口对应的载具
JSONObject in_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "4").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(in_jo)) {
donw_num--;
}
//减去入库任务数量
// JSONArray in_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "5").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0);
@@ -370,6 +396,13 @@ public class AutoCallEmptyVehicle {
/**
* 向ACS发起出管芯
* @param rows 纸管数组信息
* <p>
* [{
* "paper_code": "",
* "num": 1,
* "pcsn": "规格"
* }]
* </p>
* @param product_area 生产区域
*/
void getPaperStruct(JSONArray rows, String product_area) {
@@ -379,7 +412,7 @@ public class AutoCallEmptyVehicle {
JSONObject zgk_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '8' AND product_area = '" + product_area + "'").uniqueResult(0);
//判断纸管库是否启用
if ("1".equals(zgk_jo.getString("is_used"))) {
log.info("管芯库启动-正在ACS写入信号...");
log.info("管芯库启动-正在ACS获取管芯数据...");
device_jo.put("device_code", zgk_jo.getString("point_code"));
device_jo.put("product_area", product_area);
JSONArray device_ja = new JSONArray();
@@ -387,28 +420,72 @@ public class AutoCallEmptyVehicle {
// 获取管芯数据
JSONObject device_data = wmsToAcsService.getPointStatus(device_ja);
JSONObject data = device_data.getJSONArray("data").getJSONObject(0);
log.info("获取得到管芯数据:{}", device_data);
JSONArray task_rows = new JSONArray();
boolean same_flag = false;
// todo: 临时测试
// 原false
boolean need_cz = false;
// row最多两个
for (int i = 0; i < rows.size(); i++) {
JSONObject row = rows.getJSONObject(i);
// 需要的数量
int num = row.getIntValue("num");
if (num == 2) {
same_flag = true;
}
String material_code = row.getString("paper_code");
// 12个仓位, 可以多仓出
for (int j = 1; j < 13; j++) {
String material_key = "material" + j;
String qty_key = "qty" + j;
String ivt_code = data.getString(material_key);
// 某个仓位对应的管芯数量
int ivt_num = data.getIntValue(qty_key);
if (StrUtil.isNotEmpty(ivt_code) && ivt_code.equals(material_code)) {
if (StrUtil.isNotEmpty(ivt_code) && ivt_code.equals(material_code) && ivt_num > 0) {
// 获取包含这个仓的任务
List<SchBaseTask> zgkTasks = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, "0")
.eq(SchBaseTask::getProduct_area, product_area)
.eq(SchBaseTask::getTask_type, "010601")
.eq(SchBaseTask::getPoint_code1, product_area + "_ZGK"));
// 过滤出这个仓,并且统计数据
List<SchBaseTask> sameTask = zgkTasks.stream().filter(t -> {
if (ObjectUtil.isEmpty(t.getResponse_param())) {
return false;
}
JSONArray requestParam = JSONObject.parseArray(t.getResponse_param());
for (int i1 = 0; i1 < requestParam.size(); i1++) {
JSONObject requestParamJSONObject = requestParam.getJSONObject(i1);
if (("material" + requestParamJSONObject.getString("device_code")).equals(material_key)) {
return true;
}
}
return false;
}).collect(Collectors.toList());
// 计算并扣除已经出去的数量
for (SchBaseTask task : sameTask) {
JSONArray requestParam = JSONObject.parseArray(task.getResponse_param());
for (int i1 = 0; i1 < requestParam.size(); i1++) {
JSONObject requestParamJSONObject = requestParam.getJSONObject(i1);
if (("material" + requestParamJSONObject.getString("device_code")).equals(material_key)) {
ivt_num -= requestParamJSONObject.getIntValue("qty");
}
}
}
if (ivt_num < 0) {
// 不够就下一个仓
continue;
}
// 这个管芯任务需要从哪个仓出多少管芯
JSONObject task_jo = new JSONObject();
// 哪个仓
task_jo.put("device_code", j);
// 哪个管芯
task_jo.put("material_code", material_code);
if (ivt_num >= num) {
// 多少管
task_jo.put("qty", num);
num = 0;
} else {
@@ -451,7 +528,7 @@ public class AutoCallEmptyVehicle {
jo.put("request_param", request_param);
jo.put("product_area", product_area);
paperTubeTask.createTask(jo);
log.info("出管芯信号写入成功-参数:{}", jo);
log.info("出管芯任务创建成功-参数:{}", jo);
} else {
log.info("不进行套轴, 配送空气胀轴到载具上....");
createTask(rows, product_area);

View File

@@ -13,6 +13,7 @@ import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.tasks.PaperTrussTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -31,12 +32,13 @@ public class AutoSendOutShaft {
private WmsToAcsService wmsToAcsService;
@Autowired
private IstIvtShaftivtService shaftivtService;
@Transactional(rollbackFor = Exception.class)
public void run() {
List<StIvtShaftivt> list = shaftivtService.list(new LambdaQueryWrapper<StIvtShaftivt>()
.eq(StIvtShaftivt::getPoint_type, "11")
.eq(StIvtShaftivt::getHave_qzz, "2")
.eq(StIvtShaftivt::getIs_used, "1"));
log.info("成品暂存加送子卷卷到拔轴机开始执行...");
List<StIvtShaftivt> list = shaftivtService.getSubRollCacheNoTaskPoints();
for (StIvtShaftivt stIvtShaftivt : list) {
log.info("开始为[{}]进行执行送到穿拔轴机", stIvtShaftivt.getPoint_code());
// question: 并发/事务问题
JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '5' AND product_area = '" + stIvtShaftivt.getProduct_area() + "'").uniqueResult(0);
// 查询ACS是否有可用的RGV
JSONObject queryRgvParam = new JSONObject();
@@ -70,6 +72,8 @@ public class AutoSendOutShaft {
PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class);
paperTrussTask.createTask(jo);
}
// 只做一次
break;
}
}
}

View File

@@ -0,0 +1,76 @@
package org.nl.wms.sch.manage;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.tasks.CutConveyorTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 自动送到人工RGV任务
* @Author: lyd
* @Date: 2025/4/6
*/
@Slf4j
@Component
public class AutoSendRgRGVTask {
@Autowired
private IschBaseTaskService taskService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private CutConveyorTask cutConveyorTask;
@Transactional(rollbackFor = Exception.class)
public void run() {
List<SchBaseTask> rgRgvTasks = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
.eq(SchBaseTask::getTask_type, "010605")
.eq(SchBaseTask::getIs_delete, "0")
.like(SchBaseTask::getPoint_code2, "RG_RGV"));
for (SchBaseTask rgRgvTask : rgRgvTasks) {
String productArea = rgRgvTask.getProduct_area();
// 校验人工RGV是否空闲。
JSONArray device_rows = new JSONArray();
JSONObject device_obj = new JSONObject();
device_rows.add(device_obj);
device_obj.put("device_code", rgRgvTask.getPoint_code2());
device_obj.put("product_area", productArea);
JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows);
if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) {
log.error("区域【{}】获取人工RGV信息失败", productArea);
continue;
}
JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0);
if (data2.getString("move2").equals("1")) {
log.warn("区域【{}】人工RGV有货需要尽快处理", productArea);
continue;
}
JSONArray action_rows = new JSONArray();
JSONObject action_jo = new JSONObject();
action_jo.put("device_code", rgRgvTask.getPoint_code2());
action_jo.put("code", "to_command");
action_jo.put("product_area", productArea);
action_jo.put("value", "1");
action_rows.add(action_jo);
JSONObject action = wmsToAcsService.action(action_rows);
if (!action.getString("status").equals("200")) {
log.warn("区域【{}】人工RGV异常!", productArea);
continue;
}
// 下发任务
rgRgvTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(rgRgvTask);
cutConveyorTask.immediateNotifyAcs(null);
}
}
}

View File

@@ -0,0 +1,75 @@
package org.nl.wms.sch.manage;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.tasks.CutConveyorTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 自动送套轴到分切车间
* @Author: lyd
* @Date: 2025/4/15
*/
@Slf4j
@Component
public class AutoSendShaftTask {
@Autowired
private IschBaseTaskService taskService;
@Autowired
private CutConveyorTask cutConveyorTask;
@Transactional(rollbackFor = Exception.class)
public void run() {
log.info("自动补全创建in点到移栽台的送轴任务开始执行。。。。");
List<SchBaseTask> inTasks = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
.eq(SchBaseTask::getTask_type, "010402-1")
.eq(SchBaseTask::getIs_delete, "0"));
for (SchBaseTask inTask : inTasks) {
JSONObject requestParam = JSONObject.parseObject(inTask.getRequest_param());
JSONObject plan_jo = requestParam.getJSONObject("plans");
JSONObject empty_point = WQL.getWO("PDA_02")
.addParam("sql_str", " ORDER BY abs(" + plan_jo.getString("sort_seq") + "-sort_seq),point_code")
.addParam("product_area", plan_jo.getString("product_area"))
.addParam("point_location", plan_jo.getString("point_location"))
.addParam("flag", "401").process().uniqueResult(0);
if (ObjectUtil.isEmpty(empty_point)) {
log.error("任务【{}】未查询到可用的空点位!", inTask.getTask_code());
continue;
}
//如果为左边点位判断右边是否存在未完成的任务,如果有则提示不能下发
//判断输送出来的任务起点是否靠近分切机,如果靠近分切机且远离分切机的点位上存在载具且不存在任务进行载具横移
char dtl_type = empty_point.getString("point_code").charAt(empty_point.getString("point_code").length() - 1);
//如果终点为靠近分切机的点位则判断远离分切机的点位是否存在架子且不存在任务。如果为true则提醒工人进行载具横移
if (Integer.valueOf(String.valueOf(dtl_type)) % 2 != 0) {
JSONObject right_point = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_location = '" + empty_point.getString("point_location") + "' AND product_area = '" + empty_point.getString("product_area") + "' AND sort_seq = '" + empty_point.getString("sort_seq") + "' order by point_code desc").uniqueResult(0);
//判断是否存在任务
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0);
if (!"01".equals(right_point.getString("point_status"))) {
log.warn(empty_point.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!");
continue;
}
if (ObjectUtil.isNotEmpty(task_jo)) {
log.warn(empty_point.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!");
continue;
}
}
inTask.setTask_type("010402");
inTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
inTask.setRemark("创建成功");
taskService.updateById(inTask);
cutConveyorTask.immediateNotifyAcs(null);
}
}
}

View File

@@ -0,0 +1,96 @@
package org.nl.wms.sch.manage;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.tasks.CutConveyorTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 自动补全创建in点到移栽台的任务
* @Author: lyd
* @Date: 2025/4/8
*/
@Slf4j
@Component
public class AutoSendVehicleToCutTask {
@Autowired
private IschBaseTaskService taskService;
@Autowired
private CutConveyorTask cutConveyorTask;
@Transactional(rollbackFor = Exception.class)
public void run() {
log.info("自动补全创建in点到移栽台的送空托任务开始执行。。。。");
List<SchBaseTask> inTasks = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
.eq(SchBaseTask::getTask_type, "010402")
.eq(SchBaseTask::getIs_delete, "0"));
for (SchBaseTask inTask : inTasks) {
String vehicle_code = inTask.getVehicle_code2();
String point_code = inTask.getPoint_code1();
try {
if (StrUtil.isEmpty(vehicle_code)) {
throw new BadRequestException("载具码不能为空!");
}
JSONObject del_jo = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(del_jo)) {
throw new BadRequestException("载具码:" + vehicle_code + "存在点位:" + del_jo.getString("point_code") + "上!");
}
//判断起点是否存在
JSONObject start_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + point_code + "' AND is_delete = '0' AND is_used = '1'").uniqueResult(0);
if (ObjectUtil.isEmpty(start_jo)) {
throw new BadRequestException("未查询到对应点位!");
}
if (!"6".equals(start_jo.getString("point_type"))) {
throw new BadRequestException("请选择输送线入库口作为起点!");
}
//查询该载具码对应的区域位置
JSONObject vehicle_area = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + vehicle_code + "' AND product_area = '" + start_jo.getString("product_area") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_area)) {
throw new BadRequestException("未查询到该载具对应的区域位置!");
}
//根据起点判断区域查询对应的输送线空点位
JSONObject point_jo = WQL.getWO("PDA_02").addParam("flag", "4").addParam("product_area", vehicle_area.getString("product_area"))
.addParam("point_location", vehicle_area.getString("point_location"))
.addParam("sql_str", " ORDER BY point_code")
.process().uniqueResult(0);
if (ObjectUtil.isEmpty(point_jo)) {
throw new BadRequestException("对应输送线不存在可用空点位!");
}
//如果为左边点位判断右边是否存在未完成的任务,如果有则提示不能下发
//判断输送出来的任务起点是否靠近分切机,如果靠近分切机且远离分切机的点位上存在载具且不存在任务进行载具横移
char dtl_type = point_jo.getString("point_code").charAt(point_jo.getString("point_code").length() - 1);
if (Integer.valueOf(String.valueOf(dtl_type)) % 2 != 0) {
JSONObject right_point = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_location = '" + point_jo.getString("point_location") + "' AND product_area = '" + point_jo.getString("product_area") + "' AND sort_seq = '" + point_jo.getString("sort_seq") + "' order by point_code desc").uniqueResult(0);
//判断是否存在任务
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(task_jo)) {
throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!");
}
if (!"01".equals(right_point.getString("point_status"))) {
throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!");
}
}
// 下发
inTask.setPoint_code2(point_jo.getString("point_code"));
inTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(inTask);
cutConveyorTask.immediateNotifyAcs(null);
} catch (Exception e) {
log.error("定时任务【AutoSendVehicleToCutTask】出现异常{}", e);
}
}
}
}

View File

@@ -312,7 +312,9 @@ public class CutConveyorTask extends AbstractAcsTask {
}
JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0);
if (data2.getString("move2").equals("1")) {
throw new BadRequestException("人工RGV有货需要尽快处理");
log.warn("人工RGV有货需要尽快处理");
jo.put("remark", "人工RGV有货需要尽快处理");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
}
JSONArray action_rows = new JSONArray();
JSONObject action_jo = new JSONObject();
@@ -323,7 +325,10 @@ public class CutConveyorTask extends AbstractAcsTask {
action_rows.add(action_jo);
JSONObject action = wmsToAcsService.action(action_rows);
if (!action.getString("status").equals("200")) {
throw new BadRequestException("该区域人工RGV异常");
log.warn("该区域人工RGV异常!");
// throw new BadRequestException("该区域人工RGV异常");
jo.put("remark", "该区域人工RGV异常");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
}
}
jo.put("vehicle_code", jsonTask.getString("vehicle_code"));
@@ -511,6 +516,7 @@ public class CutConveyorTask extends AbstractAcsTask {
JSONObject jo = new JSONObject();
jo.put("point_code1", cachePoint.getPoint_code());
jo.put("point_code2", jsonTask.getString("point_code2"));
// 存放子卷号数据
jo.put("vehicle_code", cachePoint.getQzzno());
jo.put("product_area", cachePoint.getProduct_area());
// 子卷中转架下卷回库
@@ -626,6 +632,7 @@ public class CutConveyorTask extends AbstractAcsTask {
json.put("product_area", form.getString("product_area"));
json.put("vehicle_code", form.getString("vehicle_code"));
json.put("vehicle_code2", form.getString("vehicle_code2"));
json.put("remark", form.getString("remark"));
json.put("handle_class", THIS_CLASS);
json.put("create_id", currentUserId);
json.put("create_name", currentUsername);
@@ -639,6 +646,9 @@ public class CutConveyorTask extends AbstractAcsTask {
if (ObjectUtil.isNotEmpty(form.get("flag"))) {
json.put("request_param", form.getJSONObject("flag").toJSONString());
}
if (ObjectUtil.isNotEmpty(form.get("plans"))) {
json.put("request_param", form.getJSONObject("plans").toJSONString());
}
//根据类型获取对应的任务优先级
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", json.getString("task_type")).process().uniqueResult(0);
if (ObjectUtil.isEmpty(priority_jo)) {

View File

@@ -261,7 +261,8 @@ public class CutTrussTask extends AbstractAcsTask {
if (ObjectUtil.isEmpty(endCachePoint)) {
throw new BadRequestException("未查询到对应的输送线点位或中转点位!");
} else {
endCachePoint.setQzzno(jsonTask.getString("vehicle_code2"));
JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param"));
endCachePoint.setQzzno(requestParam.getJSONArray("cons").toJSONString());
endCachePoint.setPoint_status("04");
endCachePoint.setUpdate_optid(SecurityUtils.getCurrentUserId());
endCachePoint.setUpdate_optname(SecurityUtils.getCurrentNickName());
@@ -344,7 +345,18 @@ public class CutTrussTask extends AbstractAcsTask {
form.put("vehicle_code2", delivery_point.getString("vehicle_code"));
form.put("vehicle_code", jsonTask.getString("vehicle_code"));
form.put("task_type", "010401");
form.put("cons", cons);
if (cons.size() > 0) {
form.put("cons", cons);
} else {
// 看看requestParam是否有值
if (ObjectUtil.isNotEmpty(jsonTask.getString("request_param"))) {
JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param"));
if (ObjectUtil.isNotEmpty(requestParam.getJSONArray("cons"))) {
form.put("cons", requestParam.getJSONArray("cons").toJSONString());
form.put("vehicle_code", requestParam.getJSONArray("cons").toJSONString());
}
}
}
form.put("product_area", delivery_point.getString("product_area"));
cutConveyorTask.createTask(form);
} else {
@@ -354,8 +366,9 @@ public class CutTrussTask extends AbstractAcsTask {
throw new BadRequestException("未查询到对应的输送线点位!");
}
// 将数据存储到中转架
JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param"));
LambdaUpdateWrapper<Deliverycachepointivt> ulam = new LambdaUpdateWrapper<>();
ulam.set(Deliverycachepointivt::getQzzno, jsonTask.getString("vehicle_code"))
ulam.set(Deliverycachepointivt::getQzzno, requestParam.getJSONArray("cons").toJSONString())
.set(Deliverycachepointivt::getPoint_status, "04")
.set(Deliverycachepointivt::getUpdate_optid, SecurityUtils.getCurrentUserId())
.set(Deliverycachepointivt::getUpdate_optname, SecurityUtils.getCurrentNickName())
@@ -609,17 +622,11 @@ public class CutTrussTask extends AbstractAcsTask {
if (StrUtil.isEmpty(delivery_point.getString("vehicle_code"))) {
throw new BadRequestException("点位:" + delivery_point.getString("point_code") + "载具号为空!");
}
// 子卷号
IPdmBiSlittingproductionplanService planBean = SpringContextHolder.getBean(IPdmBiSlittingproductionplanService.class);
List<String> cons = new ArrayList<>();
if (ObjectUtil.isNotEmpty(jsonTask.getString("vehicle_code"))) {
List<PdmBiSlittingproductionplan> plans = planBean.getByQzzNo(jsonTask.getString("vehicle_code"));
cons = plans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList());
}
form.put("vehicle_code2", delivery_point.getString("vehicle_code"));
// 子卷号 (不能通过气胀轴编码获取)
form.put("vehicle_code", jsonTask.getString("vehicle_code"));
form.put("task_type", "010401");
form.put("cons", cons);
form.put("cons", jsonTask.getString("vehicle_code"));
form.put("product_area", delivery_point.getString("product_area"));
cutConveyorTask.createTask(form);
}

View File

@@ -9,7 +9,9 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.point.dao.SchBasePoint;
import org.nl.b_lms.sch.point.dao.StIvtShaftivt;
import org.nl.b_lms.sch.point.service.IschBasePointService;
import org.nl.b_lms.sch.point.service.IstIvtShaftivtService;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
@@ -149,6 +151,10 @@ public class PaperTrussTask extends AbstractAcsTask {
JSONObject rgv_jo = ivt_shaftivt.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0);
int have_qzz = rgv_jo.getIntValue("have_qzz");
rgv_jo.put("have_qzz", have_qzz + 1);
if (rgv_jo.getString("point_code").contains("RG_RGV")) {
// 人工RGV不需要记录
rgv_jo.put("have_qzz", 0);
}
ivt_shaftivt.update(rgv_jo);
// 判断是不是暂存架,需要清除库存
if (task_jo.getString("point_code1").contains("CPZC")) {
@@ -157,6 +163,8 @@ public class PaperTrussTask extends AbstractAcsTask {
cpzc_jo.put("qzz_size", "");
cpzc_jo.put("qzz_generation", "");
cpzc_jo.put("have_qzz", "0");
cpzc_jo.put("container_name1", "");
cpzc_jo.put("container_name2", "");
ivt_shaftivt.update(cpzc_jo);
}
}
@@ -186,6 +194,9 @@ public class PaperTrussTask extends AbstractAcsTask {
JSONObject jo2 = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + container_name2 + "' AND is_delete = '0'").uniqueResult(0);
cut_rows.add(jo2);
}
if (cut_rows.size() == 0) {
throw new BadRequestException("分切计划不能为空");
}
JSONObject in_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0);
String vehicle_code = in_jo.getString("vehicle_code");
JSONObject confirm_jo = new JSONObject();
@@ -201,6 +212,7 @@ public class PaperTrussTask extends AbstractAcsTask {
if ("010607".equals(task_type)) {
String point_code2 = task_jo.getString("point_code2");
JSONObject goal_point2 = ivt_shaftivt.query("point_code = '" + point_code2 + "'").uniqueResult(0);
String product_area = task_jo.getString("product_area");
if (ObjectUtil.isNotEmpty(goal_point2)) {
JSONObject request_param = task_jo.getJSONObject("request_param");
String temp = request_param.getString("temp");
@@ -219,18 +231,54 @@ public class PaperTrussTask extends AbstractAcsTask {
goal_point2.put("container_name1", container_name1);
goal_point2.put("container_name2", container_name2);
ivt_shaftivt.update(goal_point2);
// 判断是不是开启的/CPZC点位并且点位有托盘码是的话创建
if (RenUtils.isOpenTzArea(product_area) && point_code2.contains("CPZC")) {
// 判断对应区域的IN点是不是有托盘并且托盘是一样的位置
IschBasePointService pointService = SpringContextHolder.getBean(IschBasePointService.class);
PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class);
SchBasePoint inPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getProduct_area, product_area)
.eq(SchBasePoint::getPoint_type, "6")
.eq(SchBasePoint::getIs_used, "1")
.eq(SchBasePoint::getIs_delete, "0")
.like(SchBasePoint::getRegion_code, "-FQCR"));
if (ObjectUtil.isNotEmpty(inPoint)) {
if (ObjectUtil.isNotEmpty(inPoint.getVehicle_code())) {
// 判断载具是不是同区域
JSONObject vehicle_jo = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + inPoint.getVehicle_code() + "'").uniqueResult(0);
if (vehicle_jo.getString("point_location").equals(point_location)) {
// 创建任务到IN点的任务
JSONObject jo = new JSONObject();
jo.put("task_type", "010606");
jo.put("truss_type", "1");
jo.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
jo.put("point_code1", goal_point2.getString("point_code"));
jo.put("point_code2", inPoint.getPoint_code());
JSONObject requestParam = new JSONObject();
requestParam.put("container_name1", container_name1);
requestParam.put("container_name2", container_name2);
jo.put("request_param", requestParam);
jo.put("vehicle_code", container_name1);
jo.put("product_area", product_area);
jo.put("priority", "3");
paperTrussTask.createTask(jo);
}
}
}
}
}
}
// 放到暂存架子存放
if ("010610".equals(task_type)) {
String pointCode2 = taskObj.getString("point_code2");
JSONObject requestParam = taskObj.getJSONObject("request_param");
String pointCode2 = task_jo.getString("point_code2");
JSONObject requestParam = task_jo.getJSONObject("request_param");
log.info("此时暂存架子对应的点位:{}", pointCode2);
IstIvtShaftivtService shaftivtService = SpringContextHolder.getBean(IstIvtShaftivtService.class);
StIvtShaftivt one = shaftivtService.getOne(new LambdaQueryWrapper<StIvtShaftivt>().eq(StIvtShaftivt::getPoint_code, pointCode2));
// 设置2是为了标记这里是成品卷不是套好的轴
one.setHave_qzz("2");
one.setQzz_generation(requestParam.getString("have_generation"));
one.setContainer_name1(taskObj.getString("vehicle_code"));
one.setContainer_name1(task_jo.getString("vehicle_code"));
shaftivtService.updateById(one);
}
}
@@ -300,8 +348,14 @@ public class PaperTrussTask extends AbstractAcsTask {
json.put("create_id", currentUserId);
json.put("create_name", currentUsername);
json.put("create_time", DateUtil.now());
json.put("priority", "1");
if (ObjectUtil.isNotEmpty(form.getString("priority"))) {
json.put("priority", form.getString("priority"));
} else {
json.put("priority", "1");
}
json.put("acs_task_type", "9");
json.put("remark", form.getString("remark"));
json.put("response_param", form.getString("truss_type"));
json.put("request_param", form.getString("request_param"));
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);

View File

@@ -127,7 +127,11 @@ public class PaperTubeTask extends AbstractAcsTask {
JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '5' AND product_area = '" + product_area + "'").uniqueResult(0);
//判断是否存在未完成的成品下卷任务
JSONObject container_jo = WQLObject.getWQLObject("sch_base_task").query("task_type = '010605' AND product_area = '"+product_area+"' AND task_status < '07' AND is_delete = '0'").uniqueResult(0);
if ("0".equals(have_qzz) && "0".equals(rgv_jo.getString("have_qzz")) && ObjectUtil.isEmpty(container_jo)) {
if (("0".equals(have_qzz) && "0".equals(rgv_jo.getString("have_qzz")) && ObjectUtil.isEmpty(container_jo))
|| (ObjectUtil.isNotEmpty(container_jo) && (
container_jo.getString("point_code2").contains("RG_RGV")
|| container_jo.getString("point_code2").contains("CPZC")))) {
PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class);
// 创建桁架任务搬运一个符合的气涨轴
JSONObject jo = new JSONObject();

View File

@@ -225,7 +225,7 @@
OPTION 输入.end_time <> ""
ios.input_time <= 输入.end_time
ENDOPTION
limit 0,10000
limit 0,50000
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -405,7 +405,7 @@
ENDOPTION
GROUP BY sub.sale_order_name,spec,ios.iostorinv_id,dtl.iostorinvdtl_id
limit 0,10000
limit 0,50000
ENDSELECT
ENDQUERY
ENDIF
@@ -685,7 +685,7 @@
OPTION 输入.bill_status <> ""
dis.work_status <= 输入.bill_status
ENDOPTION
order by dis.box_no,dis.pcsn limit 0,10000
order by dis.box_no,dis.pcsn limit 0,50000
ENDSELECT
ENDQUERY
ENDIF