feat: 工单强制报工
This commit is contained in:
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
@@ -36,6 +37,7 @@ import java.util.Set;
|
|||||||
* @author generator
|
* @author generator
|
||||||
* @since 2022-12-19
|
* @since 2022-12-19
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCodeRule> implements ISysCodeRuleService {
|
public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCodeRule> implements ISysCodeRuleService {
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -126,6 +128,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCo
|
|||||||
if (flag.equals("1")) {
|
if (flag.equals("1")) {
|
||||||
codeRuleDetailMapper.updateById(detail);
|
codeRuleDetailMapper.updateById(detail);
|
||||||
}
|
}
|
||||||
|
log.info("更新成功:更新数据{}", detail);
|
||||||
}
|
}
|
||||||
return demo;
|
return demo;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,15 @@ import org.nl.wms.pdm.workorder.service.dao.vo.AcsWorkOrderVo;
|
|||||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||||
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
|
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
|
||||||
import org.nl.wms.util.TaskUtils;
|
import org.nl.wms.util.TaskUtils;
|
||||||
|
import org.redisson.api.RLock;
|
||||||
|
import org.redisson.api.RedissonClient;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: lyd
|
* @Author: lyd
|
||||||
@@ -34,42 +37,55 @@ public class AutoIssueWorkOrder {
|
|||||||
private WmsToAcsService wmsToAcsService;
|
private WmsToAcsService wmsToAcsService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysNoticeService noticeService;
|
private ISysNoticeService noticeService;
|
||||||
|
@Autowired
|
||||||
|
private RedissonClient redissonClient;
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void run() {
|
public void run() {
|
||||||
// 获取所有设备号
|
RLock lock = redissonClient.getLock(this.getClass().getName());
|
||||||
List<String> deviceCodes = workorderService.getTheDayUnProducedDevice();
|
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||||
// 查找该设备未生产的工单去下发
|
try {
|
||||||
deviceCodes.forEach(s -> {
|
if (tryLock) {
|
||||||
// 判断是否有工单
|
// 获取所有设备号
|
||||||
List<PdmBdWorkorder> lists = workorderService.getTheDayProducedWorkOrderByDevice(s);
|
List<String> deviceCodes = workorderService.getTheDayUnProducedDevice();
|
||||||
if (lists.size() > 0) return;
|
// 查找该设备未生产的工单去下发
|
||||||
List<AcsWorkOrderVo> acsWorkOrderVoList = workorderService.getAcsWorkOrderVos(s);
|
deviceCodes.forEach(s -> {
|
||||||
if (acsWorkOrderVoList.size() == 0) return;
|
// 判断是否有工单
|
||||||
AcsWorkOrderVo acsWorkOrderVo = acsWorkOrderVoList.get(0);
|
List<PdmBdWorkorder> lists = workorderService.getTheDayProducedWorkOrderByDevice(s);
|
||||||
// 获取一个下发
|
if (lists.size() > 0) return;
|
||||||
List<AcsWorkOrderVo> list = new CopyOnWriteArrayList<>();
|
List<AcsWorkOrderVo> acsWorkOrderVoList = workorderService.getAcsWorkOrderVos(s);
|
||||||
list.add(acsWorkOrderVo);
|
if (acsWorkOrderVoList.size() == 0) return;
|
||||||
AcsResponse resultForAcs;
|
AcsWorkOrderVo acsWorkOrderVo = acsWorkOrderVoList.get(0);
|
||||||
try {
|
// 获取一个下发
|
||||||
resultForAcs = wmsToAcsService.order(list);
|
List<AcsWorkOrderVo> list = new CopyOnWriteArrayList<>();
|
||||||
} catch (Exception e) {
|
list.add(acsWorkOrderVo);
|
||||||
log.error("工单下发异常:" + e.getMessage());
|
AcsResponse resultForAcs;
|
||||||
// 通知
|
try {
|
||||||
noticeService.createNotice("工单下发失败: " + e.getMessage(), "工单下发失败: "
|
resultForAcs = wmsToAcsService.order(list);
|
||||||
+ acsWorkOrderVo.getWorkorder_code(), NoticeTypeEnum.EXCEPTION.getCode());
|
} catch (Exception e) {
|
||||||
return;
|
log.error("工单下发异常:" + e.getMessage());
|
||||||
|
// 通知
|
||||||
|
noticeService.createNotice("工单下发失败: " + e.getMessage(), "工单下发失败: "
|
||||||
|
+ acsWorkOrderVo.getWorkorder_code(), NoticeTypeEnum.EXCEPTION.getCode());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (resultForAcs.getCode() != HttpStatus.HTTP_OK) {
|
||||||
|
// 不成功
|
||||||
|
noticeService.createNotice(resultForAcs.getMessage(), "工单下发失败: " + acsWorkOrderVo.getWorkorder_code(),
|
||||||
|
NoticeTypeEnum.EXCEPTION.getCode());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 修改工单数据
|
||||||
|
PdmBdWorkorder pdmBdWorkorder = workorderService.getByCode(acsWorkOrderVo.getWorkorder_code());
|
||||||
|
pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
|
||||||
|
TaskUtils.setWorkOrderUpdateByAcs(pdmBdWorkorder);
|
||||||
|
workorderService.updateById(pdmBdWorkorder);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (resultForAcs.getCode() != HttpStatus.HTTP_OK) {
|
} finally {
|
||||||
// 不成功
|
if (tryLock) {
|
||||||
noticeService.createNotice(resultForAcs.getMessage(), "工单下发失败: " + acsWorkOrderVo.getWorkorder_code(),
|
lock.unlock();
|
||||||
NoticeTypeEnum.EXCEPTION.getCode());
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// 修改工单数据
|
}
|
||||||
PdmBdWorkorder pdmBdWorkorder = workorderService.getByCode(acsWorkOrderVo.getWorkorder_code());
|
|
||||||
pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.ISSUED.getCode());
|
|
||||||
TaskUtils.setWorkOrderUpdateByAcs(pdmBdWorkorder);
|
|
||||||
workorderService.updateById(pdmBdWorkorder);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -558,8 +558,12 @@ 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);
|
||||||
// todo: 统计当前设备的不合格位置的数量作为不合格数,并上报给mes
|
try {
|
||||||
wmsToMesService.reportPressUnusedMaterial(bdWorkorder);
|
// todo: 统计当前设备的不合格位置的数量作为不合格数,并上报给mes
|
||||||
|
wmsToMesService.reportPressUnusedMaterial(bdWorkorder);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info("调用mes异常:{}", e.getMessage());
|
||||||
|
}
|
||||||
return BaseResponse.responseOk(requestNo);
|
return BaseResponse.responseOk(requestNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -112,4 +112,12 @@ public class PdmBdWorkorderController {
|
|||||||
wmsToMesService.synchronizeWorkOrderInfo();
|
wmsToMesService.synchronizeWorkOrderInfo();
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/forceFinish")
|
||||||
|
@Log("强制完工")
|
||||||
|
@ApiOperation("强制完工")
|
||||||
|
public ResponseEntity<Object> forceFinish(@RequestBody PdmBdWorkorder entity){
|
||||||
|
pdmBdWorkorderService.forceFinish(entity);
|
||||||
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,4 +108,10 @@ public interface IPdmBdWorkorderService extends IService<PdmBdWorkorder> {
|
|||||||
List<AcsWorkOrderVo> getAcsWorkOrderVos(String s);
|
List<AcsWorkOrderVo> getAcsWorkOrderVos(String s);
|
||||||
|
|
||||||
List<PdmBdWorkorder> getTheDayProducedWorkOrderByDevice(String s);
|
List<PdmBdWorkorder> getTheDayProducedWorkOrderByDevice(String s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 强制报工完成
|
||||||
|
* @param entity
|
||||||
|
*/
|
||||||
|
void forceFinish(PdmBdWorkorder entity);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,11 @@ import org.nl.common.exception.BadRequestException;
|
|||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.system.service.notice.ISysNoticeService;
|
import org.nl.system.service.notice.ISysNoticeService;
|
||||||
|
import org.nl.wms.database.brick.service.IMdBaseBrickInfoService;
|
||||||
import org.nl.wms.database.material.service.IMdBaseMaterialService;
|
import org.nl.wms.database.material.service.IMdBaseMaterialService;
|
||||||
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
|
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
|
||||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
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.wms.AcsResponse;
|
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||||
import org.nl.wms.ext.mes.service.WmsToMesService;
|
import org.nl.wms.ext.mes.service.WmsToMesService;
|
||||||
import org.nl.wms.ext.mes.service.dto.MesOrderInfo;
|
import org.nl.wms.ext.mes.service.dto.MesOrderInfo;
|
||||||
@@ -65,6 +67,8 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
|||||||
private IMdBaseMaterialService materialService;
|
private IMdBaseMaterialService materialService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
|
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
|
||||||
|
@Autowired
|
||||||
|
private IMdBaseBrickInfoService baseBrickInfoService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page) {
|
public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page) {
|
||||||
@@ -275,4 +279,38 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
|||||||
public List<PdmBdWorkorder> getTheDayProducedWorkOrderByDevice(String s) {
|
public List<PdmBdWorkorder> getTheDayProducedWorkOrderByDevice(String s) {
|
||||||
return pdmBdWorkorderMapper.getTheDayProducedWorkOrderByDevice(s);
|
return pdmBdWorkorderMapper.getTheDayProducedWorkOrderByDevice(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forceFinish(PdmBdWorkorder entity) {
|
||||||
|
String workorderCode = entity.getWorkorder_code();
|
||||||
|
if (workorderCode == null) {
|
||||||
|
throw new BadRequestException("工单标识不能为空!");
|
||||||
|
}
|
||||||
|
PdmBdWorkorder bdWorkorder = this.getByCode(workorderCode);
|
||||||
|
if (bdWorkorder == null) {
|
||||||
|
throw new BadRequestException("未找到工单号[" + workorderCode + "]的记录!");
|
||||||
|
}
|
||||||
|
if (bdWorkorder.getWorkorder_status().equals(WorkOrderStatusEnum.ISSUED.getCode())
|
||||||
|
|| bdWorkorder.getWorkorder_status().equals(WorkOrderStatusEnum.UNPRODUCED.getCode())) {
|
||||||
|
throw new BadRequestException("工单号[" + workorderCode + "]未生产不能完成工!");
|
||||||
|
}
|
||||||
|
if (bdWorkorder.getWorkorder_status().equals(WorkOrderStatusEnum.COMPLETE.getCode())) {
|
||||||
|
throw new BadRequestException("工单号[" + workorderCode + "]已完工,不能重复完工!");
|
||||||
|
}
|
||||||
|
bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode());
|
||||||
|
bdWorkorder.setRealproduceend_date(DateUtil.now());
|
||||||
|
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
|
||||||
|
// 统计合不合格数量到工单字段中
|
||||||
|
int qualified_qty = baseBrickInfoService.getCountQualifiedQty(bdWorkorder.getWorkorder_code());
|
||||||
|
int unqualified_qty = baseBrickInfoService.getCountUnqualifiedQty(bdWorkorder.getWorkorder_code());
|
||||||
|
bdWorkorder.setQualified_qty(qualified_qty);
|
||||||
|
bdWorkorder.setUnqualified_qty(unqualified_qty);
|
||||||
|
this.updateById(bdWorkorder);
|
||||||
|
try {
|
||||||
|
// todo: 统计当前设备的不合格位置的数量作为不合格数,并上报给mes
|
||||||
|
// wmsToMesService.reportPressUnusedMaterial(bdWorkorder);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info("调用mes异常:{}", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1256,3 +1256,4 @@ $
|
|||||||
反馈压机产出插入mes数据库失败
|
反馈压机产出插入mes数据库失败
|
||||||
插入压机检测失败
|
插入压机检测失败
|
||||||
包装数据
|
包装数据
|
||||||
|
更新成功:更新数据
|
||||||
|
|||||||
@@ -82,6 +82,17 @@
|
|||||||
>
|
>
|
||||||
同步
|
同步
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
type="danger"
|
||||||
|
icon="el-icon-position"
|
||||||
|
size="mini"
|
||||||
|
:disabled="!(crud.selections[0]) || crud.selections[1]"
|
||||||
|
@click="forceFinish(crud.selections[0])"
|
||||||
|
>
|
||||||
|
强制完工
|
||||||
|
</el-button>
|
||||||
</crudOperation>
|
</crudOperation>
|
||||||
<!--表单组件-->
|
<!--表单组件-->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
@@ -654,7 +665,7 @@ export default {
|
|||||||
submits(row) {
|
submits(row) {
|
||||||
this.fullscreenLoading = true
|
this.fullscreenLoading = true
|
||||||
crudPdmBdWorkorder.submits(row).then(res => {
|
crudPdmBdWorkorder.submits(row).then(res => {
|
||||||
this.crud.notify('下发成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
this.crud.notify('报工完成', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
this.crud.toQuery()
|
this.crud.toQuery()
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.fullscreenLoading = false
|
this.fullscreenLoading = false
|
||||||
@@ -672,6 +683,17 @@ export default {
|
|||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.fullscreenLoading = false
|
this.fullscreenLoading = false
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
forceFinish(row) {
|
||||||
|
this.fullscreenLoading = true
|
||||||
|
crudPdmBdWorkorder.forceFinish(row).then(res => {
|
||||||
|
this.crud.notify('下发成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
|
this.crud.toQuery()
|
||||||
|
}).catch(() => {
|
||||||
|
this.fullscreenLoading = false
|
||||||
|
}).finally(() => {
|
||||||
|
this.fullscreenLoading = false
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,13 @@ export function submits(param) {
|
|||||||
data: param
|
data: param
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export function forceFinish(param) {
|
||||||
|
return request({
|
||||||
|
url: 'api/pdmBdWorkorder/forceFinish',
|
||||||
|
method: 'post',
|
||||||
|
data: param
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function orderSynchronize(data) {
|
export function orderSynchronize(data) {
|
||||||
return request({
|
return request({
|
||||||
@@ -55,4 +62,4 @@ export function getCuster() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export default { add, edit, del, submits, orderSynchronize, queryMaterials, getCuster }
|
export default { add, edit, del, submits, forceFinish, orderSynchronize, queryMaterials, getCuster }
|
||||||
|
|||||||
Reference in New Issue
Block a user