This commit is contained in:
周俊杰
2024-04-18 10:04:23 +08:00
34 changed files with 1373 additions and 616 deletions

View File

@@ -11,6 +11,7 @@ import org.nl.acs.agv.AgvUtil;
import org.nl.acs.config.AcsConfig;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
import org.nl.acs.device_driver.lnsh.converor_barcode.ConveyorBarcodeDeviceDriver;
import org.nl.acs.device_driver.lnsh.lnsh_Laminating_machine.ItemProtocol;
import org.nl.acs.device_driver.lnsh.lnsh_Laminating_machine.LnshLaminatingMachineDeviceDriver;
import org.nl.acs.device_driver.lnsh.lnsh_fold_disc_site.LnshFoldDiscSiteDeviceDriver;
@@ -1274,6 +1275,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
if (ObjectUtil.isEmpty(device)) {
continue;
}
if (device.getDeviceDriver() instanceof ConveyorBarcodeDeviceDriver) {
ConveyorBarcodeDeviceDriver driver = (ConveyorBarcodeDeviceDriver) device.getDeviceDriver();
status.put("mode", driver.getMode());
status.put("error", driver.getError());
status.put("move", driver.getMove());
}
if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) {
LnshPalletizingManipulatorSiteDeviceDriver driver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver();
status.put("mode", driver.getMode());

View File

@@ -1,13 +0,0 @@
package org.nl.wms.cockpit.service.dao;
import lombok.Data;
/**
* @author Administrator
* @description 30天故障
*/
@Data
public class DeviceErrorVo {
private String deviceName;
private String errorNum;
}

View File

@@ -0,0 +1,17 @@
package org.nl.wms.cockpit.service.dao;
import lombok.Data;
/**
* @author Administrator
* 点位信息(对接位、货架)
*/
@Data
public class KlMaterialInfoVo {
private String pointStatus;
private String pointName;
private String pointCode;
private String materialWeight;
private String lastStandingTime;
private String materialCode;
}

View File

@@ -4,10 +4,10 @@ import lombok.Data;
/**
* @author Administrator
* 混碾机对接位
* 点位信息对接位货架
*/
@Data
public class MixingRelativeVo {
public class PointInfoVo {
private String pointStatus;
private String pointName;
private String pointCode;

View File

@@ -0,0 +1,13 @@
package org.nl.wms.cockpit.service.dao;
import lombok.Data;
/**
* @author Administrator
* @description 困料货架泥料库(吨)
*/
@Data
public class klInfoVo {
private String materialCode;
private String weight;
}

View File

@@ -7,9 +7,10 @@ import lombok.Getter;
@AllArgsConstructor
public enum ColorEnum {
GREY(0, "灰色"),
YELLOW(1, "黄色"),
GREEN(2, "绿色"),
RED(3, "红色"),
YELLOW(1, "黄色");
RED(3, "红色");
private final Integer index;
private final String colorName;

View File

@@ -8,13 +8,9 @@ import org.nl.config.thread.ThreadPoolExecutorUtil;
import org.nl.wms.cockpit.service.CockpitService;
import org.nl.wms.cockpit.service.dao.*;
import org.nl.wms.cockpit.service.enums.ColorEnum;
import org.nl.wms.cockpit.service.enums.DeviceEnum;
import org.nl.wms.cockpit.service.mapper.CockPitMapper;
import org.nl.wms.das.device.record.service.IDasDeviceErrorRecordService;
import org.nl.wms.das.device.record.service.dao.DasDeviceErrorRecord;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -37,9 +33,6 @@ public class CockpitServiceImpl implements CockpitService {
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IDasDeviceErrorRecordService dasDeviceErrorRecordService;
@Override
public ConcurrentHashMap<String, Object> pressedMonitor() {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
@@ -203,8 +196,8 @@ public class CockpitServiceImpl implements CockpitService {
// 遍历判断
for (int i = 0; i < data.size(); i++) {
JSONObject device = data.getJSONObject(i);
int status = ObjectUtil.isNotEmpty(device.getInteger("status"))
? device.getInteger("status")
int status = ObjectUtil.isNotEmpty(device.getString("device_status"))
? Integer.parseInt(device.getString("device_status"))
: 0;
if (status == 0) {
unProducedNum++;
@@ -236,14 +229,14 @@ public class CockpitServiceImpl implements CockpitService {
return null;
});
//30天故障top10
CompletableFuture<List<DeviceErrorVo>> errorCompletableFuture = CompletableFuture.supplyAsync(
() -> dasDeviceErrorRecordService.queryErrorVo(), pool);
errorCompletableFuture.thenAccept(result -> {
resultMap.put("deviceErrorList", result);
//困料货架泥料库(吨)
CompletableFuture<List<klInfoVo>> klInfoCompletableFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.queryKlInfoList(), pool);
klInfoCompletableFuture.thenAccept(result -> {
resultMap.put("klInfoList", result);
}).exceptionally((e) -> {
log.error("30天故障top10: {}", e.getMessage(), e);
resultMap.put("deviceErrorList", null);
log.error("困料货架泥料库(吨): {}", e.getMessage(), e);
resultMap.put("klInfoList", null);
return null;
});
@@ -263,7 +256,7 @@ public class CockpitServiceImpl implements CockpitService {
productCompletableFuture,
historyCompletableFuture,
deviceRunStatCompletableFuture,
errorCompletableFuture,
klInfoCompletableFuture,
errorRecordCompletableFuture);
CompletableFuture<ConcurrentHashMap<String, Object>> future
= allQuery.thenApply((result) -> resultMap).exceptionally((e) -> {
@@ -279,6 +272,24 @@ public class CockpitServiceImpl implements CockpitService {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
//压制上料位
CompletableFuture<JSONArray> yzslwPositionTask = CompletableFuture.supplyAsync(() -> {
List<String> points = cockPitMapper.selectYzslwPoint();
if (points.isEmpty()) {
return null;
}
JSONArray param = new JSONArray(Collections.singletonList(points));
AcsResponse deviceStatus = wmsToAcsService.getDeviceStatus(param);
return ObjectUtil.isNotEmpty(deviceStatus) ? deviceStatus.getData() : param;
}, pool);
yzslwPositionTask.thenAccept(result -> {
map.put("YzslwPositionList", result);
}).exceptionally((e) -> {
log.error("压制上料位情况显示: {}", e.getMessage(), e);
map.put("YzslwPositionList", e);
return null;
});
//压制码垛位情况显示
CompletableFuture<JSONArray> stackingPositionTask = CompletableFuture.supplyAsync(() -> {
List<String> points = cockPitMapper.selectYzPoint();
@@ -366,20 +377,8 @@ public class CockpitServiceImpl implements CockpitService {
map.put("MixMachineList", null);
return null;
});
// 困料货架的信息显示 TODO
CompletableFuture<JSONArray> trappedMaterialShelfTask = CompletableFuture.supplyAsync(() -> {
// return cockPitMapper.selectKlhwInfo();
return null;
}, pool);
trappedMaterialShelfTask.thenAccept(result -> {
map.put("TrappedMaterialShelfList", result);
}).exceptionally((e) -> {
log.error("困料货架 - 40 货位的信息显示: {}", e.getMessage(), e);
map.put("TrappedMaterialShelfList", null);
return null;
});
// 混碾机对接位
CompletableFuture<List<MixingRelativeVo>> mixBlankingTask = CompletableFuture.supplyAsync(() -> {
CompletableFuture<List<PointInfoVo>> mixBlankingTask = CompletableFuture.supplyAsync(() -> {
return cockPitMapper.selectMixingRelativeInfo();
}, pool);
mixBlankingTask.thenAccept(result -> {
@@ -389,6 +388,18 @@ public class CockpitServiceImpl implements CockpitService {
map.put("MixBlankingList", null);
return null;
});
// 困料货架的信息显示
CompletableFuture<List<KlMaterialInfoVo>> trappedMaterialShelfTask = CompletableFuture.supplyAsync(() -> {
return cockPitMapper.selectKlhwInfo();
}, pool);
trappedMaterialShelfTask.thenAccept(result -> {
map.put("TrappedMaterialShelfList", result);
}).exceptionally((e) -> {
log.error("困料货架货位的信息显示: {}", e.getMessage(), e);
map.put("TrappedMaterialShelfList", null);
return null;
});
//压制、分拣机械手
CompletableFuture<JSONArray> manipulatorInfoTask = CompletableFuture.supplyAsync(() -> {
List<String> jxsPoints = cockPitMapper.selectJxsPoints();
@@ -451,7 +462,7 @@ public class CockpitServiceImpl implements CockpitService {
});
// 出窑缓存货架
CompletableFuture<List<MixingRelativeVo>> outKilnHchjTask = CompletableFuture.supplyAsync(() -> {
CompletableFuture<List<PointInfoVo>> outKilnHchjTask = CompletableFuture.supplyAsync(() -> {
return cockPitMapper.selectHchjList();
}, pool);
outKilnHchjTask.thenAccept(result -> {
@@ -462,7 +473,7 @@ public class CockpitServiceImpl implements CockpitService {
return null;
});
// 人工分拣拆垛
CompletableFuture<List<MixingRelativeVo>> manualSortingTask = CompletableFuture.supplyAsync(() -> {
CompletableFuture<List<PointInfoVo>> manualSortingTask = CompletableFuture.supplyAsync(() -> {
return cockPitMapper.selecManualSortingList();
}, pool);
manualSortingTask.thenAccept(result -> {
@@ -473,6 +484,7 @@ public class CockpitServiceImpl implements CockpitService {
return null;
});
CompletableFuture<Void> allQuery = CompletableFuture.allOf(
yzslwPositionTask,
stackingPositionTask,
pressMachineTask,
trappedMaterialShelfTask,
@@ -510,30 +522,64 @@ public class CockpitServiceImpl implements CockpitService {
@Override
public List<InOutKilnVo> selectInOutKilnDetail() {
// List<String> points = new ArrayList<>();
// points.add("RYHCX01");
// points.add("CYHCX01");
// JSONArray pointsParam = new JSONArray(Collections.singletonList(points));
// AcsResponse response = wmsToAcsService.getDeviceStatus(pointsParam);
// JSONArray data = ObjectUtil.isNotEmpty(response) ? response.getData() : pointsParam;
//todo 确定每托盘数量
List<String> points = new ArrayList<>();
points.add("RYHCX01");
points.add("CYHCX01");
JSONArray pointsParam = new JSONArray(Collections.singletonList(points));
AcsResponse response = wmsToAcsService.getDeviceStatus(pointsParam);
JSONArray data = ObjectUtil.isNotEmpty(response) ? response.getData() : pointsParam;
List<InOutKilnVo> res = new ArrayList<>();
InOutKilnVo in = cockPitMapper.selectInKilnInfo();
in.setStat("2");
in.setPointName("入窑输送线");
in.setWorkTime("3.5");
in.setMaterialNum("25000");
InOutKilnVo out = cockPitMapper.selectOutKilnInfo();
if (null == out) {
out = new InOutKilnVo();
for (int i = 0; i < data.size(); i++) {
JSONObject object = data.getJSONObject(i);
if ("RYHCX01".equals(object.getString("device_code"))){
InOutKilnVo in = cockPitMapper.selectInKilnInfo();
if (null == in) {
in = new InOutKilnVo();
}
if ("0".equals(object.getString("error"))){
in.setStat("2");
}else {
in.setStat("1");
}
in.setPointName("入窑输送线");
// in.setWorkTime("3.5");
res.add(in);
}
if ("CYHCX01".equals(object.getString("device_code"))){
InOutKilnVo out = cockPitMapper.selectOutKilnInfo();
if (null == out) {
out = new InOutKilnVo();
}
if ("0".equals(object.getString("error"))){
out.setStat("2");
}else {
out.setStat("1");
}
out.setPointName("出窑输送线");
// out.setWorkTime("3.5");
// out.setMaterialNum("25000");
// out.setDeliveredMaterialNum("25000");
res.add(out);
}
}
out.setStat("2");
out.setPointName("出窑输送线");
out.setWorkTime("3.5");
out.setMaterialNum("25000");
out.setDeliveredMaterialNum("25000");
res.add(in);
res.add(out);
// //todo 确定每托盘数量
// List<InOutKilnVo> res = new ArrayList<>();
// InOutKilnVo in = cockPitMapper.selectInKilnInfo();
// in.setStat("2");
// in.setPointName("入窑输送线");
// in.setWorkTime("3.5");
// in.setMaterialNum("25000");
// InOutKilnVo out = cockPitMapper.selectOutKilnInfo();
// if (null == out) {
// out = new InOutKilnVo();
// }
// out.setStat("2");
// out.setPointName("出窑输送线");
// out.setWorkTime("3.5");
// out.setMaterialNum("25000");
// out.setDeliveredMaterialNum("25000");
// res.add(in);
// res.add(out);
return res;
}

View File

@@ -46,13 +46,19 @@ public interface CockPitMapper {
List<String> selectHnjPoints();
List<MixingRelativeVo> selectMixingRelativeInfo();
List<PointInfoVo> selectMixingRelativeInfo();
List<String> selectJxsPoints();
List<ErrorRecordVo> queryRecord();
List<MixingRelativeVo> selectHchjList();
List<PointInfoVo> selectHchjList();
List<MixingRelativeVo> selecManualSortingList();
List<PointInfoVo> selecManualSortingList();
List<klInfoVo> queryKlInfoList();
List<KlMaterialInfoVo> selectKlhwInfo();
List<String> selectYzslwPoint();
}

View File

@@ -122,28 +122,28 @@
</select>
<select id="getMixingList" resultType="org.nl.wms.cockpit.service.dao.MixingVo">
SELECT m.material_name AS materialName,
SUM(w.plan_qty) AS planQty,
SUM(w.real_qty) AS realQty
SELECT m.material_code AS materialName,
SUM(w.plan_weight) AS planQty,
SUM(w.real_weight) AS realQty
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON m.material_id = w.material_id
WHERE w.region_code = 'HN'
AND w.workorder_status='3'
GROUP BY m.material_name
order by m.material_name
AND w.workorder_status='3'
GROUP BY m.material_code
order by m.material_code
</select>
<select id="getPressWorkerOrder" resultType="org.nl.wms.cockpit.service.dao.PressProductVo">
SELECT m.material_name as materialName,
SUM(w.plan_qty) as requiredNum,
SUM(w.real_qty) as suppressedNum,
SUM(CASE WHEN w.workorder_status = '5' THEN w.real_qty ELSE 0 END) AS finishedNum
SELECT m.material_code as materialName,
SUM(w.plan_qty) as requiredNum,
SUM(w.real_qty) as suppressedNum,
SUM(w.real_qty) AS finishedNum
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON w.material_id = m.material_id
WHERE w.region_code = 'YZ'
AND w.workorder_status='3'
group by m.material_name
order by m.material_name
AND w.workorder_status = '3'
group by m.material_code
order by m.material_code
</select>
<select id="getHistoryList" resultType="org.nl.wms.cockpit.service.dao.HistoryVo">
@@ -156,6 +156,7 @@
produceDate
ORDER BY
produceDate DESC
limit 7
</select>
<select id="selectAllDevice" resultType="java.lang.String">
@@ -171,7 +172,8 @@
from sch_base_task
WHERE config_code = 'YZMLTask'
and task_status = '5'
and DATE ( create_time ) = CURDATE()) as deliveredPalletNum
and DATE ( create_time ) = CURDATE()) as deliveredPalletNum,
sum(sbv.material_qty) as materialNum
FROM sch_base_vehiclematerialgroup sbv
left join sch_base_point p
on p.vehicle_code = sbv.vehicle_code
@@ -188,7 +190,8 @@
from sch_base_task
where config_code = 'CYHCXMLTask'
and task_status = '5'
and DATE ( create_time ) = CURDATE()) as palletNum
and DATE ( create_time ) = CURDATE()) as palletNum,
sum(material_qty) as materialNum
from sch_base_vehiclematerialgroup
where out_kiln_time is not null
and DATE ( create_time ) = CURDATE()
@@ -236,7 +239,7 @@
WHERE point_type = '1'
and region_code = 'HN'
</select>
<select id="selectMixingRelativeInfo" resultType="org.nl.wms.cockpit.service.dao.MixingRelativeVo">
<select id="selectMixingRelativeInfo" resultType="org.nl.wms.cockpit.service.dao.PointInfoVo">
SELECT p.point_code as pointCode,
p.point_name as pointName,
p.point_status as pointStatus
@@ -264,7 +267,7 @@
LEFT JOIN sch_base_point p ON r.device_code = p.point_code
ORDER BY r.record_time desc limit 100
</select>
<select id="selectHchjList" resultType="org.nl.wms.cockpit.service.dao.MixingRelativeVo">
<select id="selectHchjList" resultType="org.nl.wms.cockpit.service.dao.PointInfoVo">
SELECT p.point_code as pointCode,
p.point_name as pointName,
p.point_status as pointStatus
@@ -272,7 +275,7 @@
WHERE p.region_code ='HCHJ'
ORDER BY p.point_code
</select>
<select id="selecManualSortingList" resultType="org.nl.wms.cockpit.service.dao.MixingRelativeVo">
<select id="selecManualSortingList" resultType="org.nl.wms.cockpit.service.dao.PointInfoVo">
SELECT p.point_code as pointCode,
p.point_name as pointName,
p.point_status as pointStatus
@@ -280,5 +283,43 @@
WHERE p.region_code ='RGFJ'
ORDER BY p.point_code
</select>
<select id="queryKlInfoList" resultType="org.nl.wms.cockpit.service.dao.klInfoVo">
SELECT p.point_code as materialCode,
if(sum(v.material_weight) > 0.00, sum(v.material_weight), 0.00) as weight
FROM sch_base_point P
LEFT JOIN sch_base_vehiclematerialgroup v ON p.point_code = v.point_code
WHERE p.region_code IN ('KL')
AND p.point_code NOT LIKE ('CBJ%')
GROUP BY materialCode
ORDER BY weight desc
</select>
<select id="selectKlhwInfo" resultType="org.nl.wms.cockpit.service.dao.KlMaterialInfoVo">
SELECT p.point_code AS pointCode,
p.point_name AS pointName,
p.point_status AS pointStatus,
if(g.material_weight > 0.00, g.material_weight, 0.00) AS materialWeight,
IF
(
TIMESTAMPDIFF(
MINUTE, g.instorage_time,
NOW()) >= g.standing_time,
0,
g.standing_time - TIMESTAMPDIFF(
MINUTE, g.instorage_time,
NOW())
) AS lastStandingTime,
g.redundance_material_code as materialCode
FROM `sch_base_point` p
LEFT JOIN sch_base_vehiclematerialgroup g ON p.point_code = g.point_code
WHERE p.region_code = 'KL'
AND p.point_code NOT LIKE 'CBJ%'
ORDER BY p.point_code
</select>
<select id="selectYzslwPoint" resultType="java.lang.String">
SELECT point_code AS device_code
FROM `sch_base_point`
WHERE point_type in ('3','4')
and region_code = 'YZ'
</select>
</mapper>

View File

@@ -3,15 +3,10 @@ package org.nl.wms.das.device.record.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.cockpit.service.dao.DeviceErrorVo;
import org.nl.wms.cockpit.service.dao.ErrorRecordVo;
import org.nl.wms.das.device.check.service.dao.DasDeviceCheckRecord;
import org.nl.wms.cockpit.service.dao.klInfoVo;
import org.nl.wms.das.device.record.service.dao.DasDeviceErrorRecord;
import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @description 服务接口
@@ -28,6 +23,6 @@ public interface IDasDeviceErrorRecordService extends IService<DasDeviceErrorRec
*/
int create(DasDeviceErrorRecord entity);
List<DeviceErrorVo> queryErrorVo();
List<klInfoVo> queryErrorVo();
}

View File

@@ -1,7 +1,7 @@
package org.nl.wms.das.device.record.service.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.cockpit.service.dao.DeviceErrorVo;
import org.nl.wms.cockpit.service.dao.klInfoVo;
import org.nl.wms.das.device.record.service.dao.DasDeviceErrorRecord;
import java.util.List;
@@ -12,6 +12,6 @@ import java.util.List;
*/
public interface DasDeviceErrorRecordMapper extends BaseMapper<DasDeviceErrorRecord> {
List<DeviceErrorVo> queryErrorVo();
List<klInfoVo> queryErrorVo();
}

View File

@@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.das.device.record.service.dao.mapper.DasDeviceErrorRecordMapper">
<select id="queryErrorVo" resultType="org.nl.wms.cockpit.service.dao.DeviceErrorVo">
<select id="queryErrorVo" resultType="org.nl.wms.cockpit.service.dao.klInfoVo">
select if(LENGTH(p.point_name) <![CDATA[ > ]]> 0, p.point_name, r.device_code) as deviceName,
count(*) as errorNum
from das_device_error_record r

View File

@@ -8,18 +8,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.cockpit.service.dao.DeviceErrorVo;
import org.nl.wms.das.device.check.service.dao.DasDeviceCheckRecord;
import org.nl.wms.das.device.check.service.dao.mapper.DasDeviceCheckRecordMapper;
import org.nl.wms.cockpit.service.dao.klInfoVo;
import org.nl.wms.das.device.record.service.IDasDeviceErrorRecordService;
import org.nl.wms.das.device.record.service.dao.DasDeviceErrorRecord;
import org.nl.wms.das.device.record.service.dao.mapper.DasDeviceErrorRecordMapper;
import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
@@ -47,7 +43,7 @@ public class IDasDeviceErrorRecordServiceImpl extends ServiceImpl<DasDeviceError
}
@Override
public List<DeviceErrorVo> queryErrorVo() {
public List<klInfoVo> queryErrorVo() {
return dasDeviceCheckRecordMapper.queryErrorVo();
}

View File

@@ -61,6 +61,6 @@ public interface AcsToWmsService {
BaseResponse woodenPalletBinding(JSONObject param);
JSONObject errorDeviceRecord(JSONObject param);
/** 混碾机满料 任务不下发*/
BaseResponse mixFull(JSONObject param);
// /** 混碾机满料 任务不下发*/
// BaseResponse mixFull(JSONObject param);
}

View File

@@ -1065,26 +1065,26 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
@Override
public BaseResponse mixFull(JSONObject param) {
String requestNo = param.getString("requestNo");
String workorderCode = param.getString("order_code");
// String deviceCode = param.getString("device_code");
String weight = param.getString("weight");
if (ObjectUtil.isEmpty(workorderCode)) {
return BaseResponse.responseError(requestNo,"工单号不能为空");
}
if (ObjectUtil.isEmpty(weight)) {
return BaseResponse.responseError(requestNo,"生产重量不能为空");
}
PdmBdWorkorder workorder = workorderService.getByCode(workorderCode);
if (ObjectUtil.isEmpty(workorder)){
return BaseResponse.responseError(requestNo,"未查询到相应工单");
}
BigDecimal bigDecimal = BigDecimal.valueOf(Long.parseLong(weight));
workorder.setReal_weight(workorder.getReal_weight().add(bigDecimal));
workorder.setWorkorder_status(WorkOrderStatusEnum.STAGING.getCode());
workorderService.update(workorder);
return BaseResponse.responseOk(requestNo);
}
// @Override
// public BaseResponse mixFull(JSONObject param) {
// String requestNo = param.getString("requestNo");
// String workorderCode = param.getString("order_code");
//// String deviceCode = param.getString("device_code");
// String weight = param.getString("weight");
// if (ObjectUtil.isEmpty(workorderCode)) {
// return BaseResponse.responseError(requestNo,"工单号不能为空");
// }
// if (ObjectUtil.isEmpty(weight)) {
// return BaseResponse.responseError(requestNo,"生产重量不能为空");
// }
// PdmBdWorkorder workorder = workorderService.getByCode(workorderCode);
// if (ObjectUtil.isEmpty(workorder)){
// return BaseResponse.responseError(requestNo,"未查询到相应工单");
// }
// BigDecimal bigDecimal = BigDecimal.valueOf(Long.parseLong(weight));
// workorder.setReal_weight(workorder.getReal_weight().add(bigDecimal));
// workorder.setWorkorder_status(WorkOrderStatusEnum.STAGING.getCode());
// workorderService.update(workorder);
// return BaseResponse.responseOk(requestNo);
// }
}

View File

@@ -14,7 +14,6 @@ import org.nl.wms.pda.service.PdaService;
import org.nl.wms.pda.service.dao.dto.*;
import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -35,233 +34,8 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/pda")
@SaIgnore
public class PdaController {
@Autowired
private IDasDeviceCheckRecordService deviceCheckRecordService;
@Autowired
private IDasDeviceOperationRecordService deviceOperationRecordService;
@Autowired
private PdaService pdaService;
@Autowired
private IPdmBdWorkorderService workorderService;
@PostMapping("/deviceCheck/verify")
@Log("设备点检")
@ApiOperation("设备点检")
public ResponseEntity<Object> deviceCheck(@Validated @RequestBody DasDeviceCheckRecord entity){
return new ResponseEntity<>(deviceCheckRecordService.create(entity), HttpStatus.OK);
}
@PostMapping("/deviceCheck/deviceInfo")
@Log("设备下拉框数据")
@ApiOperation("设备下拉框数据")
public ResponseEntity<Object> deviceInfo(){
return new ResponseEntity<>(pdaService.getDeviceInfo(), HttpStatus.OK);
}
@PostMapping("/deviceCheck/deviceStatus")
@Log("设备状态下拉框数据")
@ApiOperation("设备状态下拉框数据")
public ResponseEntity<Object> deviceStatus(){
return new ResponseEntity<>(pdaService.getDeviceStatus(), HttpStatus.OK);
}
@PostMapping("/deviceSwitchover/deviceAction")
@Log("设备动作下拉框数据")
@ApiOperation("设备动作下拉框数据")
public ResponseEntity<Object> deviceAction(){
return new ResponseEntity<>(pdaService.deviceAction(), HttpStatus.OK);
}
@PostMapping("/deviceSwitchover/verify")
@Log("设备动作切换")
@ApiOperation("设备动作切换")
public ResponseEntity<Object> deviceSwitchover(@Validated @RequestBody DasDeviceOperationRecord entity){
return new ResponseEntity<>(deviceOperationRecordService.create(entity), HttpStatus.OK);
}
@PostMapping("/group/getPressCode")
@Log("获取压机编码")
@ApiOperation("获取压机编码")
public ResponseEntity<Object> getPressCode(){
return new ResponseEntity<>(pdaService.getDeviceInfo(), HttpStatus.OK);
}
@PostMapping("/group/getVehicleType")
@Log("获取载具类型")
@ApiOperation("获取载具类型")
public ResponseEntity<Object> getVehicleType(){
return new ResponseEntity<>(pdaService.getVehicleType(), HttpStatus.OK);
}
@PostMapping("/group/getPressWorkOrder")
@Log("获取工单编码")
@ApiOperation("获取工单编码")
@Deprecated
public ResponseEntity<Object> getPressWorkOrder(@RequestBody JSONObject param){
return new ResponseEntity<>(workorderService.getDeviceProductionTask(param.getString("point_code")), HttpStatus.OK);
}
@PostMapping("/group/manual")
@Log("人工组盘")
@ApiOperation("人工组盘")
public ResponseEntity<PdaResponseVo> manualDiskAssembly(@Validated @RequestBody ManualGroupDto entity){
return new ResponseEntity<>(pdaService.manualCreateByPda(entity), HttpStatus.OK);
}
@PostMapping("/move/getBlendingCode")
@Log("获取混碾机编码")
@ApiOperation("获取混碾机编码")
public ResponseEntity<Object> getBlendingCode(){
return new ResponseEntity<>(pdaService.getBlendingCode(), HttpStatus.OK);
}
@PostMapping("/move/sendTask")
@Log("生成混碾->压机任务")
@ApiOperation("生成混碾->压机任务")
public ResponseEntity<PdaResponseVo> sendTask(@Validated @RequestBody BlendingMoveDto blendingMoveDto){
return new ResponseEntity<>(pdaService.sendTask(blendingMoveDto), HttpStatus.OK);
}
@PostMapping("/forcedResting/show")
@Log("显示静置时长")
@ApiOperation("显示静置时长")
public ResponseEntity<Object> forcedRestingShow(){
return new ResponseEntity<>(pdaService.forcedRestingShow(), HttpStatus.OK);
}
@PostMapping("/forcedResting/submit")
@Log("强制静置")
@ApiOperation("强制静置")
public ResponseEntity<PdaResponseVo> forcedResting(@Validated @RequestBody ForcedRestingDto forcedRestingDto){
return new ResponseEntity<>(pdaService.forcedResting(forcedRestingDto), HttpStatus.OK);
}
@PostMapping("/manualSorting/orders")
@Log("人工分拣-显示工单")
@ApiOperation("人工分拣-显示工单")
public ResponseEntity<Object> manualOrders(){
return new ResponseEntity<>(pdaService.manualOrders(), HttpStatus.OK);
}
@PostMapping("/manualSorting/productionScheduling")
@Log("人工分拣-开工")
@ApiOperation("人工分拣-开工")
public ResponseEntity<PdaResponseVo> productionScheduling(@Validated @RequestBody ManualSortingDto manualSortingDto){
return new ResponseEntity<>(pdaService.productionScheduling(manualSortingDto), HttpStatus.OK);
}
@PostMapping("/manualSorting/productionComplete")
@Log("人工分拣-完工")
@ApiOperation("人工分拣-完工")
public ResponseEntity<PdaResponseVo> productionComplete(@Validated @RequestBody ManualSortingDto manualSortingDto){
return new ResponseEntity<>(pdaService.productionComplete(manualSortingDto), HttpStatus.OK);
}
@PostMapping("/manualSorting/emptyDiskIntoStorageTask")
@Log("人工分拣-空盘入库-动作")
@ApiOperation("人工分拣-空盘入库-动作")
public ResponseEntity<PdaResponseVo> emptyDiskIntoStorageTask(){
return new ResponseEntity<>(pdaService.emptyDiskIntoStorageTask(), HttpStatus.OK);
}
@PostMapping("/manualSorting/emptyDiskIntoStorageShow")
@Log("人工分拣-空盘入库-显示任务信息")
@ApiOperation("人工分拣-空盘入库-显示任务信息")
public ResponseEntity<Object> emptyDiskIntoStorageShow(){
return new ResponseEntity<>(pdaService.emptyDiskIntoStorageShow(), HttpStatus.OK);
}
@PostMapping("/manualSorting/callingWoodenPalletTask")
@Log("人工分拣-呼叫木托盘-动作")
@ApiOperation("人工分拣-呼叫木托盘-动作")
public ResponseEntity<PdaResponseVo> callingWoodenPalletTask(){
return new ResponseEntity<>(pdaService.callingWoodenPalletTask(), HttpStatus.OK);
}
@PostMapping("/manualSorting/callingWoodenPalletTaskShow")
@Log("人工分拣-呼叫木托盘-显示任务信息")
@ApiOperation("人工分拣-呼叫木托盘-显示任务信息")
public ResponseEntity<Object> callingWoodenPalletTaskShow(){
return new ResponseEntity<>(pdaService.callingWoodenPalletTaskShow(), HttpStatus.OK);
}
@PostMapping("/manualSorting/callingMaterialTask")
@Log("人工分拣-呼叫物料-动作")
@ApiOperation("人工分拣-呼叫物料-动作")
public ResponseEntity<PdaResponseVo> callingMaterialTask(){
return new ResponseEntity<>(pdaService.callingMaterialTask(), HttpStatus.OK);
}
@PostMapping("/manualSorting/callingMaterialTaskShow")
@Log("人工分拣-呼叫物料-显示任务信息")
@ApiOperation("人工分拣-呼叫物料-显示任务信息")
public ResponseEntity<Object> callingMaterialTaskShow(){
return new ResponseEntity<>(pdaService.callingMaterialTaskShow(), HttpStatus.OK);
}
@PostMapping("/manualSorting/callingResidueMaterialTask")
@Log("人工分拣-剩料入库-动作")
@ApiOperation("人工分拣-剩料入库-动作")
public ResponseEntity<PdaResponseVo> callingResidueMaterialTask(@Validated @RequestBody ManualResidueInDto manualResidueInDto){
return new ResponseEntity<>(pdaService.callingResidueMaterialTask(manualResidueInDto), HttpStatus.OK);
}
@PostMapping("/manualSorting/callingResidueMaterialTaskShow")
@Log("人工分拣-剩料入库-显示任务信息")
@ApiOperation("人工分拣-剩料入库-显示任务信息")
public ResponseEntity<Object> callingResidueMaterialTaskShow(){
return new ResponseEntity<>(pdaService.callingResidueMaterialTaskShow(), HttpStatus.OK);
}
@PostMapping("/manualSorting/packingTask")
@Log("人工分拣-包装入库-动作")
@ApiOperation("人工分拣-包装入库-动作")
public ResponseEntity<PdaResponseVo> packingTask(@Validated @RequestBody ManualResidueInDto manualResidueInDto){
return new ResponseEntity<>(pdaService.packingTask(manualResidueInDto), HttpStatus.OK);
}
@PostMapping("/manualSorting/packingTaskShow")
@Log("人工分拣-包装入库-显示任务信息")
@ApiOperation("人工分拣-包装入库-显示任务信息")
public ResponseEntity<Object> packingTaskShow(){
return new ResponseEntity<>(pdaService.packingTaskShow(), HttpStatus.OK);
}
@PostMapping("/manualSorting/bindingVehicle")
@Log("人工分拣-载具绑定")
@ApiOperation("人工分拣-载具绑定")
public ResponseEntity<PdaResponseVo> bindingVehicle(@Validated @RequestBody VehicleBindingDto vehicleBindingDto){
return new ResponseEntity<>(pdaService.bindingVehicle(vehicleBindingDto), HttpStatus.OK);
}
@PostMapping("/pressSendMaterial/pressTask")
@Log("压机送料-动作")
@ApiOperation("压机送料-动作")
public ResponseEntity<PdaResponseVo>pressTask(@Validated @RequestBody PressMoveDto pressMoveDto){
return new ResponseEntity<>(pdaService.pressTask(pressMoveDto), HttpStatus.OK);
}
@PostMapping("/pressSendMaterial/pressPointList")
@Log("压机送料-下拉框")
@ApiOperation("压机送料-下拉框")
public ResponseEntity<Object>pressPointList(){
return new ResponseEntity<>(pdaService.pressPointList(), HttpStatus.OK);
}
@PostMapping("/shelf/materialQuery")
@Log("货架盘点-物料查询")
@ApiOperation("货架盘点-物料查询")
public ResponseEntity<Object>materialQuery(@Validated @RequestBody CommonQueryDto commonQueryDto){
return new ResponseEntity<>(pdaService.materialQuery(commonQueryDto), HttpStatus.OK);
}
@PostMapping("/shelf/updateData")
@Log("货架盘点-物料查询")
@ApiOperation("货架盘点-物料查询")
public ResponseEntity<Object>updateData(@Validated @RequestBody ShelfSaveDto shelfSaveDto){
return new ResponseEntity<>(pdaService.updateData(shelfSaveDto), HttpStatus.OK);
}
//华弘手持接口
@PostMapping("/hnWorkOrder")
@Log("查询混碾工单")
@ApiOperation("查询混碾工单")
@@ -269,27 +43,62 @@ public class PdaController {
return new ResponseEntity<>(pdaService.getHnWorkOrder(), HttpStatus.OK);
}
// @PostMapping("/orderFinish")
// @Log("混碾工单完成")
// @ApiOperation("混碾工单完成")
// public ResponseEntity<Object> orderFinish(@RequestBody OrderFinishReq req) {
// return new ResponseEntity<>(pdaService.orderFinish(req), HttpStatus.OK);
// }
@PostMapping("/orderFinish")
@Log("混碾工单完成")
@ApiOperation("混碾工单完成")
public ResponseEntity<Object> orderFinish(@RequestBody OrderFinishReq req) {
return new ResponseEntity<>(pdaService.orderFinish(req), HttpStatus.OK);
@PostMapping("/unpackShelfInfo")
@Log("查询货架上未拆包料盅信息")
@ApiOperation("查询货架上未拆包料盅信息")
public ResponseEntity<Object> unpackShelfInfo() {
return new ResponseEntity<>(pdaService.unpackShelfInfo(), HttpStatus.OK);
}
@PostMapping("/hnmlTask")
@Log("拆包机料盅入库")
@ApiOperation("拆包机料盅入库")
public ResponseEntity<Object> hnmlTask(@RequestBody OrderFinishReq req) {
return new ResponseEntity<>(pdaService.hnmlTask(req), HttpStatus.OK);
@PostMapping("/getCbjPoint")
@Log("查询拆包机点位")
@ApiOperation("查询拆包机点位")
public ResponseEntity<Object> getCbjPoint() {
return new ResponseEntity<>(pdaService.getCbjPoint(), HttpStatus.OK);
}
@PostMapping("/hnqkTask")
@Log("拆包机叫空蛊")
@ApiOperation("拆包机叫空蛊")
public ResponseEntity<Object> hnqkTask() {
return new ResponseEntity<>(pdaService.hnqkTask(), HttpStatus.OK);
@PostMapping("/cbjqlTask")
@Log("拆包机缺料")
@ApiOperation("拆包机缺料")
public ResponseEntity<Object> cbjqlTask(@RequestBody TaskReq req) {
return new ResponseEntity<>(pdaService.cbjqlTask(req), HttpStatus.OK);
}
@PostMapping("/cbjmlTask")
@Log("拆包机下料位满料")
@ApiOperation("拆包机下料位满料")
public ResponseEntity<Object> cbjmlTask(@RequestBody TaskReq req) {
return new ResponseEntity<>(pdaService.cbjmlTask(req), HttpStatus.OK);
}
@PostMapping("/cbjqkTask")
@Log("拆包机下料位叫空蛊")
@ApiOperation("拆包机下料位叫空蛊")
public ResponseEntity<Object> cbjqkTask(@RequestBody TaskReq req) {
return new ResponseEntity<>(pdaService.cbjqkTask(req), HttpStatus.OK);
}
@PostMapping("/packShelfInfo")
@Log("查询货架上已拆包料盅信息")
@ApiOperation("查询货架上已拆包料盅信息")
public ResponseEntity<Object> packShelfInfo() {
return new ResponseEntity<>(pdaService.packShelfInfo(), HttpStatus.OK);
}
@PostMapping("/yzqlTask")
@Log("困料货架点对点到布料机上料位")
@ApiOperation("困料货架点对点到布料机上料位")
public ResponseEntity<Object> yzqlTask(@RequestBody TaskReq req) {
return new ResponseEntity<>(pdaService.yzqlTask(req), HttpStatus.OK);
}
@PostMapping("/yjslwPointList")
@Log("压机上料位下拉框")
@ApiOperation("压机上料位下拉框")
@@ -306,7 +115,7 @@ public class PdaController {
@PostMapping("/materialScrap")
@Log("物料报废")
@ApiOperation("物料报废")
public ResponseEntity<Object> materialScrap(@RequestBody OrderFinishReq req) {
public ResponseEntity<Object> materialScrap(@RequestBody TaskReq req) {
return new ResponseEntity<>(pdaService.materialScrap(req), HttpStatus.OK);
}

View File

@@ -67,15 +67,20 @@ public interface PdaService {
List<DropdownListVo> pressPointList();
PdaResponseVo orderFinish(OrderFinishReq req);
//查询货架上未拆包料盅信息
List<ShelfInfoVo> unpackShelfInfo();
PdaResponseVo hnmlTask(OrderFinishReq req);
PdaResponseVo cbjqlTask(TaskReq req);
PdaResponseVo hnqkTask();
PdaResponseVo cbjmlTask(TaskReq req);
PdaResponseVo cbjqkTask(TaskReq req);
PdaResponseVo yzqlTask(TaskReq req);
PdaResponseVo qzhhjTask(ForceBackStorageReq req);
PdaResponseVo materialScrap(OrderFinishReq req);
PdaResponseVo materialScrap(TaskReq req);
PdaResponseVo rgfjqlTask(FjReq req);
@@ -89,4 +94,7 @@ public interface PdaService {
List<DropdownListVo> getYjslwPointList();
List<DropdownListVo> getCbjPoint();
List<ShelfInfoVo> packShelfInfo();
}

View File

@@ -1,16 +1,14 @@
package org.nl.wms.pda.service.dao.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author sxp
*/
@Data
public class OrderFinishReq {
public class TaskReq {
private String orderCode;
private String startPoint;
private String endPoint;
private String barCode;
private String createTime;
}

View File

@@ -62,7 +62,6 @@ public interface PdaMapper {
/**
* 查询物料
* @param commonQueryDto
* @return
*/
List<MaterialInfoVo> materialQuery(CommonQueryDto commonQueryDto);
@@ -80,4 +79,10 @@ public interface PdaMapper {
List<DropdownListVo> getHchjPoint();
List<DropdownListVo> getYjslwPointList();
List<ShelfInfoVo> selectUnpackShelfInfo();
List<DropdownListVo> getCbjPointList();
List<ShelfInfoVo> selectPackShelfInfo();
}

View File

@@ -3,185 +3,198 @@
<mapper namespace="org.nl.wms.pda.service.dao.mapper.PdaMapper">
<select id="getDeviceInfo" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE p.region_code = 'YZ' AND p.point_type = '1' AND p.point_code = p.parent_point_code
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.region_code = 'YZ'
AND p.point_type = '1'
AND p.point_code = p.parent_point_code
</select>
<select id="getDictByCode" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
`value`,
label AS text
FROM
`sys_dict`
SELECT `value`,
label AS text
FROM `sys_dict`
WHERE `code` = #{code}
</select>
<select id="getDeviceInfos" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE p.region_code = #{device} AND p.point_type = #{type} AND is_used = TRUE
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.region_code = #{device}
AND p.point_type = #{type}
AND is_used = TRUE
</select>
<select id="findKLXPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
LEFT JOIN sch_base_task t ON t.point_code2 = p.point_code AND t.task_status IN ('2','3','4')
WHERE p.region_code = 'LZKLX' AND p.parent_point_code LIKE CONCAT('%', #{endPointCode}, '%') AND p.point_type = '5'
SELECT p.*
FROM `sch_base_point` p
LEFT JOIN sch_base_task t ON t.point_code2 = p.point_code AND t.task_status IN ('2', '3', '4')
WHERE p.region_code = 'LZKLX'
AND p.parent_point_code LIKE CONCAT('%', #{endPointCode}, '%')
AND p.point_type = '5'
AND t.task_code IS NULL
</select>
<select id="forcedRestingShow" resultType="org.nl.wms.pda.service.dao.vo.StandTimeShowVo">
SELECT
vg.group_id,
vg.point_code,
p2.point_name AS device_code,
vg.standing_time,
TIMESTAMPDIFF(MINUTE, NOW(), DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE)) AS timeDifferenceMinutes,
DATE_FORMAT(DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE), '%Y-%m-%d %H:%i:%s') AS estimatedCompletionTimeString
FROM
`sch_base_vehiclematerialgroup` vg
LEFT JOIN sch_base_point p1 ON p1.point_code = vg.point_code
LEFT JOIN sch_base_point p2 ON p2.point_code = p1.parent_point_code
WHERE vg.point_code IN (
SELECT p.point_code FROM sch_base_point p WHERE p.region_code = 'LZKLX' AND p.point_type = '3'
)
SELECT vg.group_id,
vg.point_code,
p2.point_name AS device_code,
vg.standing_time,
TIMESTAMPDIFF(MINUTE, NOW(),
DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE)) AS timeDifferenceMinutes,
DATE_FORMAT(DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE),
'%Y-%m-%d %H:%i:%s') AS estimatedCompletionTimeString
FROM `sch_base_vehiclematerialgroup` vg
LEFT JOIN sch_base_point p1 ON p1.point_code = vg.point_code
LEFT JOIN sch_base_point p2 ON p2.point_code = p1.parent_point_code
WHERE vg.point_code IN
(SELECT p.point_code FROM sch_base_point p WHERE p.region_code = 'LZKLX' AND p.point_type = '3')
AND vg.group_bind_material_status = '2'
</select>
<select id="getManualOrders" resultType="org.nl.wms.pda.service.dao.vo.ManualWorkOrderVo">
SELECT
pw.workorder_code,
mm.material_code,
mm.material_name,
CASE pw.workorder_status
WHEN '1' THEN '生产'
WHEN '3' THEN '生产中'
WHEN '4' THEN '暂停'
ELSE ''
END AS workorder_status,
pw.operator,
pw.create_name,
pw.plan_qty,
pw.real_qty
FROM
`pdm_bd_workorder` pw
LEFT JOIN md_base_material mm ON mm.material_id = pw.material_id
WHERE pw.region_code = 'FJ' AND pw.point_code LIKE 'RG%' AND pw.workorder_status IN ('1','3','4')
SELECT pw.workorder_code,
mm.material_code,
mm.material_name,
CASE pw.workorder_status
WHEN '1' THEN '未生产'
WHEN '3' THEN '生产'
WHEN '4' THEN '暂停'
ELSE ''
END AS workorder_status,
pw.operator,
pw.create_name,
pw.plan_qty,
pw.real_qty
FROM `pdm_bd_workorder` pw
LEFT JOIN md_base_material mm ON mm.material_id = pw.material_id
WHERE pw.region_code = 'FJ'
AND pw.point_code LIKE 'RG%'
AND pw.workorder_status IN ('1', '3', '4')
</select>
<select id="getRunningTaskByStart" resultType="org.nl.wms.pda.service.dao.vo.TaskShowVo">
SELECT
t.task_code,
p1.point_name AS point_name1,
p2.point_name AS point_name2,
p3.point_name AS point_name3,
p4.point_name AS point_name4,
CASE t.task_status
WHEN '1' THEN '创建'
WHEN '2' THEN '创建完成'
WHEN '3' THEN '下发'
WHEN '4' THEN '执行中'
ELSE '-'
END AS task_status,
t.remark
FROM
`sch_base_task` t
LEFT JOIN sch_base_point p1 ON p1.point_code = t.point_code1
LEFT JOIN sch_base_point p2 ON p2.point_code = t.point_code2
LEFT JOIN sch_base_point p3 ON p3.point_code = t.point_code3
LEFT JOIN sch_base_point p4 ON p4.point_code = t.point_code4
WHERE task_status IN ('1','2','3','4') AND t.point_code1 = #{point_code} AND t.config_code = #{task_config}
SELECT t.task_code,
p1.point_name AS point_name1,
p2.point_name AS point_name2,
p3.point_name AS point_name3,
p4.point_name AS point_name4,
CASE t.task_status
WHEN '1' THEN '创建'
WHEN '2' THEN '创建完成'
WHEN '3' THEN '下发'
WHEN '4' THEN '执行中'
ELSE '-'
END AS task_status,
t.remark
FROM `sch_base_task` t
LEFT JOIN sch_base_point p1 ON p1.point_code = t.point_code1
LEFT JOIN sch_base_point p2 ON p2.point_code = t.point_code2
LEFT JOIN sch_base_point p3 ON p3.point_code = t.point_code3
LEFT JOIN sch_base_point p4 ON p4.point_code = t.point_code4
WHERE task_status IN ('1', '2', '3', '4')
AND t.point_code1 = #{point_code}
AND t.config_code = #{task_config}
</select>
<select id="getRunningTaskByEnd" resultType="org.nl.wms.pda.service.dao.vo.TaskShowVo">
SELECT
t.task_code,
p1.point_name AS point_name1,
p2.point_name AS point_name2,
p3.point_name AS point_name3,
p4.point_name AS point_name4,
CASE t.task_status
WHEN '1' THEN '创建'
WHEN '2' THEN '创建完成'
WHEN '3' THEN '下发'
WHEN '4' THEN '执行中'
ELSE '-'
END AS task_status,
t.remark
FROM
`sch_base_task` t
LEFT JOIN sch_base_point p1 ON p1.point_code = t.point_code1
LEFT JOIN sch_base_point p2 ON p2.point_code = t.point_code2
LEFT JOIN sch_base_point p3 ON p3.point_code = t.point_code3
LEFT JOIN sch_base_point p4 ON p4.point_code = t.point_code4
WHERE task_status IN ('1','2','3','4') AND t.point_code2 = #{point_code} AND t.config_code = #{task_config}
SELECT t.task_code,
p1.point_name AS point_name1,
p2.point_name AS point_name2,
p3.point_name AS point_name3,
p4.point_name AS point_name4,
CASE t.task_status
WHEN '1' THEN '创建'
WHEN '2' THEN '创建完成'
WHEN '3' THEN '下发'
WHEN '4' THEN '执行中'
ELSE '-'
END AS task_status,
t.remark
FROM `sch_base_task` t
LEFT JOIN sch_base_point p1 ON p1.point_code = t.point_code1
LEFT JOIN sch_base_point p2 ON p2.point_code = t.point_code2
LEFT JOIN sch_base_point p3 ON p3.point_code = t.point_code3
LEFT JOIN sch_base_point p4 ON p4.point_code = t.point_code4
WHERE task_status IN ('1', '2', '3', '4')
AND t.point_code2 = #{point_code}
AND t.config_code = #{task_config}
</select>
<select id="getAllPoint" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE
p.is_used = TRUE
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.is_used = TRUE
ORDER BY p.point_code
</select>
<select id="materialQuery" resultType="org.nl.wms.pda.service.dao.vo.MaterialInfoVo">
SELECT
mm.material_id,
mm.material_code,
mm.material_name,
mm.material_spec,
mm.material_model
FROM
`md_base_material` mm
WHERE mm.material_code LIKE '%${material_code}%' OR mm.material_name LIKE '%${material_code}%'
SELECT mm.material_id,
mm.material_code,
mm.material_name,
mm.material_spec,
mm.material_model
FROM `md_base_material` mm
WHERE mm.material_code LIKE '%${material_code}%'
OR mm.material_name LIKE '%${material_code}%'
</select>
<select id="getAllPressPoint" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE
p.region_code = 'YZ'
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.region_code = 'YZ'
AND p.point_type = '2'
</select>
<select id="getHnWorkOrder" resultType="org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder">
select *
from pdm_bd_workorder
where region_code = 'HN'
and is_delete='0'
and is_delete = '0'
</select>
<select id="getRgfjPoint" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE
p.region_code = 'RGFJ'
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.region_code = 'RGFJ'
</select>
<select id="getHchjPoint" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE
p.region_code = 'HCHJ'
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.region_code = 'HCHJ'
</select>
<select id="getYjslwPointList" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
SELECT
p.point_code AS `value`,
p.point_name AS text
FROM
`sch_base_point` p
WHERE
p.region_code = 'YZ'
AND p.point_type in ('3','4')
SELECT p.point_code AS `value`,
p.point_name AS text
FROM `sch_base_point` p
WHERE p.region_code = 'YZ'
AND p.point_type in ('3', '4')
</select>
<select id="selectUnpackShelfInfo" resultType="org.nl.wms.pda.service.dao.vo.ShelfInfoVo">
select p.point_code as pointCode, m.material_code as materialCode, g.instorage_time as instorageTime
from sch_base_point p
left join sch_base_vehiclematerialgroup g on p.point_code = g.point_code
left join md_base_material m on g.material_id = m.material_id
where p.region_code = 'KL'
and p.is_used = '1'
and p.point_status = '3'
and p.point_code not like 'CBJ%'
and g.unpack = '0'
order by g.point_code
</select>
<select id="getCbjPointList" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
select point_code as value, point_name as text
from sch_base_point
where region_code = 'KL'
and is_used = '1'
and point_code like 'CBJ%'
</select>
<select id="selectPackShelfInfo" resultType="org.nl.wms.pda.service.dao.vo.ShelfInfoVo">
select p.point_code as pointCode, m.material_code as materialCode, g.instorage_time as instorageTime
from sch_base_point p
left join sch_base_vehiclematerialgroup g on p.point_code = g.point_code
left join md_base_material m on g.material_id = m.material_id
where p.region_code = 'KL'
and p.is_used = '1'
and p.point_status = '3'
and p.point_code not like 'CBJ%'
and g.unpack = '1'
order by g.point_code
</select>
</mapper>

View File

@@ -0,0 +1,14 @@
package org.nl.wms.pda.service.dao.vo;
import lombok.Data;
/**
* @author sxp
* @Description: 困料货架信息
*/
@Data
public class ShelfInfoVo {
private String pointCode;
private String materialCode;
private String instorageTime;
}

View File

@@ -5,8 +5,6 @@ import cn.hutool.core.util.IdUtil;
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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.nl.common.exception.BadRequestException;
@@ -14,7 +12,6 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.ext.acs.service.dto.to.acs.DeviceInfoDto;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.pda.service.PdaService;
@@ -41,7 +38,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@@ -395,51 +391,88 @@ public class PdaServiceImpl implements PdaService {
}
@Override
public PdaResponseVo orderFinish(OrderFinishReq req) {
if (StringUtils.isEmpty(req.getOrderCode())) {
throw new BadRequestException("工单不能为空");
public List<ShelfInfoVo> unpackShelfInfo() {
return pdaMapper.selectUnpackShelfInfo();
}
// @Override
// public PdaResponseVo orderFinish(TaskReq req) {
// if (StringUtils.isEmpty(req.getOrderCode())) {
// throw new BadRequestException("工单不能为空");
// }
// PdmBdWorkorder bdWorkorder = workorderService.getByCode(req.getOrderCode());
// if (bdWorkorder == null) {
// throw new BadRequestException("未找到对应工单");
// }
// if (!WorkOrderStatusEnum.STAGING.getCode().equals(bdWorkorder.getWorkorder_status())){
// throw new BadRequestException("只能选择暂存中的工单");
// }
// bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode());
// bdWorkorder.setRealproduceend_date(DateUtil.now());
// TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
// // 统计合不合格数量到工单字段中
// workorderService.updateById(bdWorkorder);
// return PdaResponseVo.pdaResultOk("工单完成");
// }
@Override
public PdaResponseVo cbjqlTask(TaskReq req) {
if (StringUtils.isEmpty(req.getStartPoint())) {
throw new BadRequestException("货架点位不能为空");
}
PdmBdWorkorder bdWorkorder = workorderService.getByCode(req.getOrderCode());
if (bdWorkorder == null) {
throw new BadRequestException("未找到对应工单");
if (StringUtils.isEmpty(req.getEndPoint())) {
throw new BadRequestException("拆包机点位不能为空");
}
if (!WorkOrderStatusEnum.STAGING.getCode().equals(bdWorkorder.getWorkorder_status())){
throw new BadRequestException("只能选择暂存中的工单");
}
bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode());
bdWorkorder.setRealproduceend_date(DateUtil.now());
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
// 统计合不合格数量到工单字段中
workorderService.updateById(bdWorkorder);
return PdaResponseVo.pdaResultOk("工单完成");
JSONObject param = new JSONObject();
param.put("start_point", req.getStartPoint());
param.put("device_code", req.getEndPoint());
param.put("config_code","CBJQLTask");
taskService.apply(param);
return PdaResponseVo.pdaResultOk("拆包机缺料请求成功");
}
@Override
public PdaResponseVo hnmlTask(OrderFinishReq req) {
public PdaResponseVo cbjmlTask(TaskReq req) {
if (StringUtils.isEmpty(req.getOrderCode())) {
throw new BadRequestException("工单不能为空");
}
if (StringUtils.isEmpty(req.getStartPoint())) {
throw new BadRequestException("拆包机点位不能为空");
}
if (StringUtils.isEmpty(req.getBarCode())) {
throw new BadRequestException("条码不能为空");
}
//下发拆包机到货架的任务
JSONObject param = new JSONObject();
param.put("device_code", "CBJ01");
param.put("config_code","HNMLTask");
param.put("vehicle_code", req.getBarCode());
param.put("workorder_code",req.getOrderCode());
param.put("create_time",req.getCreateTime());
param.put("vehicle_code",req.getBarCode());
param.put("device_code", req.getStartPoint());
param.put("config_code","CBJMLTask");
taskService.apply(param);
return PdaResponseVo.pdaResultOk("满料入库请求成功");
return PdaResponseVo.pdaResultOk("拆包机下料位满料请求成功");
}
@Override
public PdaResponseVo hnqkTask() {
public PdaResponseVo cbjqkTask(TaskReq req) {
if (StringUtils.isEmpty(req.getEndPoint())) {
throw new BadRequestException("拆包机点位不能为空");
}
JSONObject param = new JSONObject();
param.put("device_code", "CBJ01");
param.put("config_code","HNQKTask");
param.put("device_code", req.getEndPoint());
param.put("config_code","CBJQKTask");
taskService.apply(param);
return PdaResponseVo.pdaResultOk("空蛊出库请求成功");
return PdaResponseVo.pdaResultOk("拆包机下料位叫空蛊请求成功");
}
@Override
public PdaResponseVo yzqlTask(TaskReq req) {
JSONObject param = new JSONObject();
//作为判断压制缺料点对点任务判断
param.put("task_type","YZQLPTP");
param.put("point_code1", req.getStartPoint());
param.put("device_code", req.getEndPoint());
param.put("config_code","YZQLTask");
taskService.apply(param);
return PdaResponseVo.pdaResultOk("布料机上料位请求成功");
}
@Override
@@ -453,7 +486,7 @@ public class PdaServiceImpl implements PdaService {
@Override
public PdaResponseVo materialScrap(OrderFinishReq req) {
public PdaResponseVo materialScrap(TaskReq req) {
if (StringUtils.isEmpty(req.getBarCode())) {
throw new BadRequestException("条码不能为空");
}
@@ -505,6 +538,16 @@ public class PdaServiceImpl implements PdaService {
return pdaMapper.getYjslwPointList();
}
@Override
public List<DropdownListVo> getCbjPoint() {
return pdaMapper.getCbjPointList();
}
@Override
public List<ShelfInfoVo> packShelfInfo() {
return pdaMapper.selectPackShelfInfo();
}
/**
* 保存组盘信息
* @param shelfSaveDto

View File

@@ -152,6 +152,8 @@ public class SchBaseVehiclematerialgroup implements Serializable {
private String out_kiln_time;
@ApiModelProperty(value = "入窑时间")
private String into_kiln_time;
@ApiModelProperty(value = "是否已拆包(0 否,1 是)")
private String unpack;
@TableField(exist = false)

View File

@@ -37,10 +37,10 @@ import java.util.Set;
import java.util.function.Consumer;
/**
* @description 服务实现
* @author lyd
* @date 2023-05-16
**/
* @author lyd
* @description 服务实现
* @date 2023-05-16
**/
@Slf4j
@Service
public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseVehiclematerialgroupMapper, SchBaseVehiclematerialgroup> implements ISchBaseVehiclematerialgroupService {
@@ -55,7 +55,7 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
private IMdBaseMaterialService materialService;
@Override
public IPage<SchBaseVehiclematerialgroup> queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){
public IPage<SchBaseVehiclematerialgroup> queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page) {
IPage<SchBaseVehiclematerialgroup> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = vehiclematerialgroupMapper.selectPageLeftJoin(pages, whereJson);
return pages;
@@ -67,7 +67,7 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
entity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setCreate_id(currentUserId);
entity.setCreate_name(nickName);
entity.setCreate_time(now);
@@ -155,7 +155,7 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
public SchBaseVehiclematerialgroup getByVehicleCode(String barCode) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, barCode)
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status,GroupBindMaterialStatusEnum.BOUND.getValue())
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue())
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);
return vehiclematerialgroupMapper.selectOne(lambda);
}
@@ -164,8 +164,13 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
public SchBaseVehiclematerialgroup getByPointCode(String pointCode) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getPoint_code, pointCode)
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);
return vehiclematerialgroupMapper.selectOne(lambda);
.eq(SchBaseVehiclematerialgroup::getIs_delete, false)
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.UNBOUND.getValue())
.orderByDesc(SchBaseVehiclematerialgroup::getUpdate_time);
List<SchBaseVehiclematerialgroup> schBaseVehiclematerialgroups = vehiclematerialgroupMapper.selectList(lambda);
if (schBaseVehiclematerialgroups.isEmpty()) {
return null;
}
return schBaseVehiclematerialgroups.get(0);
}
}

View File

@@ -106,7 +106,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
point.setCustomer(point1.getCustomer());
point.setMaterial_code(point1.getMaterial_code());
point.setMaterial_model(point1.getMaterial_model());
point.setMaterial_code(point1.getMaterial_code());
point.setMaterial_spec(point1.getMaterial_spec());
}
});

View File

@@ -0,0 +1,285 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.constant.ExceptionConstant;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.PointTypeConstant;
import org.nl.wms.sch.task_manage.constant.RegionConstant;
import org.nl.wms.sch.task_manage.enums.*;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.hn.mapper.HNMapper;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author sxp
* @desc 拆包机下料位满料入库
*/
@Component("CBJMLTask")
public class CBJMLTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "CBJMLTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Autowired
private IPdmBdWorkorderService workorderService;
@Autowired
private ISysNoticeService noticeService;
@Autowired
private IMdBaseMaterialService materialService;
@Autowired
private HNMapper hnMapper;
/**
* 具体业务
* 找点+下发-定时任务
*/
@Override
@Transactional(rollbackFor = Exception.class)
protected void create() {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
.collect(Collectors.toList());
String requestParam = task.getRequest_param();
JSONObject jsonObject = JSONObject.parseObject(requestParam);
// 找终点
SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
if (ObjectUtil.isEmpty(point)) {
task.setRemark(ExceptionConstant.NEED_POINT_NOT_FOUND);
taskService.updateById(task);
// 消息通知
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode());
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code2(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
task.setRemark("");
task.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
taskService.updateById(task);
// 锁住终点
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
}
/**
* 先判断是否特殊物料 分配货架位置或者布料机
*
* @param nextRegionStr
* @param requestParam
* @return
*/
private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject requestParam) {
// 放到困料货架
List<SchBasePoint> points = pointService.list(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getRegion_code, nextRegionStr.get(0))
// 当前执行的任务为空或者NULL有数据表示锁住
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
.eq(SchBasePoint::getIs_used, true)
.notLike(SchBasePoint::getPoint_code,"CBJ%")
.orderByAsc(SchBasePoint::getUpdate_time)
.orderByAsc(SchBasePoint::getIn_order_seq)
.orderByAsc(SchBasePoint::getPoint_code));
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}
@Override
@Transactional(rollbackFor = Exception.class)
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException(ExceptionConstant.THE_TASK_HAS_BEEN_COMPLETED);
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException(ExceptionConstant.THE_TASK_HAS_BEEN_COMPLETED);
}
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
TaskUtils.setUpdateByAcs(taskObj);
taskService.updateById(taskObj);
} else if (status.equals(TaskStatus.FINISHED)) {
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
} else if (status.equals(TaskStatus.CANCELED)) {
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
}
@Override
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
@Override
public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String endPoint = taskObj.getPoint_code2();
String startPoint = taskObj.getPoint_code1();
SchBasePoint endPointObj = pointService.getById(endPoint);
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getOne(
new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.eq(SchBaseVehiclematerialgroup::getGroup_id, taskObj.getGroup_id()));
Assert.notNull(groupEntity, ExceptionConstant.GROUP_INFORMATION_NOT_FOUND);
// 终点去除正在执行的任务, 设置载具编码、载具类型、载具数量
if (ObjectUtil.isNotEmpty(endPointObj)) {
endPointObj.setIng_task_code("");
endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode());
endPointObj.setVehicle_qty(1);
endPointObj.setVehicle_code(taskObj.getVehicle_code());
endPointObj.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.updateById(endPointObj);
// 更新组盘数据
groupEntity.setPoint_code(endPointObj.getPoint_code());
groupEntity.setPoint_name(endPointObj.getPoint_name());
groupEntity.setMove_way(groupEntity.getMove_way() + " -> " + endPointObj.getPoint_code());
groupEntity.setTask_code(taskObj.getTask_code());
//改为已拆包
groupEntity.setUnpack("1");
TaskUtils.setGroupUpdateByType(groupEntity, taskFinishedType);
vehiclematerialgroupService.updateById(groupEntity);
// 清空起点
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
PointUtils.clearPoint(startPointObj);
}
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String endPoint = taskObj.getPoint_code2();
SchBasePoint one = ObjectUtil.isNotEmpty(endPoint)
? pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, endPoint))
: null;
if (one != null) {
one.setIng_task_code("");
PointUtils.setUpdateByType(one, taskFinishedType);
pointService.updateById(one);
// 删掉组盘信息
vehiclematerialgroupService.removeById(taskObj.getGroup_id());
}
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
/**
* 组盘
*/
@Override
public String setGroupPlate(JSONObject param) {
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
String vehicleType = GeneralDefinition.MATERIAL_CUP;
String deviceCode = param.getString("device_code");
BigDecimal weight = param.getBigDecimal("weight");
// 获取工单
PdmBdWorkorder productionTask = workorderService.getByCode(param.getString("workorder_code"));
if (ObjectUtil.isEmpty(productionTask)) {
throw new BadRequestException("未查询到工单" + param.getString("workorder_code"));
}
SchBasePoint basePoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, deviceCode)
.eq(SchBasePoint::getIs_used, true));
if (ObjectUtil.isEmpty(basePoint)) {
throw new BadRequestException("点位[" + deviceCode + "]已被禁用");
}
if (vehicleCode == null || vehicleCode.equals(GeneralDefinition.NO)) {
throw new BadRequestException("载具编码不能为空");
}
// 找到相同组盘信息就直接返回id避免任务取消组盘信息还存在重复插入
vehiclematerialgroupService.unBindingSameVehicleMaterial(vehicleCode, vehicleType);
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
// 要把数据存到组盘表
groupEntity.setMaterial_id(productionTask.getMaterial_id());
groupEntity.setRedundance_material_code(productionTask.getRaw_material_code());
groupEntity.setCreate_id(GeneralDefinition.ACS_ID);
groupEntity.setCreate_name(GeneralDefinition.ACS_NAME);
groupEntity.setCreate_time(param.getString("create_time"));
groupEntity.setVehicle_code(vehicleCode);
groupEntity.setVehicle_type(vehicleType);
groupEntity.setSource_vehicle_code(basePoint.getPoint_code());
groupEntity.setPoint_code(basePoint.getPoint_code());
groupEntity.setPoint_name(basePoint.getPoint_name());
groupEntity.setMove_way(basePoint.getPoint_code());
groupEntity.setMix_times("1");
groupEntity.setInstorage_time(DateUtil.now());
groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd"));
groupEntity.setStanding_time(productionTask.getStanding_time());
groupEntity.setWorkorder_code(productionTask.getWorkorder_code());
groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(weight)
? weight
: BigDecimal.valueOf(0));
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue());
groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType());
groupEntity.setIs_delete(false);
vehiclematerialgroupService.save(groupEntity);
return groupEntity.getGroup_id();
}
}

View File

@@ -0,0 +1,217 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.constant.ExceptionConstant;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author: sxp
* @Description: 拆包机缺空:呼叫空载具,从困料货架上获取
*/
@Component("CBJQKTask")
public class CBJQKTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "CBJQKTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISysNoticeService noticeService;
/**
* 具体业务
*/
@Override
@Transactional(rollbackFor = Exception.class)
protected void create() {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task); // 修改修改者
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
.collect(Collectors.toList());
// 找起点
String extGroupData = task.getExt_group_data();
JSONObject jsonObject = JSONObject.parseObject(extGroupData);
SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(point)) {
task.setRemark(ExceptionConstant.NEED_POINT_NOT_FOUND);
taskService.update(task);
// 消息通知
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
taskService.updateById(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
}
/**
* 立即创建任务
* @param task
*/
@Override
protected void createCompletion(SchBaseTask task) {
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
TaskUtils.setUpdateByAcs(task); // 修改修改者
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
.collect(Collectors.toList());
// 找起点
String extGroupData = task.getExt_group_data();
JSONObject jsonObject = JSONObject.parseObject(extGroupData);
SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
if (ObjectUtil.isEmpty(point)) {
// 消息通知
noticeService.createNotice(ExceptionConstant.NEED_POINT_NOT_FOUND
, TASK_CONFIG_CODE + task.getPoint_code2()
, NoticeTypeEnum.WARN.getCode());
throw new BadRequestException(ExceptionConstant.NEED_POINT_NOT_FOUND);
}
// 设置终点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
TaskUtils.setUpdateByAcs(task);
taskService.save(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
/**
* 找起点, 通过料盅睏料货架找到空盅
*
* @param startRegionStr
* @param extGroupData
* @return
*/
private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject extGroupData) {
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.in(SchBasePoint::getRegion_code, startRegionStr)
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.notLike(SchBasePoint::getPoint_code,"CBJ%")
.orderByAsc(SchBasePoint::getUpdate_time)
.orderByAsc(SchBasePoint::getIn_order_seq);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}
@Override
@Transactional(rollbackFor = Exception.class)
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException(ExceptionConstant.THE_TASK_HAS_BEEN_COMPLETED);
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException(ExceptionConstant.THE_TASK_HAS_BEEN_CANCELLED);
}
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
TaskUtils.setUpdateByAcs(taskObj);
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) {
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
if (status.equals(TaskStatus.CANCELED)) {
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
}
@Override
public void forceFinish(String task_code) {
this.updateStatus(task_code, TaskStatus.FINISHED);
}
@Override
public void cancel(String task_code) {
this.updateStatus(task_code, TaskStatus.CANCELED);
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 获取起点
String endPoint = taskObj.getPoint_code2(); // 获取起点
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBasePoint endPointObj = pointService.getById(endPoint);
// 起点清空
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
PointUtils.clearPoint(startPointObj);
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
endPointObj.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
endPointObj.setVehicle_qty(1);
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.updateById(endPointObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1(); // 获取起点
SchBasePoint startPointObj = pointService.getById(startPoint);
// 起点解锁
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
pointService.updateById(startPointObj);
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

View File

@@ -0,0 +1,233 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
import cn.hutool.core.lang.Assert;
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.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.constant.ExceptionConstant;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author: sxp
* @Description: 拆包机满料位缺料任务 货架满料位 -> CBJML01
* @Date: 2024/4/2
*/
@Slf4j
@Component("CBJQLTask")
public class CBJQLTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "CBJQLTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Autowired
private IPdmBdWorkorderService workorderService;
@Autowired
private YZMapper yzMapper;
@Autowired
private ISysNoticeService noticeService;
@Autowired
IMdBaseMaterialService materialService;
@Override
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// 找起点
task.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
String requestParam = task.getRequest_param();
JSONObject extGroupData = JSONObject.parseObject(requestParam);
extGroupData.put("vehicle_type", task.getVehicle_type());
// SchBasePoint point = findStartPoint(startRegionStr, jsonObject);
SchBasePoint point = pointService.selectById(extGroupData.getString("start_point"));
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
taskService.update(task);
// 消息通知
continue;
}
// 设置起点并修改创建成功状态
task.setPoint_code1(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
task.setVehicle_code(point.getVehicle_code());
task.setGroup_id(point.getGroup_id());
task.setRemark("");
taskService.updateById(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
}
@Override
protected void createCompletion(SchBaseTask task) {
TaskUtils.setUpdateByAcs(task);
task.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
String requestParam = task.getRequest_param();
JSONObject extGroupData = JSONObject.parseObject(requestParam);
SchBasePoint point = pointService.selectById(extGroupData.getString("start_point"));
if (ObjectUtil.isEmpty(point)) {
// 消息通知
noticeService.createNotice(ExceptionConstant.NEED_POINT_NOT_FOUND,
TASK_CONFIG_CODE + task.getPoint_code2(), NoticeTypeEnum.WARN.getCode());
throw new BadRequestException(ExceptionConstant.NEED_POINT_NOT_FOUND);
}
task.setPoint_code1(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
task.setVehicle_code(point.getVehicle_code());
task.setGroup_id(point.getGroup_id());
task.setRemark("");
taskService.save(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
/**
* 找起点业务:查找困料货架的泥料是和压机工单的泥料相同的位置
* 如果是新料口就选择新料,如果是旧料口就选旧料
* @param startRegionStr : 区域列表
* @param requestParam : 外部参数,包含条件所需的信息
* @return 点位
* @description : JSONObject获取不到就是null
*/
private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject requestParam) {
// 获取当前工单
String workorderCode = requestParam.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
: null;
Assert.notNull(workOrder, "工单不能为空!");
MdBaseMaterial material = materialService.getById(workOrder.getMaterial_id());
// hint: redundance_material_code暂时存在着
List<SchBasePoint> points = yzMapper.findPointByYZQL(startRegionStr, material.getMaterial_code());
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
}
@Override
protected void updateStatus(String task_code, TaskStatus status) {
// 校验任务
SchBaseTask taskObj = taskService.getByCode(task_code);
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("该任务已完成!");
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
TaskUtils.setUpdateByAcs(taskObj);
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) {
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
if (status.equals(TaskStatus.CANCELED)) {
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
}
@Override
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
@Override
public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
String startPoint = taskObj.getPoint_code1();
SchBasePoint startPointObj = pointService.getById(startPoint);
// 除了解锁需要将组盘表中的物料绑定载具设置为已解绑
// 起点设置空位
// 任务上有载具编码 -> 获取当前载具编码的组盘信息
SchBaseVehiclematerialgroup groupObj = vehiclematerialgroupService.getById(taskObj.getGroup_id());
// 将载具设置为已解绑
groupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
TaskUtils.setGroupUpdateByType(groupObj, taskFinishedType);
vehiclematerialgroupService.update(groupObj);
// 释放点位,将点位设置为空位,清空数据
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
PointUtils.clearPoint(startPointObj);
}
// 任务修改成完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
String startPoint = taskObj.getPoint_code1();
SchBasePoint startPointObj = pointService.getById(startPoint);
// 起点解锁
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
pointService.updateById(startPointObj);
}
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

View File

@@ -21,11 +21,13 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.ExceptionConstant;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.PointTypeConstant;
import org.nl.wms.sch.task_manage.constant.RegionConstant;
import org.nl.wms.sch.task_manage.enums.*;
import org.nl.wms.sch.task_manage.task.TaskType;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.hn.mapper.HNMapper;
import org.nl.wms.util.PointUtils;
@@ -47,7 +49,7 @@ import java.util.stream.Collectors;
*/
@Component("HNMLTask")
public class HNMLTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "HNMLTask";
private static String TASK_CONFIG_CODE = "HNMLTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
@@ -157,6 +159,7 @@ public class HNMLTask extends AbstractTask {
.eq(SchBasePoint::getIng_task_code, ""))
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
.eq(SchBasePoint::getIs_used, true)
.notLike(SchBasePoint::getPoint_code,"CBJ%")
.orderByAsc(SchBasePoint::getUpdate_time)
.orderByAsc(SchBasePoint::getIn_order_seq)
.orderByAsc(SchBasePoint::getPoint_code));
@@ -274,11 +277,9 @@ public class HNMLTask extends AbstractTask {
String deviceCode = param.getString("device_code");
BigDecimal weight = param.getBigDecimal("weight");
// 泥料号
// String materialCode = param.getString("material_code");
PdmBdWorkorder productionTask = workorderService.getByCode(param.getString("workorder_code"));
String materialCode = param.getString("material_code");
// 获取工单
// PdmBdWorkorder productionTask = workorderService.getDeviceDockingProductionTask(deviceCode);
PdmBdWorkorder productionTask = workorderService.getDeviceDockingProductionTask(deviceCode);
SchBasePoint basePoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, deviceCode)
.eq(SchBasePoint::getIs_used, true));
@@ -294,10 +295,10 @@ public class HNMLTask extends AbstractTask {
groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
// 要把数据存到组盘表
groupEntity.setMaterial_id(productionTask.getMaterial_id());
groupEntity.setRedundance_material_code(productionTask.getRaw_material_code());
groupEntity.setRedundance_material_code(materialCode);
groupEntity.setCreate_id(GeneralDefinition.ACS_ID);
groupEntity.setCreate_name(GeneralDefinition.ACS_NAME);
groupEntity.setCreate_time(param.getString("create_time"));
groupEntity.setCreate_time(DateUtil.now());
groupEntity.setVehicle_code(vehicleCode);
groupEntity.setVehicle_type(vehicleType);
groupEntity.setSource_vehicle_code(basePoint.getPoint_code());
@@ -315,7 +316,9 @@ public class HNMLTask extends AbstractTask {
groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue());
groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType());
groupEntity.setIs_delete(false);
groupEntity.setUnpack("0");//未拆包
vehiclematerialgroupService.save(groupEntity);
return groupEntity.getGroup_id();
}
}

View File

@@ -133,6 +133,7 @@ public class HNQKTask extends AbstractTask {
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.notLike(SchBasePoint::getPoint_code,"CBJ%")
.orderByAsc(SchBasePoint::getUpdate_time)
.orderByAsc(SchBasePoint::getIn_order_seq);
List<SchBasePoint> schBasePoints = pointService.list(lam);

View File

@@ -173,6 +173,10 @@ public class YZQLTask extends AbstractTask {
* @description : JSONObject获取不到就是null
*/
private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject requestParam) {
String taskType = requestParam.getString("task_type");
if (!StringUtils.isEmpty(taskType) && "YZQLPTP".equals(taskType)) {
return pointService.selectById(requestParam.getString("point_code1"));
}
// 获取当前工单
String workorderCode = requestParam.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
@@ -232,11 +236,14 @@ public class YZQLTask extends AbstractTask {
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
String startPoint = taskObj.getPoint_code1();
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
// 除了解锁需要将组盘表中的物料绑定载具设置为已解绑
// 起点设置空位
// 任务上有载具编码 -> 获取当前载具编码的组盘信息
SchBaseVehiclematerialgroup groupObj = vehiclematerialgroupService.getById(taskObj.getGroup_id());
// 将载具设置为已解绑
// 将载具设置为已解绑 修改点位未
groupObj.setPoint_code(endPointObj.getPoint_code());
groupObj.setPoint_name(endPointObj.getPoint_name());
groupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
TaskUtils.setGroupUpdateByType(groupObj, taskFinishedType);
vehiclematerialgroupService.update(groupObj);

View File

@@ -138,6 +138,7 @@ public class YZSLWHKTask extends AbstractTask {
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.notLike(SchBasePoint::getPoint_code,"CBJ%")
.eq(SchBasePoint::getIs_used, true)
.orderByAsc(SchBasePoint::getIn_order_seq)
.orderByAsc(SchBasePoint::getPoint_code);
@@ -195,6 +196,7 @@ public class YZSLWHKTask extends AbstractTask {
PointUtils.clearPoint(startPoint);
String endPoint = taskObj.getPoint_code2(); // 获取终点
SchBasePoint endPointObj = pointService.getById(endPoint);
//查询该点位已解绑的组盘信息
SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getByPointCode(pointCode1);
if (null == groupInfo) {
throw new BadRequestException("未查询到上料位组盘信息");
@@ -203,7 +205,9 @@ public class YZSLWHKTask extends AbstractTask {
if (ObjectUtil.isNotEmpty(endPoint)) {
// SimpleDateFormat dateFormat = new SimpleDateFormat("yy-");
// String format = dateFormat.format(DateUtil.now());
groupInfo.setInstorage_time(DateUtil.now());
// groupInfo.setInstorage_time(DateUtil.now());
groupInfo.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue());
groupInfo.setSource_vehicle_code(pointCode1);
groupInfo.setPoint_code(endPoint);
groupInfo.setMove_way(groupInfo.getMove_way() + "->" + startPoint.getPoint_code()+"->"+ endPoint);
groupInfo.setPoint_name(endPointObj.getPoint_name());

View File

@@ -22,6 +22,7 @@
WHERE (p.ing_task_code = '' OR p.ing_task_code IS NULL) AND p.point_status = '3'
AND vg.group_id IS NOT NULL AND vg.redundance_material_code = #{materialCode}
AND TIMESTAMPDIFF(MINUTE, vg.instorage_time, NOW()) >= vg.standing_time
and vg.unpack='1'
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}

View File

@@ -72,28 +72,28 @@
>
开工
</el-button>
<el-button
slot="right"
class="filter-item"
type="success"
icon="el-icon-position"
size="mini"
:disabled="!(crud.selections[0]) || crud.selections[1]"
@click="hnmlTask(crud.selections[0])"
>
任务下发
</el-button>
<el-button
slot="right"
class="filter-item"
type="success"
icon="el-icon-position"
size="mini"
:disabled="!(crud.selections[0]) || crud.selections[1]"
@click="orderFinish(crud.selections[0])"
>
工单完成
</el-button>
<!-- <el-button-->
<!-- slot="right"-->
<!-- class="filter-item"-->
<!-- type="success"-->
<!-- icon="el-icon-position"-->
<!-- size="mini"-->
<!-- :disabled="!(crud.selections[0]) || crud.selections[1]"-->
<!-- @click="hnmlTask(crud.selections[0])"-->
<!-- >-->
<!-- 任务下发-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- slot="right"-->
<!-- class="filter-item"-->
<!-- type="success"-->
<!-- icon="el-icon-position"-->
<!-- size="mini"-->
<!-- :disabled="!(crud.selections[0]) || crud.selections[1]"-->
<!-- @click="orderFinish(crud.selections[0])"-->
<!-- >-->
<!-- 工单完成-->
<!-- </el-button>-->
<el-button
v-if="false"
slot="right"
@@ -716,22 +716,22 @@ export default {
this.dialogVisible = false
})
},
orderFinish(row){
this.fullscreenLoading = true
let param = {
orderCode:row.workorder_code
}
crudPdmBdWorkorder.orderFinish(param).then(res => {
this.crud.notify('工单完成', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
}).catch(() => {
this.fullscreenLoading = false
}).finally(() => {
this.fullscreenLoading = false
this.barcodeForm={}
this.dialogVisible = false
})
},
// orderFinish(row){
// this.fullscreenLoading = true
// let param = {
// orderCode:row.workorder_code
// }
// crudPdmBdWorkorder.orderFinish(param).then(res => {
// this.crud.notify('工单完成', CRUD.NOTIFICATION_TYPE.SUCCESS)
// this.crud.toQuery()
// }).catch(() => {
// this.fullscreenLoading = false
// }).finally(() => {
// this.fullscreenLoading = false
// this.barcodeForm={}
// this.dialogVisible = false
// })
// },
synchronize() {
this.fullscreenLoading = true
crudPdmBdWorkorder.orderSynchronize(this.crud.query).then(res => {