|
@@ -6,6 +6,7 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.common.utils.Assert;
|
|
|
+import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionSchedulingDto;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionSchedulingSelectDto;
|
|
@@ -14,18 +15,32 @@ import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionScheduling;
|
|
|
import com.fjhx.mes.entity.production.vo.ProductionOrderDetailVo;
|
|
|
import com.fjhx.mes.entity.production.vo.ProductionSchedulingVo;
|
|
|
+import com.fjhx.mes.entity.technology.po.Technology;
|
|
|
import com.fjhx.mes.mapper.production.ProduceOrderDetailMapper;
|
|
|
import com.fjhx.mes.mapper.production.ProductionSchedulingMapper;
|
|
|
+import com.fjhx.mes.service.production.ProduceOrderDetailService;
|
|
|
import com.fjhx.mes.service.production.ProductionSchedulingService;
|
|
|
+import com.fjhx.mes.service.technology.TechnologyService;
|
|
|
+import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
|
+import com.fjhx.sale.entity.contract.vo.ContractProductBomVo;
|
|
|
+import com.fjhx.sale.service.contract.ContractProductBomService;
|
|
|
+import com.fjhx.sale.service.contract.ContractProductService;
|
|
|
+import com.fjhx.wms.entity.stock.emums.JournalType;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockWait;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockWaitDetails;
|
|
|
+import com.fjhx.wms.service.stock.StockWaitDetailsService;
|
|
|
+import com.fjhx.wms.service.stock.StockWaitService;
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.ruoyi.system.service.ISysUserService;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -41,16 +56,24 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSchedulingMapper, ProductionScheduling> implements ProductionSchedulingService {
|
|
|
|
|
|
- private final ProductInfoService productInfoService;
|
|
|
- private final ProduceOrderDetailMapper produceOrderDetailMapper;
|
|
|
- private final ISysUserService sysUserService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- public ProductionSchedulingServiceImpl(ProductInfoService productInfoService, ProduceOrderDetailMapper produceOrderDetailMapper, ISysUserService sysUserService) {
|
|
|
- this.productInfoService = productInfoService;
|
|
|
- this.produceOrderDetailMapper = produceOrderDetailMapper;
|
|
|
- this.sysUserService = sysUserService;
|
|
|
- }
|
|
|
+ @Resource
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
+ @Resource
|
|
|
+ private ProduceOrderDetailService produceOrderDetailService;
|
|
|
+ @Resource
|
|
|
+ private ProduceOrderDetailMapper produceOrderDetailMapper;
|
|
|
+ @Resource
|
|
|
+ private ISysUserService sysUserService;
|
|
|
+ @Resource
|
|
|
+ private StockWaitService stockWaitService;
|
|
|
+ @Resource
|
|
|
+ private StockWaitDetailsService stockWaitDetailsService;
|
|
|
+ @Resource
|
|
|
+ private ContractProductBomService contractProductBomService;
|
|
|
+ @Resource
|
|
|
+ private ContractProductService contractProductService;
|
|
|
+ @Resource
|
|
|
+ private TechnologyService technologyService;
|
|
|
|
|
|
@Override
|
|
|
public Page<ProductionSchedulingVo> getPage(ProductionSchedulingSelectDto dto) {
|
|
@@ -151,6 +174,22 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
|
|
|
throw new ServiceException(sdf.format(dto.getSchedulingDate()) + "已有排程信息,请前往修改或删除!");
|
|
|
}
|
|
|
this.save(dto);
|
|
|
+
|
|
|
+
|
|
|
+ ProductionOrderDetail productionOrderDetail = produceOrderDetailService.getById(dto.getTaskId());
|
|
|
+ Assert.notEmpty(productionOrderDetail, "查询不到生产任务信息!");
|
|
|
+ ProductInfo productInfo = productInfoService.getById(productionOrderDetail.getProductId());
|
|
|
+ Assert.notEmpty(productInfo, "查询不到产品信息!");
|
|
|
+ Technology technology = technologyService.getById(productInfo.getTechnologyId());
|
|
|
+ Assert.notEmpty(technology, "查询不到产品工艺信息!");
|
|
|
+ String processRoute = technology.getProcessRoute();
|
|
|
+ Assert.notEmpty(processRoute, "查询不到产品工艺线路为空!");
|
|
|
+ String[] processRouteArr = processRoute.split(",");
|
|
|
+
|
|
|
+
|
|
|
+ if (Long.parseLong(processRouteArr[0]) == dto.getProcessesId()) {
|
|
|
+ createStockWait(dto);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -163,7 +202,7 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
|
|
|
throw new ServiceException("排程数量不能小于已完工数量!");
|
|
|
}
|
|
|
|
|
|
- this.updateById(dto);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -176,6 +215,17 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
|
|
|
}
|
|
|
|
|
|
this.removeById(id);
|
|
|
+
|
|
|
+
|
|
|
+ StockWait stockWait = stockWaitService.getOne(q -> q.eq(StockWait::getSchedulingId, id));
|
|
|
+ if (ObjectUtil.isNotEmpty(stockWait)) {
|
|
|
+ long count = stockWaitDetailsService.count(q -> q.eq(StockWaitDetails::getStockWaitId, stockWait.getId()).ne(StockWaitDetails::getReceiptQuantity, 0));
|
|
|
+ if (count > 0) {
|
|
|
+ throw new ServiceException("该排程生产物料,已领料或部分领料,排程禁止删除!");
|
|
|
+ }
|
|
|
+ stockWaitService.removeById(stockWait.getId());
|
|
|
+ stockWaitDetailsService.remove(q -> q.eq(StockWaitDetails::getStockWaitId, stockWait.getId()));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -211,4 +261,56 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
|
|
|
return produceOrderDetailMapper.getProcessesSchedulingByDay(dayDate);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 根据排程创建待出库
|
|
|
+ */
|
|
|
+ @DSTransactional
|
|
|
+ private synchronized void createStockWait(ProductionScheduling dto) {
|
|
|
+ ProductionOrderDetail task = produceOrderDetailService.getById(dto.getTaskId());
|
|
|
+ Assert.notEmpty(task, "查询不到任务信息!");
|
|
|
+
|
|
|
+
|
|
|
+ StockWait stockWait = new StockWait();
|
|
|
+ stockWait.setStatus(0);
|
|
|
+ stockWait.setCompanyId(task.getCompanyId());
|
|
|
+ stockWait.setBusinessId(dto.getId());
|
|
|
+ stockWait.setType(2);
|
|
|
+
|
|
|
+ stockWait.setBusinessType(JournalType.PROD_OUT.getDetailType());
|
|
|
+ stockWait.setBusinessCode(task.getCode());
|
|
|
+
|
|
|
+ stockWait.setContractId(task.getContractId());
|
|
|
+ stockWait.setProdOrderId(task.getProduceOrderId());
|
|
|
+ stockWait.setProdTaskId(task.getId());
|
|
|
+ stockWait.setSchedulingId(dto.getId());
|
|
|
+ stockWaitService.saveOrUpdate(stockWait);
|
|
|
+
|
|
|
+ List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
+ List<ContractProductBomVo> contractProductBomQuantitySum = contractProductBomService.getContractProductBomQuantitySum(IWrapper.getWrapper()
|
|
|
+ .eq("cp.id", task.getContractDetailId())
|
|
|
+ .ne("cpb.type", 3)
|
|
|
+ );
|
|
|
+ for (ContractProductBomVo contractProductBomVo : contractProductBomQuantitySum) {
|
|
|
+
|
|
|
+ ContractProduct cpById = contractProductService.getById(contractProductBomVo.getContractProductId());
|
|
|
+ BigDecimal multiply = contractProductBomVo.getQuantity().divide(cpById.getQuantity()).multiply(BigDecimal.valueOf(dto.getQuantity()));
|
|
|
+
|
|
|
+
|
|
|
+ Long stockWaitId = stockWait.getId();
|
|
|
+ StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setStockWaitId(stockWaitId);
|
|
|
+ stockWaitDetails.setReceiptQuantity(BigDecimal.ZERO);
|
|
|
+ stockWaitDetails.setContractDetailId(task.getContractDetailId());
|
|
|
+ stockWaitDetails.setProdOrderId(task.getProduceOrderId());
|
|
|
+ stockWaitDetails.setProdTaskId(task.getId());
|
|
|
+
|
|
|
+ stockWaitDetails.setProductId(contractProductBomVo.getMaterialId());
|
|
|
+ stockWaitDetails.setQuantity(multiply);
|
|
|
+ stockWaitDetails.setSchedulingId(dto.getId());
|
|
|
+
|
|
|
+ stockWaitDetailsList.add(stockWaitDetails);
|
|
|
+ }
|
|
|
+ stockWaitDetailsService.saveOrUpdateBatch(stockWaitDetailsList);
|
|
|
+ }
|
|
|
+
|
|
|
}
|