|
@@ -12,6 +12,7 @@ import com.fjhx.area.utils.CustomizeAreaUtil;
|
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
|
import com.fjhx.common.entity.corporation.po.Corporation;
|
|
|
import com.fjhx.common.enums.CodingRuleEnum;
|
|
|
+import com.fjhx.common.enums.TaskDetailsStockStatus;
|
|
|
import com.fjhx.common.service.coding.CodingRuleService;
|
|
|
import com.fjhx.common.service.corporation.CorporationService;
|
|
|
import com.fjhx.common.utils.Assert;
|
|
@@ -30,7 +31,16 @@ import com.fjhx.jxst.entity.statement.bo.SettlementBo;
|
|
|
import com.fjhx.jxst.mapper.sales.SalesContractMapper;
|
|
|
import com.fjhx.jxst.service.sales.SalesContractDetailsService;
|
|
|
import com.fjhx.jxst.service.sales.SalesContractService;
|
|
|
+import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
|
|
|
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
|
|
|
+import com.fjhx.mes.service.production.ProductionTaskDetailService;
|
|
|
+import com.fjhx.wms.entity.stock.emums.StockWaitType;
|
|
|
+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.BasePo;
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.ruoyi.common.utils.wrapper.SqlField;
|
|
@@ -72,6 +82,12 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
private CodingRuleService codingRuleService;
|
|
|
@Autowired
|
|
|
private ISysRoleService sysRoleService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitService stockWaitService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitDetailsService stockWaitDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private ProductionTaskDetailService productionTaskDetailService;
|
|
|
|
|
|
@Override
|
|
|
public Page<SalesContractVo> getPage(SalesContractSelectDto dto) {
|
|
@@ -98,9 +114,9 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
|
|
|
//分页权限过滤(财务/管理员看所有,负责人看当前部门,部门总监看部门及子部门数据,其他人只能看自己)
|
|
|
- if(!permissionList.contains("admin") && !permissionList.contains("finance")){
|
|
|
+ if (!permissionList.contains("admin") && !permissionList.contains("finance")) {
|
|
|
List<Long> authUserIdList = UserUtil.getAuthUserIdList();
|
|
|
- wrapper.in("sc",SalesContract::getCreateUser,authUserIdList);
|
|
|
+ wrapper.in("sc", SalesContract::getCreateUser, authUserIdList);
|
|
|
}
|
|
|
|
|
|
wrapper.orderByDesc("sc", SalesContract::getId);
|
|
@@ -202,7 +218,10 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
public void add(SalesContractDto salesContractDto) {
|
|
|
- salesContractDto.setCode(codingRuleService.createCode(CodingRuleEnum.JXST_SALES_CONTRACT.getKey(), salesContractDto.getCustomerId()));
|
|
|
+ //只有在创建合同的时候 生成code
|
|
|
+ if(ObjectUtil.isEmpty(salesContractDto.getId())) {
|
|
|
+ salesContractDto.setCode(codingRuleService.createCode(CodingRuleEnum.JXST_SALES_CONTRACT.getKey(), salesContractDto.getCustomerId()));
|
|
|
+ }
|
|
|
this.saveOrUpdate(salesContractDto);
|
|
|
|
|
|
List<SalesContractDetails> salesContractDetailsList = salesContractDto.getSalesContractDetailsList();
|
|
@@ -329,4 +348,84 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
|
|
|
Assert.notEmpty(salesContract, "查询不到合同信息!");
|
|
|
this.updateById(dto);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 销售出库列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<SalesContractDetailsVo> salesDeliveryList(SalesContractDto dto) {
|
|
|
+ List<SalesContractDetails> salesContractDetailsList = salesContractDetailsService.list(q -> q
|
|
|
+ .eq(SalesContractDetails::getSalesContractId, dto.getId())
|
|
|
+ );
|
|
|
+ List<SalesContractDetailsVo> salesContractDetailsVos = BeanUtil.copyToList(salesContractDetailsList, SalesContractDetailsVo.class);
|
|
|
+ //赋值产品信息
|
|
|
+ productInfoService.attributeAssign(salesContractDetailsVos, SalesContractDetailsVo::getProductId, (item, productInfo) -> {
|
|
|
+ item.setProductName(productInfo.getName());
|
|
|
+ item.setProductSpec(productInfo.getSpec());
|
|
|
+ });
|
|
|
+
|
|
|
+ //获取任务明细
|
|
|
+ List<Long> scdIds = salesContractDetailsVos.stream().map(SalesContractDetails::getId).collect(Collectors.toList());
|
|
|
+ List<ProductionTaskDetail> productionTaskDetailList = productionTaskDetailService.list(q -> q.in(ProductionTaskDetail::getContractDetailsId, scdIds));
|
|
|
+ List<ProductionTaskDetailVo> productionTaskDetailVos = BeanUtil.copyToList(productionTaskDetailList, ProductionTaskDetailVo.class);
|
|
|
+ Map<Long, List<ProductionTaskDetailVo>> salesDeliveryMap = productionTaskDetailVos.stream().collect(Collectors.groupingBy(ProductionTaskDetailVo::getProductId));
|
|
|
+
|
|
|
+ for (SalesContractDetailsVo salesContractDetailsVo : salesContractDetailsVos) {
|
|
|
+ List<ProductionTaskDetailVo> list = salesDeliveryMap.get(salesContractDetailsVo.getProductId());
|
|
|
+ salesContractDetailsVo.setProductionTaskDetailList(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ return salesContractDetailsVos;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 销售出库
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @DSTransactional
|
|
|
+ public synchronized void salesDelivery(SalesContractDto dto) {
|
|
|
+ List<ProductionTaskDetail> productionTaskDetailList = dto.getProductionTaskDetailList();
|
|
|
+ if(ObjectUtil.isEmpty(productionTaskDetailList)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ StockWait stockWait = new StockWait();
|
|
|
+ stockWait.setType(2);
|
|
|
+ stockWait.setStatus(0);
|
|
|
+ stockWait.setBusinessId(dto.getId());
|
|
|
+ //销售出库
|
|
|
+ stockWait.setBusinessType(StockWaitType.CONTRACT_SALE_OUT.getDetailType());
|
|
|
+ stockWaitService.save(stockWait);
|
|
|
+
|
|
|
+ //更新状态
|
|
|
+ List<Long> ptdIds = productionTaskDetailList.stream().map(ProductionTaskDetail::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //检查并发
|
|
|
+ List<ProductionTaskDetail> neList = productionTaskDetailService.list(q -> q
|
|
|
+ .in(ProductionTaskDetail::getId, ptdIds)
|
|
|
+ .ne(ProductionTaskDetail::getStockStatus, TaskDetailsStockStatus.IN_STOCK.getDetailType())
|
|
|
+ );
|
|
|
+ String neSnList = neList.stream().map(ProductionTaskDetail::getProductSn).collect(Collectors.joining(","));
|
|
|
+ if(neList.size()>0){
|
|
|
+ throw new ServiceException(String.format("列表中以下产品已经被操作:%s,请刷新后重试!!!",neSnList));
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新状态
|
|
|
+ productionTaskDetailService.update(q->q
|
|
|
+ .in(ProductionTaskDetail::getId, ptdIds)
|
|
|
+ .set(ProductionTaskDetail::getStockStatus,TaskDetailsStockStatus.OUT_STOCK_ING.getDetailType())
|
|
|
+ );
|
|
|
+
|
|
|
+ List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
+ for (ProductionTaskDetail productionTaskDetail : productionTaskDetailList) {
|
|
|
+ StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
+ stockWaitDetails.setProductId(productionTaskDetail.getProductId());
|
|
|
+ stockWaitDetails.setQuantity(BigDecimal.ONE);
|
|
|
+ stockWaitDetails.setBusinessDetailsId(productionTaskDetail.getId());
|
|
|
+ stockWaitDetailsList.add(stockWaitDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ stockWaitDetailsService.saveBatch(stockWaitDetailsList);
|
|
|
+ }
|
|
|
}
|