|
@@ -112,7 +112,6 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
@@ -132,8 +131,6 @@ import java.util.stream.Collectors;
|
|
|
public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
implements ContractService, GetDocumentaryBusinessTemplate {
|
|
|
|
|
|
- private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy", Locale.ENGLISH);
|
|
|
-
|
|
|
@Qualifier(ThreadPoolConfig.threadPoolTaskExecutor)
|
|
|
@Autowired
|
|
|
private ThreadPoolExecutor threadPoolExecutor;
|
|
@@ -2404,7 +2401,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
@Override
|
|
|
public Long getCityId() {
|
|
|
return contractDto.getBuyCityId();
|
|
|
- } @Override
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void setProvinceId(Long provinceId) {
|
|
|
contractDto.setBuyProvinceId(provinceId);
|
|
|
}
|
|
@@ -2415,7 +2414,6 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public void setCityId(Long cityId) {
|
|
|
contractDto.setBuyCityId(cityId);
|
|
@@ -2444,7 +2442,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
@Override
|
|
|
public Long getCityId() {
|
|
|
return contractDto.getSellCityId();
|
|
|
- } @Override
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void setProvinceId(Long provinceId) {
|
|
|
contractDto.setSellProvinceId(provinceId);
|
|
|
}
|
|
@@ -2455,7 +2455,6 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public void setCityId(Long cityId) {
|
|
|
contractDto.setSellCityId(cityId);
|
|
@@ -3062,7 +3061,16 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
- public void saleOutbound(Long id) {
|
|
|
+ public void saleOutbound(ContractDto dto) {
|
|
|
+ Long id = dto.getId();
|
|
|
+ List<ContractProductDto> productDtoList = dto.getContractProductList();
|
|
|
+ //补充数据
|
|
|
+ for (ContractProductDto contractProductDto : productDtoList) {
|
|
|
+ ContractProduct byId = contractProductService.getById(contractProductDto.getId());
|
|
|
+ contractProductDto.setProductId(byId.getProductId());
|
|
|
+ contractProductDto.setPrice(byId.getPrice());
|
|
|
+ }
|
|
|
+
|
|
|
//修改订单出库状态
|
|
|
this.update(q -> q
|
|
|
.eq(Contract::getId, id)
|
|
@@ -3075,11 +3083,25 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
//修改生产订单出库状态为出库中
|
|
|
stockWaitDetailsMapper.updateOrderStatusByContractId(id, 5);
|
|
|
|
|
|
- Contract contract = this.getById(id);
|
|
|
+ ContractVo contract = baseMapper.detail(id);
|
|
|
Assert.notEmpty(contract, "查询不到销售订单信息!");
|
|
|
|
|
|
- List<ContractProduct> productionOrderDetailList = contractProductService
|
|
|
- .list(q -> q.eq(ContractProduct::getContractId, id));
|
|
|
+ //校验是否能出货(非特批校验,特批跳过)
|
|
|
+ if (ObjectUtil.isEmpty(dto.getSpecialOutbound()) || !dto.getSpecialOutbound()) {
|
|
|
+ //数量*(1-预付比例%)*单价<=(累计收款金额-预付款金额)-已出货金额
|
|
|
+ //预付比例-小数
|
|
|
+ BigDecimal multiply = new BigDecimal(contract.getAdvanceRatio()).multiply(BigDecimal.valueOf(0.01));
|
|
|
+ //剩下比例-小数
|
|
|
+ BigDecimal subtract = BigDecimal.ONE.subtract(multiply);
|
|
|
+ //(累计收款金额-预付款金额)-已出货金额
|
|
|
+ BigDecimal subtract2 = contract.getSumClaimMoney().subtract(contract.getAmount().multiply(multiply)).subtract(contract.getShipmentAmount());
|
|
|
+ for (ContractProduct productDto : productDtoList) {
|
|
|
+ BigDecimal multiply1 = productDto.getQuantity().multiply(subtract).multiply(productDto.getPrice());
|
|
|
+ if (multiply1.compareTo(subtract2) > 0) {
|
|
|
+ throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), multiply1.subtract(subtract2)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
//生成待出库数据
|
|
|
StockWait stockWait = new StockWait();
|
|
@@ -3093,11 +3115,16 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
stockWaitService.save(stockWait);
|
|
|
|
|
|
List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
- for (ContractProduct contractProduct : productionOrderDetailList) {
|
|
|
+ for (ContractProductDto contractProduct : productDtoList) {
|
|
|
+ BigDecimal quantity = contractProduct.getQuantity();
|
|
|
+ //跳过出库数量为空||出库数量为0
|
|
|
+ if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
stockWaitDetails.setProductId(contractProduct.getProductId());
|
|
|
- stockWaitDetails.setQuantity(contractProduct.getQuantity());
|
|
|
+ stockWaitDetails.setQuantity(quantity);
|
|
|
stockWaitDetails.setReceiptQuantity(BigDecimal.ZERO);
|
|
|
stockWaitDetails.setBusinessDetailsId(contractProduct.getId());
|
|
|
stockWaitDetails.setContractDetailId(contractProduct.getId());
|