|
@@ -9,7 +9,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
|
|
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
|
|
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
|
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.maintain.bom.vo.IotMaintainBomSaveReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.material.vo.IotMaintainMaterialSaveReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.material.vo.IotMaintainMaterialSaveReqVO;
|
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.maintain.materials.vo.IotMaintainMaterialsSaveReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveVO;
|
|
@@ -17,12 +19,16 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.failure.IotFailureReportDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.failure.IotFailureReportDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotlockstock.IotLockStockDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotlockstock.IotLockStockDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotoutbound.IotOutboundDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotoutbound.IotOutboundDO;
|
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.IotMaintainBomDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.IotMaintainDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.IotMaintainDO;
|
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.IotMaintainMaterialsDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.material.IotMaintainMaterialDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.material.IotMaintainMaterialDO;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.failure.IotFailureReportMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.failure.IotFailureReportMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotlockstock.IotLockStockMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotlockstock.IotLockStockMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotoutbound.IotOutboundMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotoutbound.IotOutboundMapper;
|
|
|
|
+import cn.iocoder.yudao.module.pms.dal.mysql.maintain.IotMaintainBomMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.maintain.IotMaintainMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.maintain.IotMaintainMapper;
|
|
|
|
+import cn.iocoder.yudao.module.pms.dal.mysql.maintain.IotMaintainMaterialsMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.maintain.material.IotMaintainMaterialMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.maintain.material.IotMaintainMaterialMapper;
|
|
import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
|
|
import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
|
|
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
|
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
|
@@ -80,6 +86,10 @@ public class IotMaintainServiceImpl implements IotMaintainService {
|
|
private NotifyMessageSendApi notifyMessageSendApi;
|
|
private NotifyMessageSendApi notifyMessageSendApi;
|
|
@Resource
|
|
@Resource
|
|
private BpmProcessInstanceApi processInstanceApi;
|
|
private BpmProcessInstanceApi processInstanceApi;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IotMaintainBomMapper iotMaintainBomMapper;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IotMaintainMaterialsMapper iotMaintainMaterialsMapper;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -98,15 +108,31 @@ public class IotMaintainServiceImpl implements IotMaintainService {
|
|
iotMaintain.setFailureName(createReqVO.getMaintain().getDeviceName()+DateUtil.format(new Date(), "yyyyMMddHHmmss"));
|
|
iotMaintain.setFailureName(createReqVO.getMaintain().getDeviceName()+DateUtil.format(new Date(), "yyyyMMddHHmmss"));
|
|
iotMaintain.setDeleted(false);
|
|
iotMaintain.setDeleted(false);
|
|
iotMaintainMapper.insert(iotMaintain);
|
|
iotMaintainMapper.insert(iotMaintain);
|
|
|
|
+ //插入工单bom
|
|
|
|
+ List<IotMaintainBomSaveReqVO> maintainMaterials = createReqVO.getMaintainMaterials();
|
|
|
|
+ if (CollUtil.isEmpty(maintainMaterials)) {
|
|
|
|
+ throw new ServiceException(IOT_MAINTAIN_NOT_EXISTS);
|
|
|
|
+ }
|
|
//插入工单物料
|
|
//插入工单物料
|
|
- List<IotMaintainMaterialSaveReqVO> maintainMaterials = createReqVO.getMaintainMaterials();
|
|
|
|
- List<IotMaintainMaterialDO> collect = maintainMaterials.stream().map(e -> {
|
|
|
|
- IotMaintainMaterialDO bean = BeanUtils.toBean(e, IotMaintainMaterialDO.class);
|
|
|
|
- bean.setMaintainId(iotMaintain.getId());
|
|
|
|
- bean.setDeleted(false);
|
|
|
|
- return bean;
|
|
|
|
- }).collect(Collectors.toList());
|
|
|
|
- iotMaintainMaterialMapper.insertBatch(collect);
|
|
|
|
|
|
+ for (IotMaintainBomSaveReqVO maintainMaterial : maintainMaterials) {
|
|
|
|
+ IotMaintainBomDO iotMaintainBomDO = new IotMaintainBomDO();
|
|
|
|
+ iotMaintainBomDO.setBomNodeId(maintainMaterial.getBomNodeId());
|
|
|
|
+ iotMaintainBomDO.setMaintainId(iotMaintain.getId());
|
|
|
|
+ iotMaintainBomDO.setName(maintainMaterial.getName());
|
|
|
|
+ iotMaintainBomDO.setDeleted(false);
|
|
|
|
+ iotMaintainBomMapper.insert(iotMaintainBomDO);
|
|
|
|
+ List<IotMaintainMaterialsDO> iotMaintainMaterialsDOS = new ArrayList<>();
|
|
|
|
+ maintainMaterial.getMaterials().forEach(e ->{
|
|
|
|
+ IotMaintainMaterialsDO iotMaintainMaterialsDO = new IotMaintainMaterialsDO();
|
|
|
|
+ BeanUtils.copyProperties(e, iotMaintainMaterialsDO);
|
|
|
|
+ iotMaintainMaterialsDO.setDeleted(false);
|
|
|
|
+ iotMaintainMaterialsDO.setMaintainId(iotMaintain.getId());
|
|
|
|
+ iotMaintainMaterialsDO.setBomId(iotMaintainBomDO.getId());
|
|
|
|
+ iotMaintainMaterialsDOS.add(iotMaintainMaterialsDO);
|
|
|
|
+ });
|
|
|
|
+ iotMaintainMaterialsMapper.insertBatch(iotMaintainMaterialsDOS);
|
|
|
|
+ }
|
|
|
|
+
|
|
//本地库存减少且记录出库
|
|
//本地库存减少且记录出库
|
|
localStockAndOut(createReqVO);
|
|
localStockAndOut(createReqVO);
|
|
if ("in".equals(createReqVO.getMaintain().getType())) {
|
|
if ("in".equals(createReqVO.getMaintain().getType())) {
|
|
@@ -130,18 +156,34 @@ public class IotMaintainServiceImpl implements IotMaintainService {
|
|
// 更新
|
|
// 更新
|
|
IotMaintainDO updateObj = BeanUtils.toBean(updateReqVO.getMaintain(), IotMaintainDO.class);
|
|
IotMaintainDO updateObj = BeanUtils.toBean(updateReqVO.getMaintain(), IotMaintainDO.class);
|
|
iotMaintainMapper.updateById(updateObj);
|
|
iotMaintainMapper.updateById(updateObj);
|
|
-
|
|
|
|
- List<IotMaintainMaterialSaveReqVO> maintainMaterials = updateReqVO.getMaintainMaterials();
|
|
|
|
- //删除工单物料
|
|
|
|
- iotMaintainMaterialMapper.deleteByMap(ImmutableMap.of("maintain_id", updateObj.getId()));
|
|
|
|
|
|
+ //删除工单bom及物料
|
|
|
|
+ iotMaintainBomMapper.delete("maintain_id", String.valueOf(updateObj.getId()));
|
|
|
|
+ iotMaintainMaterialsMapper.delete("maintain_id", String.valueOf(updateObj.getId()));
|
|
|
|
+ //插入工单bom
|
|
|
|
+ List<IotMaintainBomSaveReqVO> maintainMaterials = updateReqVO.getMaintainMaterials();
|
|
|
|
+ if (CollUtil.isEmpty(maintainMaterials)) {
|
|
|
|
+ throw new ServiceException(IOT_MAINTAIN_NOT_EXISTS);
|
|
|
|
+ }
|
|
//插入工单物料
|
|
//插入工单物料
|
|
- List<IotMaintainMaterialDO> collect = maintainMaterials.stream().map(e -> {
|
|
|
|
- IotMaintainMaterialDO bean = BeanUtils.toBean(e, IotMaintainMaterialDO.class);
|
|
|
|
- bean.setMaintainId(updateObj.getId());
|
|
|
|
- bean.setDeleted(false);
|
|
|
|
- return bean;
|
|
|
|
- }).collect(Collectors.toList());
|
|
|
|
- iotMaintainMaterialMapper.insertBatch(collect);
|
|
|
|
|
|
+ for (IotMaintainBomSaveReqVO maintainMaterial : maintainMaterials) {
|
|
|
|
+ IotMaintainBomDO iotMaintainBomDO = new IotMaintainBomDO();
|
|
|
|
+ iotMaintainBomDO.setBomNodeId(maintainMaterial.getBomNodeId());
|
|
|
|
+ iotMaintainBomDO.setMaintainId(updateObj.getId());
|
|
|
|
+ iotMaintainBomDO.setName(maintainMaterial.getName());
|
|
|
|
+ iotMaintainBomDO.setDeleted(false);
|
|
|
|
+ iotMaintainBomMapper.insert(iotMaintainBomDO);
|
|
|
|
+ List<IotMaintainMaterialsDO> iotMaintainMaterialsDOS = new ArrayList<>();
|
|
|
|
+ maintainMaterial.getMaterials().forEach(e ->{
|
|
|
|
+ IotMaintainMaterialsDO iotMaintainMaterialsDO = new IotMaintainMaterialsDO();
|
|
|
|
+ BeanUtils.copyProperties(e, iotMaintainMaterialsDO);
|
|
|
|
+ iotMaintainMaterialsDO.setDeleted(false);
|
|
|
|
+ iotMaintainMaterialsDO.setMaintainId(updateObj.getId());
|
|
|
|
+ iotMaintainMaterialsDO.setBomId(iotMaintainBomDO.getId());
|
|
|
|
+ iotMaintainMaterialsDOS.add(iotMaintainMaterialsDO);
|
|
|
|
+ });
|
|
|
|
+ iotMaintainMaterialsMapper.insertBatch(iotMaintainMaterialsDOS);
|
|
|
|
+ }
|
|
|
|
+
|
|
//本地库存减少且记录出库
|
|
//本地库存减少且记录出库
|
|
localStockAndOut(updateReqVO);
|
|
localStockAndOut(updateReqVO);
|
|
if ("in".equals(updateReqVO.getMaintain().getType())) {
|
|
if ("in".equals(updateReqVO.getMaintain().getType())) {
|
|
@@ -158,38 +200,40 @@ public class IotMaintainServiceImpl implements IotMaintainService {
|
|
* @param maintainSaveVO 维修工单信息
|
|
* @param maintainSaveVO 维修工单信息
|
|
*/
|
|
*/
|
|
private void localStockAndOut(IotMaintainSaveVO maintainSaveVO) {
|
|
private void localStockAndOut(IotMaintainSaveVO maintainSaveVO) {
|
|
- List<IotMaintainMaterialSaveReqVO> maintainMaterials = maintainSaveVO.getMaintainMaterials();
|
|
|
|
|
|
+ List<IotMaintainBomSaveReqVO> maintainMaterials = maintainSaveVO.getMaintainMaterials();
|
|
//判断物料不为空
|
|
//判断物料不为空
|
|
if (CollUtil.isNotEmpty(maintainMaterials)) {
|
|
if (CollUtil.isNotEmpty(maintainMaterials)) {
|
|
- maintainMaterials.forEach(e ->{
|
|
|
|
- String code = e.getCode();
|
|
|
|
- //减去本地库存
|
|
|
|
- if ("本地库存".equals(e.getSourceType())){
|
|
|
|
- List<IotLockStockDO> stockDOS = iotLockStockMapper.selectByMap(ImmutableMap.of("material_code", code, "dept_id", maintainSaveVO.getMaintain().getDeptId()));
|
|
|
|
- if (CollUtil.isNotEmpty(stockDOS)) {
|
|
|
|
- IotLockStockDO iotLockStockDO = stockDOS.get(0);
|
|
|
|
- BigDecimal quantity = iotLockStockDO.getQuantity();
|
|
|
|
- BigDecimal subtract = quantity.subtract(e.getDepleteCount());
|
|
|
|
- if (subtract.compareTo(BigDecimal.ZERO) < 0){
|
|
|
|
- throw new ServiceException(IOT_LOCK_STOCK_FUSHU);
|
|
|
|
|
|
+ maintainMaterials.forEach(f ->{
|
|
|
|
+ f.getMaterials().forEach(e ->{
|
|
|
|
+ String code = e.getMaterialCode();
|
|
|
|
+ //减去本地库存
|
|
|
|
+ if ("本地库存".equals(e.getMaterialSource())){
|
|
|
|
+ List<IotLockStockDO> stockDOS = iotLockStockMapper.selectByMap(ImmutableMap.of("material_code", code, "dept_id", maintainSaveVO.getMaintain().getDeptId()));
|
|
|
|
+ if (CollUtil.isNotEmpty(stockDOS)) {
|
|
|
|
+ IotLockStockDO iotLockStockDO = stockDOS.get(0);
|
|
|
|
+ BigDecimal quantity = iotLockStockDO.getQuantity();
|
|
|
|
+ BigDecimal subtract = quantity.subtract(e.getQuantity());
|
|
|
|
+ if (subtract.compareTo(BigDecimal.ZERO) < 0){
|
|
|
|
+ throw new ServiceException(IOT_LOCK_STOCK_FUSHU);
|
|
|
|
+ }
|
|
|
|
+ iotLockStockDO.setQuantity(subtract);
|
|
|
|
+ iotLockStockMapper.updateById(iotLockStockDO);
|
|
}
|
|
}
|
|
- iotLockStockDO.setQuantity(subtract);
|
|
|
|
- iotLockStockMapper.updateById(iotLockStockDO);
|
|
|
|
}
|
|
}
|
|
- }
|
|
|
|
- //记录出库
|
|
|
|
- IotOutboundDO outboundDO = new IotOutboundDO();
|
|
|
|
- outboundDO.setDeptId(maintainSaveVO.getMaintain().getDeptId());
|
|
|
|
- outboundDO.setMaterialCode(code);
|
|
|
|
- outboundDO.setMaterialName(e.getName());
|
|
|
|
- outboundDO.setDeliveryTime(LocalDateTimeUtil.now());
|
|
|
|
- outboundDO.setReason("故障维修");
|
|
|
|
- outboundDO.setStatus(0);
|
|
|
|
- outboundDO.setType(1);
|
|
|
|
- outboundDO.setDeleted(false);
|
|
|
|
- outboundDO.setUnit(e.getUnit());
|
|
|
|
- outboundDO.setUnitPrice(e.getPrice());
|
|
|
|
- iotOutboundMapper.insert(outboundDO);
|
|
|
|
|
|
+ //记录出库
|
|
|
|
+ IotOutboundDO outboundDO = new IotOutboundDO();
|
|
|
|
+ outboundDO.setDeptId(maintainSaveVO.getMaintain().getDeptId());
|
|
|
|
+ outboundDO.setMaterialCode(code);
|
|
|
|
+ outboundDO.setMaterialName(e.getMaterialName());
|
|
|
|
+ outboundDO.setDeliveryTime(LocalDateTimeUtil.now());
|
|
|
|
+ outboundDO.setReason("故障维修");
|
|
|
|
+ outboundDO.setStatus(0);
|
|
|
|
+ outboundDO.setType(1);
|
|
|
|
+ outboundDO.setDeleted(false);
|
|
|
|
+ outboundDO.setUnit(e.getUnit());
|
|
|
|
+ outboundDO.setUnitPrice(e.getUnitPrice());
|
|
|
|
+ iotOutboundMapper.insert(outboundDO);
|
|
|
|
+ });
|
|
});
|
|
});
|
|
}
|
|
}
|
|
//更新故障上报的状态为工单处理完成
|
|
//更新故障上报的状态为工单处理完成
|