xuhy
2025-04-27 2a83dac503b6a21015ce945a179d98e2ab9ef371
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
@@ -46,6 +46,7 @@
import com.ruoyi.system.vo.CheckAcceptRecordVO;
import com.ruoyi.system.vo.TContractVO;
import com.ruoyi.web.controller.tool.NumberToChineseUtils;
import com.ruoyi.web.controller.tool.TencentCosUtil;
import com.ruoyi.web.controller.tool.WordUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -62,6 +63,7 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -358,6 +360,8 @@
    }
    @Autowired
    private WordUtil wordUtil;
    @Autowired
    private TencentCosUtil tencentCosUtil;
    @ApiOperation(value = "生成合同附件")
    @PostMapping("/set")
    @Log(title = "生成合同附件", businessType = BusinessType.EXPORT)
@@ -366,7 +370,7 @@
        List<TContract> list = contractService.lambdaQuery().in(TContract::getId, dto.getIds()).list();
        List<String> res = new ArrayList<>();
        for (TContract contract : list) {
            String url = generateContract(contract);
            String url = generateContract(contract,new TContractDTO());
            res.add(url);
        }
@@ -385,7 +389,7 @@
    }
    private String generateContract(TContract contract) {
    private String generateContract(TContract contract,TContractDTO dto) {
        String templateFileName = "1_yzj_租赁合同_个人.docx";
        String contractId = contract.getId();
        TBill firstBill = null;
@@ -427,10 +431,10 @@
            fill(templateParam, "email", tenant.getEmail());
            // 企业、政府机构、国有企业
            if (Objects.nonNull(tenant.getTenantType())
                    && (tenant.getTenantType().equals("2")
                    || tenant.getTenantType().equals("5")
                    || tenant.getTenantType().equals("7"))) {
            if (Objects.nonNull(tenant.getTenantAttributes())
                    && (tenant.getTenantAttributes().equals("2")
                    || tenant.getTenantAttributes().equals("5")
                    || tenant.getTenantAttributes().equals("7"))) {
                fill(templateParam, "creditCode", tenant.getCreditCode());
                fill(templateParam, "legalPerson", tenant.getLegalPerson());
                templateFileName = "1_yzj_租赁合同_企业.docx";
@@ -446,7 +450,7 @@
        // 日期相关参数处理
        fill(templateParam, "remark", contract.getRemark());
        fill(templateParam, "houseUseScope", contract.getHouseUseScope());
        fill(templateParam, "houseUseScope", StringUtils.isNotEmpty(contract.getHouseUseScope()) ? contract.getHouseUseScope() : "————");
        fill(templateParam, "days", ChronoUnit.DAYS.between(
                contract.getStartTime(), contract.getEndTime()));
@@ -485,39 +489,30 @@
                : contract.getPayType().equals("2") ? "季"
                : "年";
        fill(templateParam, "payType", payType);
        BigDecimal extracted = extracted(contract);
        // 首期租金处理
        if (firstBill != null) {
            double firstRent = (contract.getPayType().equals("1")
                    ? contract.getMonthRent()
                    : contract.getPayType().equals("2")
                    ? contract.getMonthRent().multiply(new BigDecimal("3"))
                    : contract.getMonthRent().multiply(new BigDecimal("12")))
                    .setScale(2, RoundingMode.DOWN).doubleValue();
            fill(templateParam, "firstRent", "¥" + extracted + "元");
            // 其他财务字段
            fill(templateParam, "firstRentString", "人民币" + NumberToChineseUtils.numberToChinese(extracted.doubleValue()));
        } else {
//            fill(templateParam, "firstRent", "");
        }
        fill(templateParam, "firstRent",
                "¥"+(contract.getPayType().equals("1")
                        ? contract.getMonthRent()
                        :contract.getPayType().equals("2")
                        ?contract.getMonthRent().multiply(new BigDecimal("3"))
                        :contract.getMonthRent().multiply(new BigDecimal("12"))
                        .setScale(2, RoundingMode.DOWN)).doubleValue()+"元");
        BigDecimal extracted = extracted(contract,dto);
        System.out.println("金额========================="+extracted);
        fill(templateParam, "firstRent", "¥" + extracted + "元");
        // 其他财务字段
        fill(templateParam, "firstRentString", "人民币" + NumberToChineseUtils.numberToChinese(extracted.doubleValue()));
        fill(templateParam, "firstRentString",
                "人民币"+NumberToChineseUtils.numberToChinese(
                        (contract.getPayType().equals("1")
                                ? contract.getMonthRent()
                                :contract.getPayType().equals("2")
                                ?contract.getMonthRent().multiply(new BigDecimal("3"))
                                :contract.getMonthRent().multiply(new BigDecimal("12"))
                                .setScale(2, RoundingMode.DOWN)).doubleValue()));
//        fill(templateParam, "firstRent",
//                "¥"+(contract.getPayType().equals("1")
//                        ? contract.getMonthRent()
//                        :contract.getPayType().equals("2")
//                        ?contract.getMonthRent().multiply(new BigDecimal("3"))
//                        :contract.getMonthRent().multiply(new BigDecimal("12"))
//                        .setScale(2, RoundingMode.DOWN)).doubleValue()+"元");
//
//
//        fill(templateParam, "firstRentString",
//                "人民币"+NumberToChineseUtils.numberToChinese(
//                        (contract.getPayType().equals("1")
//                                ? contract.getMonthRent()
//                                :contract.getPayType().equals("2")
//                                ?contract.getMonthRent().multiply(new BigDecimal("3"))
//                                :contract.getMonthRent().multiply(new BigDecimal("12"))
//                                .setScale(2, RoundingMode.DOWN)).doubleValue()));
@@ -541,17 +536,35 @@
            fill(templateParam, "checkTime", "");
        }
        String url = "";
        if (StringUtils.isNotEmpty(contract.getSignature())){
            url = tencentCosUtil.downLoadFileImg(contract.getSignature());
        }
        return wordUtil.generatePdf(
                "/usr/local/project/file/",
                templateFileName,
                templateParam,
                "租赁合同",
                "/usr/local/project/file/");
                "/usr/local/project/file/",url);
    }
    private BigDecimal extracted(TContract contract) {
        List<TContractRentType> contractRentTypes = contractRentTypeService.list();
        TContractRentType tContractRentType = contractRentTypes.stream().filter(e -> e.getContractId().equals(contract.getId())).findFirst().orElse(null);
    private BigDecimal extracted(TContract contract,TContractDTO dto) {
        TContractRentType tContractRentType = null;
        if (contract.getIsIncreasing()){
            tContractRentType = contractRentTypeService.lambdaQuery().eq(TContractRentType::getContractId, contract.getId())
                    .last("limit 1").one();
            if (tContractRentType==null){
                tContractRentType = new TContractRentType();
                tContractRentType.setContractId(contract.getId());
                tContractRentType.setIncreasingDecreasing(dto.getIncreasingDecreasing());
                tContractRentType.setIncreasingDecreasingType(dto.getIncreasingDecreasingType());
                tContractRentType.setNumericalValue(dto.getNumericalValue());
                tContractRentType.setChangeTime(dto.getChangeTime());
                tContractRentType.setCycleTime(dto.getCycleTime());
            }
        }
        // 生成第一笔账单
        // 第一次应缴费日期
@@ -790,9 +803,70 @@
    @PostMapping("/generateContractPreview")
    public R<String> generateContractPreview(@RequestBody TContractDTO dto)
    {
        String contractName = dto.getContractName();
        if (StringUtils.isEmpty(contractName)){
            return R.fail("合同名称不能为空");
        }
        LocalDateTime startTime = dto.getStartTime();
        if (startTime == null){
            return R.fail("合同生效日期不能为空");
        }
        LocalDateTime endTime = dto.getEndTime();
        if (endTime == null){
            return R.fail("合同生效日期不能为空");
        }
        BigDecimal monthRent = dto.getMonthRent();
        if (monthRent == null){
            return R.fail("月租金不能为空");
        }
        BigDecimal deposit = dto.getDeposit();
        if (deposit == null){
            return R.fail("押金不能为空");
        }
        String payType = dto.getPayType();
        if (StringUtils.isEmpty(payType)){
            return R.fail("租金支付方式不能为空");
        }
        LocalDateTime startPayTime = dto.getStartPayTime();
        if (startPayTime == null){
            return R.fail("开始计费日期不能为空");
        }
        String partyOneName = dto.getPartyOneName();
        if (StringUtils.isEmpty(partyOneName)){
            return R.fail("甲方名称不能为空");
        }
        String partyOnePerson = dto.getPartyOnePerson();
        if (StringUtils.isEmpty(partyOnePerson)){
            return R.fail("甲方联系人不能为空");
        }
        String partyOnePhone = dto.getPartyOnePhone();
        if (StringUtils.isEmpty(partyOnePhone)){
            return R.fail("甲方联系电话不能为空");
        }
        String partyTwoName = dto.getPartyTwoName();
        if (StringUtils.isEmpty(partyTwoName)){
            return R.fail("乙方名称不能为空");
        }
        String partyTwoPerson = dto.getPartyTwoPerson();
        if (StringUtils.isEmpty(partyTwoPerson)){
            return R.fail("乙方联系人不能为空");
        }
        String partyTwoPhone = dto.getPartyTwoPhone();
        if (StringUtils.isEmpty(partyTwoPhone)){
            return R.fail("乙方联系电话不能为空");
        }
        TContract contract = new TContract();
        BeanUtil.copyProperties(dto,contract);
        return R.ok(generateContract(contract));
        return R.ok(generateContract(contract,dto));
    }
    /**