feat: 自动下发工单
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
package org.nl.config.mybatis;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.ibatis.logging.Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: lyd
|
||||||
|
* @Description:
|
||||||
|
* @Date: 2023/11/16
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class MyStdOutImpl implements Log {
|
||||||
|
public MyStdOutImpl(String clazz) {
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean isDebugEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTraceEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void error(String s, Throwable e) {
|
||||||
|
log.error(s);
|
||||||
|
e.printStackTrace(System.err);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void error(String s) {
|
||||||
|
log.error(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void debug(String s) {
|
||||||
|
log.debug(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trace(String s) {
|
||||||
|
log.trace(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void warn(String s) {
|
||||||
|
log.warn(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,15 +47,19 @@ public class AutoIssueWorkOrder {
|
|||||||
try {
|
try {
|
||||||
if (tryLock) {
|
if (tryLock) {
|
||||||
// 获取每台设备的第一条工单
|
// 获取每台设备的第一条工单
|
||||||
List<PdmBdWorkorder> workorderList = workorderService.getNeedCallMaterial();
|
List<PdmBdWorkorder> workorderList = workorderService.getNotIssueOrder();
|
||||||
// 查找该设备未生产的工单去下发
|
// 查找该设备未生产的工单去下发
|
||||||
workorderList.forEach(s -> {
|
workorderList.forEach(s -> {
|
||||||
// 判断是否有工单
|
// 判断是否有工单
|
||||||
List<PdmBdWorkorder> lists = workorderService.getTheDayProducedWorkOrderByDevice(s.getPoint_code());
|
List<PdmBdWorkorder> lists = workorderService.getTheDayProducedWorkOrderByDevice(s.getPoint_code());
|
||||||
if (lists.size() > 0) return;
|
if (lists.size() > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// 已生产就退出
|
// 已生产就退出
|
||||||
if (s.getWorkorder_status().equals(WorkOrderStatusEnum.PRODUCING.getCode())
|
if (s.getWorkorder_status().equals(WorkOrderStatusEnum.PRODUCING.getCode())
|
||||||
|| s.getWorkorder_code().equals(WorkOrderStatusEnum.ISSUED.getCode())) return;
|
|| s.getWorkorder_code().equals(WorkOrderStatusEnum.ISSUED.getCode())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
AcsWorkOrderVo acsWorkOrderVo = workorderService.toAcsWorkOrderById(s.getWorkorder_id());
|
AcsWorkOrderVo acsWorkOrderVo = workorderService.toAcsWorkOrderById(s.getWorkorder_id());
|
||||||
// 获取一个下发
|
// 获取一个下发
|
||||||
List<AcsWorkOrderVo> list = new CopyOnWriteArrayList<>();
|
List<AcsWorkOrderVo> list = new CopyOnWriteArrayList<>();
|
||||||
|
|||||||
@@ -509,6 +509,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
.append(baseMaterial.getMaterial_spec() + "~" + baseMaterial.getMaterial_model()).append("##")
|
.append(baseMaterial.getMaterial_spec() + "~" + baseMaterial.getMaterial_model()).append("##")
|
||||||
.append(baseMaterial.getMaterial_name()).append("##")
|
.append(baseMaterial.getMaterial_name()).append("##")
|
||||||
.append(custer.getCuster_name()).append("**");
|
.append(custer.getCuster_name()).append("**");
|
||||||
|
log.info("打印的唛头信息:{}", sb);
|
||||||
return ApplyTaskResponse.responseOk(requestNo, sb.toString());
|
return ApplyTaskResponse.responseOk(requestNo, sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,6 +541,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
bdWorkorder.setRealproducestart_date(DateUtil.now());
|
bdWorkorder.setRealproducestart_date(DateUtil.now());
|
||||||
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
|
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
|
||||||
workorderService.updateById(bdWorkorder);
|
workorderService.updateById(bdWorkorder);
|
||||||
|
log.info("人工排产确认:{}", bdWorkorder);
|
||||||
return BaseResponse.responseOk(requestNo);
|
return BaseResponse.responseOk(requestNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -566,6 +568,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
bdWorkorder.setQualified_qty(qualified_qty);
|
bdWorkorder.setQualified_qty(qualified_qty);
|
||||||
bdWorkorder.setUnqualified_qty(unqualified_qty);
|
bdWorkorder.setUnqualified_qty(unqualified_qty);
|
||||||
workorderService.updateById(bdWorkorder);
|
workorderService.updateById(bdWorkorder);
|
||||||
|
log.info("工单完成: {}", bdWorkorder);
|
||||||
try {
|
try {
|
||||||
// todo: 统计当前设备的不合格位置的数量作为不合格数,并上报给mes
|
// todo: 统计当前设备的不合格位置的数量作为不合格数,并上报给mes
|
||||||
wmsToMesService.reportPressUnusedMaterial(bdWorkorder);
|
wmsToMesService.reportPressUnusedMaterial(bdWorkorder);
|
||||||
|
|||||||
@@ -127,4 +127,10 @@ public interface IPdmBdWorkorderService extends IService<PdmBdWorkorder> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
AcsWorkOrderVo toAcsWorkOrderById(String workorderId);
|
AcsWorkOrderVo toAcsWorkOrderById(String workorderId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取未生产
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PdmBdWorkorder> getNotIssueOrder();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,4 +55,6 @@ public interface PdmBdWorkorderMapper extends BaseMapper<PdmBdWorkorder> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<PdmBdWorkorder> getNeedCallMaterial();
|
List<PdmBdWorkorder> getNeedCallMaterial();
|
||||||
|
|
||||||
|
List<PdmBdWorkorder> getNotIssueOrder();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
FROM
|
FROM
|
||||||
`pdm_bd_workorder` w
|
`pdm_bd_workorder` w
|
||||||
WHERE w.point_code = #{s}
|
WHERE w.point_code = #{s}
|
||||||
AND w.workorder_status != '5' AND w.workorder_status != '1'
|
AND w.workorder_status IN ('2', '3')
|
||||||
</select>
|
</select>
|
||||||
<select id="getNeedCallMaterial" resultType="org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder">
|
<select id="getNeedCallMaterial" resultType="org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder">
|
||||||
SELECT ranked.*
|
SELECT ranked.*
|
||||||
@@ -140,4 +140,18 @@
|
|||||||
) AS ranked
|
) AS ranked
|
||||||
WHERE row_num = 1
|
WHERE row_num = 1
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getNotIssueOrder" resultType="org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder">
|
||||||
|
SELECT ranked.*
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
w.*,
|
||||||
|
ROW_NUMBER() OVER (PARTITION BY w.point_code ORDER BY w.workorder_status DESC, w.planproducestart_date) AS row_num
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
WHERE w.produce_date = CURDATE() AND w.region_code = 'YZ'
|
||||||
|
AND w.workorder_status = '1'
|
||||||
|
ORDER BY w.workorder_status DESC, w.planproducestart_date
|
||||||
|
) AS ranked
|
||||||
|
WHERE row_num = 1
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
|||||||
}
|
}
|
||||||
// 修改工单数据
|
// 修改工单数据
|
||||||
pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
|
pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
|
||||||
TaskUtils.setWorkOrderUpdateByAcs(pdmBdWorkorder);
|
TaskUtils.setWorkOrderUpdateByPC(pdmBdWorkorder);
|
||||||
pdmBdWorkorderMapper.updateById(pdmBdWorkorder);
|
pdmBdWorkorderMapper.updateById(pdmBdWorkorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,4 +330,9 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
|||||||
public AcsWorkOrderVo toAcsWorkOrderById(String workorderId) {
|
public AcsWorkOrderVo toAcsWorkOrderById(String workorderId) {
|
||||||
return pdmBdWorkorderMapper.toAcsWorkOrderById(workorderId);
|
return pdmBdWorkorderMapper.toAcsWorkOrderById(workorderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PdmBdWorkorder> getNotIssueOrder() {
|
||||||
|
return pdmBdWorkorderMapper.getNotIssueOrder();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,4 +67,9 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<SchBasePoint> getAllUnlockAbnormalPoints();
|
List<SchBasePoint> getAllUnlockAbnormalPoints();
|
||||||
|
/**
|
||||||
|
* 行锁获取对应点位
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
SchBasePoint selectByIdLock(String id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,4 +19,11 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
|||||||
void batchChangeUsed(List<String> pointCodes, Boolean used);
|
void batchChangeUsed(List<String> pointCodes, Boolean used);
|
||||||
|
|
||||||
List<SchBasePoint> getAllUnlockAbnormalPoints();
|
List<SchBasePoint> getAllUnlockAbnormalPoints();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 行锁获取id的点位
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
SchBasePoint selectByIdLock(String id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,12 @@
|
|||||||
LEFT JOIN sch_base_task t ON t.task_code = p.ing_task_code
|
LEFT JOIN sch_base_task t ON t.task_code = p.ing_task_code
|
||||||
WHERE p.ing_task_code IS NOT NULL AND p.ing_task_code != '' AND (t.task_status = '5' OR t.task_status = '6')
|
WHERE p.ing_task_code IS NOT NULL AND p.ing_task_code != '' AND (t.task_status = '5' OR t.task_status = '6')
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectByIdLock" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||||
|
SELECT
|
||||||
|
p.*
|
||||||
|
FROM
|
||||||
|
`sch_base_point` p
|
||||||
|
WHERE p.point_code = #{id}
|
||||||
|
FOR UPDATE
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -208,4 +208,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
|||||||
return pointMapper.getAllUnlockAbnormalPoints();
|
return pointMapper.getAllUnlockAbnormalPoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchBasePoint selectByIdLock(String id) {
|
||||||
|
return pointMapper.selectByIdLock(id);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,9 +220,6 @@ public class FJSLTask extends AbstractTask {
|
|||||||
SchBasePoint startPointObj = pointService.getById(startPoint);
|
SchBasePoint startPointObj = pointService.getById(startPoint);
|
||||||
SchBasePoint endPointObj = pointService.getById(endPoint);
|
SchBasePoint endPointObj = pointService.getById(endPoint);
|
||||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||||
// 终点解锁
|
|
||||||
endPointObj.setIng_task_code("");
|
|
||||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
|
||||||
// 记录库存并解锁
|
// 记录库存并解锁
|
||||||
endPointObj.setIng_task_code("");
|
endPointObj.setIng_task_code("");
|
||||||
endPointObj.setVehicle_code(vehicleCode);
|
endPointObj.setVehicle_code(vehicleCode);
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ public class YZQKTask extends AbstractTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
protected void updateStatus(String task_code, TaskStatus status) {
|
protected void updateStatus(String task_code, TaskStatus status) {
|
||||||
// 校验任务
|
// 校验任务
|
||||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||||
@@ -182,8 +183,8 @@ public class YZQKTask extends AbstractTask {
|
|||||||
// 获取参数
|
// 获取参数
|
||||||
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
String startPoint = taskObj.getPoint_code1(); // 获取起点
|
||||||
String endPoint = taskObj.getPoint_code2(); // 获取起点
|
String endPoint = taskObj.getPoint_code2(); // 获取起点
|
||||||
SchBasePoint startPointObj = pointService.getById(startPoint);
|
SchBasePoint startPointObj = pointService.selectByIdLock(startPoint);
|
||||||
SchBasePoint endPointObj = pointService.getById(endPoint);
|
SchBasePoint endPointObj = pointService.selectByIdLock(endPoint);
|
||||||
// 起点清空
|
// 起点清空
|
||||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -83,8 +83,10 @@ public class TaskUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void setWorkOrderUpdateByPC(PdmBdWorkorder pdmBdWorkorder) {
|
public static void setWorkOrderUpdateByPC(PdmBdWorkorder pdmBdWorkorder) {
|
||||||
pdmBdWorkorder.setUpdate_id(SecurityUtils.getCurrentUserId());
|
pdmBdWorkorder.setUpdate_id(ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId())
|
||||||
pdmBdWorkorder.setUpdate_name(SecurityUtils.getCurrentNickName());
|
? SecurityUtils.getCurrentUserId() : "");
|
||||||
|
pdmBdWorkorder.setUpdate_name(ObjectUtil.isNotEmpty(SecurityUtils.getCurrentNickName())
|
||||||
|
? SecurityUtils.getCurrentNickName() : "");
|
||||||
pdmBdWorkorder.setUpdate_time(DateUtil.now());
|
pdmBdWorkorder.setUpdate_time(DateUtil.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
</appender>
|
</appender>
|
||||||
<!--开发环境:打印控制台-->
|
<!--开发环境:打印控制台-->
|
||||||
<springProfile name="dev">
|
<springProfile name="dev">
|
||||||
<root level="INFO">
|
<root level="DEBUG">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="asyncLuceneAppender"/>
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
</root>
|
</root>
|
||||||
@@ -108,9 +108,12 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<!--生产环境:打印控制台和输出到文件-->
|
<!--生产环境:打印控制台和输出到文件-->
|
||||||
<springProfile name="prod">
|
<springProfile name="prod">
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<!-- <appender-ref ref="asyncFileAppender"/>-->
|
||||||
<appender-ref ref="asyncLuceneAppender"/>
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
</root>
|
</root>
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
|
</root>
|
||||||
<logger name="org.springframework" level="ERROR" additivity="false">
|
<logger name="org.springframework" level="ERROR" additivity="false">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
|
|||||||
Reference in New Issue
Block a user