|
@@ -0,0 +1,177 @@
|
|
|
+package com.fjhx.service.contract.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.constants.ConfigConstant;
|
|
|
+import com.fjhx.entity.apply.ApplyPurchaseDetails;
|
|
|
+import com.fjhx.entity.contract.Contract;
|
|
|
+import com.fjhx.entity.contract.ContractDetails;
|
|
|
+import com.fjhx.enums.FlowStatusEnum;
|
|
|
+import com.fjhx.mapper.contract.ContractMapper;
|
|
|
+import com.fjhx.params.apply.ApplyPurchaseVo;
|
|
|
+import com.fjhx.params.contract.ContractVo;
|
|
|
+import com.fjhx.service.common.CommonConfigService;
|
|
|
+import com.fjhx.service.contract.ContractDetailsService;
|
|
|
+import com.fjhx.service.contract.ContractService;
|
|
|
+import com.fjhx.utils.WrapperUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+
|
|
|
+ * <p>
|
|
|
+ * 采购合同 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author ${author}
|
|
|
+ * @since 2022-09-19
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements ContractService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CommonConfigService commonConfigService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ContractDetailsService contractDetailsService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<Contract> getPage(Map<String, String> condition) {
|
|
|
+
|
|
|
+ QueryWrapper<Contract> wrapper = Wrappers.query();
|
|
|
+
|
|
|
+ WrapperUtil.init(condition, wrapper)
|
|
|
+ .createTimeDesc();
|
|
|
+
|
|
|
+ Page<Contract> page = page(condition, wrapper);
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void add(ContractVo contractVo) {
|
|
|
+ save(contractVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void edit(ContractVo contractVo) {
|
|
|
+ updateById(contractVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void delete(ContractVo contractVo) {
|
|
|
+ removeById(contractVo.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized void create(ApplyPurchaseVo applyVo) {
|
|
|
+ List<ContractDetails> contractDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ String codePrefix = codePrefix();
|
|
|
+
|
|
|
+
|
|
|
+ Integer codeSuffix = getCodeSuffix(codePrefix);
|
|
|
+
|
|
|
+ List<ApplyPurchaseDetails> applyDetailsList = applyVo.getApplyDetailsList();
|
|
|
+ for (ApplyPurchaseDetails applyPurchaseDetails : applyDetailsList) {
|
|
|
+ codeSuffix++;
|
|
|
+
|
|
|
+
|
|
|
+ String code = getCodeSuffixFormat(codePrefix, codeSuffix);
|
|
|
+
|
|
|
+ Contract contract = new Contract();
|
|
|
+ contract.setCode(code);
|
|
|
+ contract.setAmountMoney(BigDecimal.ZERO);
|
|
|
+ contract.setAdjustAmount(BigDecimal.ZERO);
|
|
|
+ contract.setBackAmount(BigDecimal.ZERO);
|
|
|
+ contract.setPayAmount(BigDecimal.ZERO);
|
|
|
+ contract.setHadPayAmount(BigDecimal.ZERO);
|
|
|
+ contract.setTaxValue(commonConfigService.getValueToBigDecimal(ConfigConstant.TAX_RATE));
|
|
|
+ contract.setInvoiceType(0);
|
|
|
+ contract.setFlowStatus(FlowStatusEnum.WAIT.getType());
|
|
|
+ save(contract);
|
|
|
+
|
|
|
+ Long contractId = contract.getId();
|
|
|
+ Long applyPurchaseId = applyPurchaseDetails.getApplyPurchaseId();
|
|
|
+ String applyPurchaseCode = applyPurchaseDetails.getApplyPurchaseCode();
|
|
|
+ Long applyPurchaseDetailsId = applyPurchaseDetails.getId();
|
|
|
+ Long materialId = applyPurchaseDetails.getMaterialId();
|
|
|
+ BigDecimal quantity = applyPurchaseDetails.getQuantity();
|
|
|
+
|
|
|
+ ContractDetails contractDetails = new ContractDetails();
|
|
|
+ contractDetails.setContractId(contractId);
|
|
|
+ contractDetails.setContractCode(code);
|
|
|
+ contractDetails.setApplyPurchaseId(applyPurchaseId);
|
|
|
+ contractDetails.setApplyPurchaseCode(applyPurchaseCode);
|
|
|
+ contractDetails.setApplyPurchaseDetailsId(applyPurchaseDetailsId);
|
|
|
+ contractDetails.setMaterialId(materialId);
|
|
|
+ contractDetails.setPrice(BigDecimal.ZERO);
|
|
|
+ contractDetails.setQuantity(quantity);
|
|
|
+ contractDetails.setArrivalQuantity(BigDecimal.ZERO);
|
|
|
+ contractDetails.setAfloatQuantity(quantity);
|
|
|
+ contractDetails.setAdjustQuantity(quantity);
|
|
|
+ contractDetails.setBackQuantity(BigDecimal.ZERO);
|
|
|
+ contractDetailsList.add(contractDetails);
|
|
|
+ }
|
|
|
+ contractDetailsService.saveBatch(contractDetailsList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取当天合同编号前缀
|
|
|
+ *
|
|
|
+ * @return 合同编号前缀
|
|
|
+ */
|
|
|
+ private String codePrefix() {
|
|
|
+ return "PO" + DateUtil.format(new Date(), "yyMMdd-");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取最新合同编号后缀
|
|
|
+ *
|
|
|
+ * @param prefix 合同编号前缀
|
|
|
+ * @return 合同编号后缀
|
|
|
+ */
|
|
|
+ private Integer getCodeSuffix(String prefix) {
|
|
|
+ Contract contract = getOne(Wrappers.<Contract>lambdaQuery()
|
|
|
+ .likeRight(Contract::getCode, prefix)
|
|
|
+ .orderByDesc(Contract::getCode)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+ if (contract == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return Convert.toInt(contract.getCode().replace(prefix, ""));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 合同格式化
|
|
|
+ *
|
|
|
+ * @param codePrefix 合同前缀
|
|
|
+ * @param codeSuffix 合同后缀
|
|
|
+ * @return 格式化之后的合同编码
|
|
|
+ */
|
|
|
+ private String getCodeSuffixFormat(String codePrefix, Integer codeSuffix) {
|
|
|
+ String codeSuffixStr;
|
|
|
+
|
|
|
+ if (codeSuffix < 10) {
|
|
|
+ codeSuffixStr = "00" + codeSuffix;
|
|
|
+ } else if (codeSuffix < 100) {
|
|
|
+ codeSuffixStr = "0" + codeSuffix;
|
|
|
+ } else {
|
|
|
+ codeSuffixStr = codeSuffix.toString();
|
|
|
+ }
|
|
|
+ return codePrefix + codeSuffixStr;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|