platformx-boot/src/main/resources/application-dev.yml
@@ -7,7 +7,7 @@ datasource: type: com.alibaba.druid.pool.DruidDataSource druid: url: jdbc:mysql://192.168.0.146:3306/platformxx_business_finance_biz?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true url: jdbc:mysql://192.168.0.146:3306/platformxx_business_finance_biz1?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver @@ -53,10 +53,10 @@ #bip 配置 bip: flag: false url: https://bip01.res.jzeg.cn codes: 111111111111111111111111,222222222222222222 appKey: 800b2805c5584f0abb8705acbe487dc5 appSecret: 59ba72c62a6a27203d7e517787a738be89ba55cb url: https://bip-pre.res.jzeg.cn/iuap-api-gateway codes: 10860,10802,10801,10861,10668,1086004,1086005 appKey: 95578dbdeabc41049b75e8af3dd66d19 appSecret: f3a098d7848f87042b39d2cc1645b6c0ffa065cd BWInvoice: flag: false @@ -64,7 +64,9 @@ # 5家单位id dept: smj: 2056555602756063234 smj: 2089995177814495234 smjsc: 2089996921978040321 smjzt: 2089997578009128962 sgb: 2056556196124250113 jxc: 2056556317461270529 tfgs: 2056556421857497090 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
@@ -248,6 +248,12 @@ @Schema(description = "付款方式") private String paymentMethod; @Schema(description = "简易合同附件URL") private String attachmentSimpleUrl; @Schema(description = "简易合同附件名称") private String attachmentSimpleName; private List<ContractPaymentScheduleAddDTO> contractPaymentSchedule; private List<ContractSubjectMatterAddDTO> contractSubjectMatter; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java
@@ -53,7 +53,7 @@ private Date tranDate; @Schema(description = "交易金额") @Column(columnDefinition = "decimal(10,2) comment '交易金额'") @Column(columnDefinition = "decimal(14,2) comment '交易金额'") private BigDecimal tranAmount; @Schema(description = "数据ID") @@ -73,7 +73,7 @@ private Long contractId; @Schema(description = "合同确认金额") @Column(columnDefinition = "decimal(10,2) comment '合同确认金额'") @Column(columnDefinition = "decimal(14,2) default 0.0 comment '合同确认金额'") private BigDecimal confirmAmount; @Schema(description = "交易说明") platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
@@ -55,7 +55,7 @@ private String partyB; @Schema(description = "合同金额") @Column(columnDefinition = "decimal(10,2) comment '合同金额'") @Column(columnDefinition = "decimal(20,2) comment '合同金额'") private BigDecimal amount; @Schema(description = "币种(CNY/USD等)") @@ -103,6 +103,14 @@ @Schema(description = "到期日期") @Column(columnDefinition = "date comment '到期日期'") private Date expirationDate; @Schema(description = "简易合同附件URL") @Column(columnDefinition = "VARCHAR(500) comment '简易合同附件URL'") private String attachmentSimpleUrl; @Schema(description = "简易合同附件名称") @Column(columnDefinition = "VARCHAR(100) comment '简易合同附件名称'") private String attachmentSimpleName; @Schema(description = "合同附件URL") @Column(columnDefinition = "VARCHAR(500) comment '合同附件URL'") @@ -152,7 +160,7 @@ private String billingStatus; @Schema(description = "已开票金额") @Column(columnDefinition = "decimal(10,2) comment '已开票金额'") @Column(columnDefinition = "decimal(20,2) comment '已开票金额'") private BigDecimal billingAmout; @Schema(description = "下一阶段") @@ -168,7 +176,7 @@ private String salesModel; @Schema(description = "已付款金额") @Column(columnDefinition = "decimal(10,2) comment '已付款金额'") @Column(columnDefinition = "decimal(20,2) comment '已付款金额'") private BigDecimal paidAmount; @Schema(description = "合同分类") platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
@@ -118,6 +118,14 @@ @Column(columnDefinition = "varchar(64) comment '关联请求ID'") private String bwRequestId; @Schema(description = "关联请求参数") @Column(columnDefinition = "text comment '关联请求参数'") private String bwRequestParam; @Schema(description = "请求结果") @Column(columnDefinition = "char comment '请求结果 0/失败 1/成功'") private String bwRequestResult; @Schema(description = "预收开票标识") @Column(columnDefinition = "char default '0' comment '0/否 1/是'") private String advanceFlag; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractPaymentSchedule.java
@@ -33,7 +33,7 @@ // ==================== 关联信息 ==================== @Schema(description = "关联合同ID") @Column(columnDefinition = "bigint not null comment '关联合同ID'") @Column(columnDefinition = "bigint comment '关联合同ID'") private Long contractId; @Schema(description = "合同名称") @@ -77,11 +77,11 @@ private BigDecimal paymentRatio; @Schema(description = "计划收款金额(根据合同总金额*比例自动计算)") @Column(columnDefinition = "decimal(10,2) comment '计划收款金额'") @Column(columnDefinition = "decimal(14,2) comment '计划收款金额'") private BigDecimal plannedAmount; @Schema(description = "实际收款金额") @Column(columnDefinition = "decimal(10,2) comment '实际收款金额'") @Column(columnDefinition = "decimal(14,2) comment '实际收款金额'") private BigDecimal actualAmount; // ==================== 时序控制 ==================== platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
@@ -3,7 +3,6 @@ import com.by4cloud.platformx.business.entity.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -241,6 +240,12 @@ private BigDecimal advancePayment; @Schema(description = "简易合同附件URL") private String attachmentSimpleUrl; @Schema(description = "简易合同附件名称") private String attachmentSimpleName; private List<ContractPaymentSchedule> contractPaymentSchedule; private List<ContractSubjectMatter> contractSubjectMatter; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/StatementContractVo.java
New file @@ -0,0 +1,30 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import java.math.BigDecimal; @Data public class StatementContractVo { private Long id; @Schema(description = "银行流水ID") private Long statetId; @Schema(description = "交易流水") private String bankSeqNo; @Schema(description = "合同ID") private Long contractId; @Schema(description = "合同确认金额") private BigDecimal confirmAmount; private String contractNo; private String partyA; private BigDecimal amount; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/SubjectMatterExcelVO.java
New file @@ -0,0 +1,37 @@ package com.by4cloud.platformx.business.vo; import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.by4cloud.platformx.common.excel.annotation.ExcelLine; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; @Data public class SubjectMatterExcelVO { /** * 导入时候回显行号 */ @ExcelLine @ExcelIgnore private Long lineNum; @ExcelProperty("标的物名称") private String materialName; @NotBlank(message = "erp编码不能为空") @ExcelProperty("erp编码") private String materialCode; @NotNull(message = "单价不能为空") @ExcelProperty("单价") private BigDecimal unitPrice; @NotNull(message = "数量不能为空") @ExcelProperty("数量") private BigDecimal quantity; } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java
@@ -120,4 +120,60 @@ public List<BankStatement> export(BankStatement bankStatement,Long[] ids) { return bankStatementService.list(Wrappers.lambdaQuery(bankStatement).in(ArrayUtil.isNotEmpty(ids), BankStatement::getId, ids)); } /** * 通过id查询银行流水历史确认 * @param id id * @return R */ @Operation(summary = "通过id查询银行流水历史确认" , description = "通过id查询银行流水历史确认" ) @GetMapping("/history/{id}" ) public R getHistoryById(@PathVariable("id" ) Long id) { return bankStatementService.getHistoryById(id); } /** * 通过id删除银行流水历史确认 * @param id id * @return R */ @Operation(summary = "通过id删除银行流水历史确认" , description = "通过id删除银行流水历史确认" ) @GetMapping("/itemDel/{id}" ) public R delHistoryById(@PathVariable("id" ) Long id) { return bankStatementService.delHistoryById(id); } /** * 通过id退回银行流水历史 * @param id id * @return R */ @Operation(summary = "通过id退回银行流水历史" , description = "通过id退回银行流水历史" ) @GetMapping("/backHis/{id}" ) public R backHis(@PathVariable("id" ) Long id) { return bankStatementService.backHis(id); } /** * 通过id退回银行流水余额 * @param id id * @return R */ @Operation(summary = "通过id退回银行流水余额" , description = "通过id退回银行流水余额" ) @GetMapping("/backBal/{id}" ) public R backBal(@PathVariable("id" ) Long id) { return bankStatementService.backBal(id); } /** * 通过id退回银行流水全部 * @param id id * @return R */ @Operation(summary = "通过id退回银行流水全部" , description = "通过id退回银行流水全部" ) @GetMapping("/backAll/{id}" ) public R backAll(@PathVariable("id" ) Long id) { return bankStatementService.backAll(id); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractController.java
@@ -89,6 +89,18 @@ return contractService.add(addDTO); } /** * 新增简易合同 * @param addDTO 合同管理 * @return R */ @Operation(summary = "新增简易合同" , description = "新增简易合同" ) @SysLog("新增简易合同" ) @PostMapping("/addSimple") public R addSimple(@RequestBody ContractAddDTO addDTO) { return contractService.addSimple(addDTO); } /** * 修改合同管理 * @param updateDTO 合同管理 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java
@@ -141,6 +141,15 @@ } /** * 重新开票 * @return */ @GetMapping("/refresh/{invoiceId}") public R refresh(@PathVariable("invoiceId")Long invoiceId) { return contractInvoiceService.refresh(invoiceId); } /** * 红票查询 * @return */ platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractSubjectMatterController.java
@@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.entity.ContractSubjectMatter; import com.by4cloud.platformx.business.vo.ProductExcelVO; import com.by4cloud.platformx.business.vo.SubjectMatterExcelVO; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.excel.annotation.RequestExcel; import com.by4cloud.platformx.common.log.annotation.SysLog; import com.by4cloud.platformx.business.service.ContractSubjectMatterService; import org.springframework.security.access.prepost.PreAuthorize; @@ -17,6 +20,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -136,4 +140,15 @@ public R selectSubjectMatter(@PathVariable("contractId" ) Long contractId) { return contractSubjectMatterService.selectSubjectMatter(contractId); } /** * 导入标的物 * @param excelVOList * @param bindingResult * @return */ @PostMapping("/importSubjectMatter") public R importSubjectMatter(@RequestExcel List<SubjectMatterExcelVO> excelVOList, BindingResult bindingResult) { return contractSubjectMatterService.importSubjectMatter(excelVOList, bindingResult); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java
@@ -8,4 +8,14 @@ public interface BankStatementService extends IIService<BankStatement> { R edit(BankStatementUpdateDTO updateDTO); R getHistoryById(Long id); R delHistoryById(Long id); R backBal(Long id); R backAll(Long id); R backHis(Long id); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java
@@ -32,4 +32,6 @@ Page pageScope(Page page, ContractQueryDTO queryDTO); R getContractHouseWater(Long contractId); R refresh(Long invoiceId); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractService.java
@@ -64,4 +64,6 @@ void exportContractSMJGYPMMWord(Long id, HttpServletResponse response); void exportContractJXCXSWord(Long id, HttpServletResponse response); R addSimple(ContractAddDTO addDTO); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractSubjectMatterService.java
@@ -2,11 +2,17 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.by4cloud.platformx.business.entity.ContractSubjectMatter; import com.by4cloud.platformx.business.vo.SubjectMatterExcelVO; import com.by4cloud.platformx.common.core.util.R; import org.springframework.validation.BindingResult; import java.util.List; public interface ContractSubjectMatterService extends IService<ContractSubjectMatter> { R selectSubjectMatterProcess(Long id); R selectSubjectMatter(Long contractId); R importSubjectMatter(List<SubjectMatterExcelVO> excelVOList, BindingResult bindingResult); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java
@@ -6,8 +6,10 @@ import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.admin.api.entity.SysDept; import com.by4cloud.platformx.admin.api.feign.RemoteDeptService; @@ -20,8 +22,10 @@ import com.by4cloud.platformx.business.mapper.ContractMapper; import com.by4cloud.platformx.business.service.BankStatementService; import com.by4cloud.platformx.business.service.PaymentConfirmService; import com.by4cloud.platformx.business.vo.StatementContractVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.security.util.SecurityUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -30,6 +34,7 @@ import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; /** * 银行流水 @@ -52,8 +57,8 @@ @Value("${bip.url}") private String url; @Value("${BWInvoice.flag}") private Boolean bwFlag; @Value("${bip.flag}") private Boolean bipFlag; @Override public R edit(BankStatementUpdateDTO updateDTO) { @@ -66,6 +71,15 @@ if (toPaidTotal.compareTo(statement.getTranAmount().subtract(statement.getConfirmAmount()))>0){ return R.failed("确认收款总额不能超过交易流水金额"); } //bip推送 if (bipFlag) { R r = pushSaveCollection(statement, updateDTO.getContractCollectionList()); if (!r.isOk()){ return r; } } statement.setConfirmAmount(statement.getConfirmAmount().add(toPaidTotal)); baseMapper.updateById(statement); @@ -88,16 +102,10 @@ paymentConfirmService.add(addDTO); }); //bip推送 if (bwFlag) { pushSaveCollection(statement, updateDTO.getContractCollectionList()); } return R.ok(); } private void pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) { private R pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) { String accessToken = ""; if (redisTemplate.hasKey("BIP_TOKEN")) { accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN"); @@ -106,27 +114,33 @@ } if (StrUtil.isEmpty(accessToken)) { log.error("bip accessToken 获取异常"); return; return R.failed("bip accessToken 获取异常"); } String finalAccessToken = accessToken; BusinessCustomer customer = businessCustomerMapper.selectById(statement.getBusGuestId()); if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){ log.error("查询客户信息异常"); return; return R.failed("查询客户信息异常"); } R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId()); log.info("查询单位信息:{}",JSONObject.toJSONString(r.getData())); if (!r.isOk()){ log.error("查询单位信息异常"); return; return R.failed("查询单位信息异常"); } SysDept dept = r.getData(); JSONObject params = genRequestParam(statement,dept,customer,contractDTOList); log.info("收款单集成 Request:{}", params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/collection/saveandsubmit?access_token=" + finalAccessToken, params.toJSONString()); log.info("收款单集成 Response:{}", result); JSONObject resultJson = JSONObject.parseObject(result); if (!resultJson.getString("code").equals("200")) { return R.failed(resultJson.getString("message")); } return R.ok(); } private JSONObject genRequestParam(BankStatement statement,SysDept dept,BusinessCustomer customer,List<StatementContractDTO> contractDTOList) { @@ -139,8 +153,10 @@ data.put("customerCode",customer.getBipCode());//客户编码 data.put("financeOrgCode",dept.getBipCode());//开票组织编码 data.put("orgCode",dept.getBipCode());//业务组织编码 data.put("bustypeCode","");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT data.put("bustypeCode","ar_colsale");// TODO 交易类型编码 暂估默认ZGYSFP,装备默认ZBYXGLXT暂时不能用 data.put("oriCurrencyCode","CNY");//币种 data.put("srcBillType","38"); data.put("srcBillNo",statement.getBankSeqNo()); data.put("_status","Insert"); JSONArray bodyItem = new JSONArray(); for (StatementContractDTO statementContractDTO:contractDTOList) { @@ -156,4 +172,300 @@ jsonObject.put("data",data); return jsonObject; } @Override public R getHistoryById(Long id) { MPJLambdaWrapper<BankStatementItem> wrapper = new MPJLambdaWrapper<BankStatementItem>() .selectAll(BankStatementItem.class) .select(Contract::getContractNo) .select(Contract::getPartyA) .select(Contract::getAmount) .leftJoin(Contract.class,Contract::getId,BankStatementItem::getContractId) .eq(BankStatementItem::getCompId,SecurityUtils.getUser().getCompId()) .orderByDesc(BankStatementItem::getCreateTime); return R.ok(bankStatementItemMapper.selectJoinList(StatementContractVo.class, wrapper)); } @Override public R delHistoryById(Long id) { BankStatementItem statement = bankStatementItemMapper.selectById(id); BankStatement bankStatement = baseMapper.selectById(statement.getStatetId()); Contract contract = contractMapper.selectById(statement.getContractId()); if (ObjUtil.isNull(contract)){ return R.failed("合同信息异常"); } BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId()); if (ObjUtil.isNull(customer)){ return R.failed("客户信息信息异常"); } R<SysDept> r = remoteDeptService.getById(contract.getPartyBId()); if (!r.isOk()){ return r; } //bip推送 if (bipFlag) { String accessToken = ""; if (redisTemplate.hasKey("BIP_TOKEN")) { accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN"); } else { accessToken = paymentConfirmService.getAccessToken(accessToken); } if (StrUtil.isEmpty(accessToken)) { log.error("bip accessToken 获取异常"); return R.failed("bip accessToken 获取异常"); } String finalAccessToken = accessToken; JSONObject request = genRefundParam(bankStatement,statement, contract, customer, r.getData()); log.info("收款退款单-退款单一历史确认请求入参:{}", request.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString()); log.info("收款退款单-退款单一历史确认请求回参:{}", result); JSONObject resultJson = JSONObject.parseObject(result); if (!resultJson.getString("code").equals("200")) { return R.failed(resultJson.getString("message")); } } bankStatementItemMapper.deleteById(id); bankStatement.setConfirmAmount(bankStatement.getConfirmAmount().subtract(statement.getConfirmAmount())); baseMapper.updateById(bankStatement); return R.ok(); } private JSONObject genRefundParam(BankStatement bankStatement,BankStatementItem statement, Contract contract,BusinessCustomer customer, SysDept dept) { JSONObject jsonObject = new JSONObject(); JSONObject data = new JSONObject(); data.put("billDate",DateUtil.now()); data.put("exchangeRate","1");//汇率 data.put("exchangeRateDate",DateUtil.now());//汇率时间 data.put("objectType","1"); data.put("customerCode",customer.getBipCode());//客户编码 data.put("financeOrgCode",dept.getBipCode());//开票组织编码 data.put("orgCode",dept.getBipCode());//业务组织编码 data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT data.put("oriCurrencyCode","CNY");//币种 data.put("srcBillType","38"); data.put("srcBillNo",bankStatement.getBankSeqNo()); data.put("_status","Insert"); JSONArray bodyItem = new JSONArray(); JSONObject item = new JSONObject(); item.put("oriTaxIncludedAmount", statement.getConfirmAmount()); item.put("contractNo", contract.getContractNo()); item.put("quickTypeCode", "1"); item.put("_status", "Insert"); bodyItem.add(item); data.put("bodyItem",bodyItem); jsonObject.put("data",data); return jsonObject; } @Override public R backBal(Long id) { BankStatement bankStatement = baseMapper.selectById(id); BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId()); if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){ log.error("查询客户信息异常"); return R.failed("查询客户信息异常"); } R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId()); if (!r.isOk()){ log.error("查询单位信息异常"); return R.failed("查询单位信息异常"); } SysDept dept = r.getData(); List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery() .eq(BankStatementItem::getStatetId,id)); if (bipFlag){ String accessToken = ""; if (redisTemplate.hasKey("BIP_TOKEN")) { accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN"); } else { accessToken = paymentConfirmService.getAccessToken(accessToken); } if (StrUtil.isEmpty(accessToken)) { log.error("bip accessToken 获取异常"); return R.failed("bip accessToken 获取异常"); } String finalAccessToken = accessToken; JSONObject request = genBackBalParam(bankStatement,customer,dept,items); log.info("收款退款单-退款余额请求入参:{}", request.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString()); log.info("收款退款单-退款余额请求回参:{}", result); JSONObject resultJson = JSONObject.parseObject(result); if (!resultJson.getString("code").equals("200")) { return R.failed(resultJson.getString("message")); } } bankStatement.setTranAmount(bankStatement.getConfirmAmount()); baseMapper.updateById(bankStatement); return R.ok(); } private JSONObject genBackBalParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) { JSONObject jsonObject = new JSONObject(); JSONObject data = new JSONObject(); data.put("billDate",DateUtil.now()); data.put("exchangeRate","1");//汇率 data.put("exchangeRateDate",DateUtil.now());//汇率时间 data.put("objectType","1"); data.put("customerCode",customer.getBipCode());//客户编码 data.put("financeOrgCode",dept.getBipCode());//开票组织编码 data.put("orgCode",dept.getBipCode());//业务组织编码 data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT data.put("oriCurrencyCode","CNY");//币种 data.put("srcBillType","38"); data.put("srcBillNo",bankStatement.getBankSeqNo()); data.put("_status","Insert"); JSONArray bodyItem = new JSONArray(); JSONObject item = new JSONObject(); item.put("oriTaxIncludedAmount", bankStatement.getTranAmount().subtract(bankStatement.getConfirmAmount())); item.put("quickTypeCode", "1"); item.put("_status", "Insert"); bodyItem.add(item); data.put("bodyItem",bodyItem); jsonObject.put("data",data); return jsonObject; } @Override public R backAll(Long id) { BankStatement bankStatement = baseMapper.selectById(id); BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId()); if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){ log.error("查询客户信息异常"); return R.failed("查询客户信息异常"); } R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId()); if (!r.isOk()){ log.error("查询单位信息异常"); return R.failed("查询单位信息异常"); } SysDept dept = r.getData(); List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery() .eq(BankStatementItem::getStatetId,id)); if (bipFlag){ String accessToken = ""; if (redisTemplate.hasKey("BIP_TOKEN")) { accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN"); } else { accessToken = paymentConfirmService.getAccessToken(accessToken); } if (StrUtil.isEmpty(accessToken)) { log.error("bip accessToken 获取异常"); return R.failed("bip accessToken 获取异常"); } String finalAccessToken = accessToken; JSONObject request = genBackAllParam(bankStatement,customer,dept,items); log.info("收款退款单-退款所有请求入参:{}", request.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString()); log.info("收款退款单-退款所有请求回参:{}", result); JSONObject resultJson = JSONObject.parseObject(result); if (!resultJson.getString("code").equals("200")) { return R.failed(resultJson.getString("message")); } } bankStatement.setConfirmAmount(new BigDecimal("0")); baseMapper.updateById(bankStatement); return R.ok(); } private JSONObject genBackAllParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) { JSONObject jsonObject = new JSONObject(); JSONObject data = new JSONObject(); data.put("billDate",DateUtil.now()); data.put("exchangeRate","1");//汇率 data.put("exchangeRateDate",DateUtil.now());//汇率时间 data.put("objectType","1"); data.put("customerCode",customer.getBipCode());//客户编码 data.put("financeOrgCode",dept.getBipCode());//开票组织编码 data.put("orgCode",dept.getBipCode());//业务组织编码 data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT data.put("oriCurrencyCode","CNY");//币种 data.put("srcBillType","38"); data.put("srcBillNo",bankStatement.getBankSeqNo()); data.put("_status","Insert"); JSONArray bodyItem = new JSONArray(); JSONObject item = new JSONObject(); item.put("oriTaxIncludedAmount", bankStatement.getTranAmount()); item.put("quickTypeCode", "1"); item.put("_status", "Insert"); bodyItem.add(item); data.put("bodyItem",bodyItem); jsonObject.put("data",data); return jsonObject; } @Override public R backHis(Long id) { BankStatement bankStatement = baseMapper.selectById(id); BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId()); if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){ log.error("查询客户信息异常"); return R.failed("查询客户信息异常"); } R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId()); if (!r.isOk()){ log.error("查询单位信息异常"); return R.failed("查询单位信息异常"); } SysDept dept = r.getData(); List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery() .eq(BankStatementItem::getStatetId,id)); if (bipFlag){ String accessToken = ""; if (redisTemplate.hasKey("BIP_TOKEN")) { accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN"); } else { accessToken = paymentConfirmService.getAccessToken(accessToken); } if (StrUtil.isEmpty(accessToken)) { log.error("bip accessToken 获取异常"); return R.failed("bip accessToken 获取异常"); } String finalAccessToken = accessToken; JSONObject request = genBackHisParam(bankStatement,customer,dept,items); log.info("收款退款单-退款历史确认请求入参:{}", request.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString()); log.info("收款退款单-退款历史确认请求回参:{}", result); JSONObject resultJson = JSONObject.parseObject(result); if (!resultJson.getString("code").equals("200")) { return R.failed(resultJson.getString("message")); } } bankStatement.setConfirmAmount(new BigDecimal("0")); baseMapper.updateById(bankStatement); bankStatementItemMapper.deleteByIds(items.stream().map(item->item.getId()).collect(Collectors.toList())); return R.ok(); } private JSONObject genBackHisParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept,List<BankStatementItem> items) { JSONObject jsonObject = new JSONObject(); JSONObject data = new JSONObject(); data.put("billDate",DateUtil.now()); data.put("exchangeRate","1");//汇率 data.put("exchangeRateDate",DateUtil.now());//汇率时间 data.put("objectType","1"); data.put("customerCode",customer.getBipCode());//客户编码 data.put("financeOrgCode",dept.getBipCode());//开票组织编码 data.put("orgCode",dept.getBipCode());//业务组织编码 data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT data.put("oriCurrencyCode","CNY");//币种 data.put("srcBillType","38"); data.put("srcBillNo",bankStatement.getBankSeqNo()); data.put("_status","Insert"); JSONArray bodyItem = new JSONArray(); for (BankStatementItem statementItem:items) { Contract contract = contractMapper.selectById(statementItem.getContractId()); JSONObject item = new JSONObject(); item.put("oriTaxIncludedAmount", statementItem.getConfirmAmount()); item.put("contractNo", contract.getContractNo()); item.put("quickTypeCode", "1"); item.put("_status", "Insert"); bodyItem.add(item); } data.put("bodyItem",bodyItem); jsonObject.put("data",data); return jsonObject; } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
@@ -507,7 +507,7 @@ ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId()); contractOutBound.setInvoiceStatus("1"); if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum())) <= 0) { contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum())); contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().add(contractOutBoundInvoiceVo.getInvoiceNum())); } contractOutBoundMapper.updateById(contractOutBound); }); @@ -550,11 +550,13 @@ JSONObject invoiceDetail = new JSONObject(); invoiceDetail.put("goodsLineNo", lineNo); invoiceDetail.put("goodsName", invoiceItemVo.getItemName()); invoiceDetail.put("projectName", invoiceItemVo.getItemName()); invoiceDetail.put("goodsCode", invoiceItemVo.getTaxCode()); invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100"))); invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit()); invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity()); invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice()); // invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice()); if (!StrUtil.equals(vo.getContractCategory(), "water_house")) { invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax()); } else { @@ -565,7 +567,7 @@ invoiceDetailsList.add(invoiceDetail); lineNo++; } jsonObject.put("invoiceDetailsList", invoiceDetailsList); data.put("invoiceDetailsList", invoiceDetailsList); //购方 data.put("buyerTaxNo", vo.getPartyAOrgCode()); data.put("buyerName", vo.getPartyA()); @@ -691,7 +693,7 @@ invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100"))); invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit()); invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity()); invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice()); // invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice()); invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax().multiply(new BigDecimal("-1"))); invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax().multiply(new BigDecimal("-1"))); invoiceDetailsList.add(invoiceDetail); @@ -706,19 +708,22 @@ public R queryBlueInvoice() { if (bwFlag) { List<ContractInvoice> contractInvoices = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery() .eq(ContractInvoice::getInvoiceCategory, "1").eq(ContractInvoice::getInvoiceStatus, "1")); .eq(ContractInvoice::getApprovalStatus, "1") .eq(ContractInvoice::getBwRequestResult,"1") .isNull(ContractInvoice::getInvoicePath)); if (ArrayUtil.isNotEmpty(contractInvoices)) { contractInvoices.stream().forEach(contractInvoice -> { JSONObject request = new JSONObject(); request.put("taxNo", contractInvoice.getTaxNo()); JSONObject data = new JSONObject(); data.put("taxNo", contractInvoice.getSerialNo()); data.put("serialNo", contractInvoice.getSerialNo()); data.put("returnType", "3"); data.put("invoiceIssueMode", "1"); request.put("data",data); String requestId = IdUtil.fastUUID(); log.info("serial_no:{},发票查询入参:{},", contractInvoice.getSerialNo(), request.toJSONString()); String result = HttpUtil.post("method=baiwang.output.format.query&version=1.0&request_id=" + requestId, request.toJSONString()); String result = HttpUtil.post(bwUrl+"method=baiwang.output.format.query&version=1.0&request_id=" + requestId, request.toJSONString()); log.info("serial_no:{},发票查询回参:{},", contractInvoice.getSerialNo(), result); saveBwRequestRecord("baiwang.output.format.query", requestId, request.toJSONString(), result); JSONObject resultObj = JSONObject.parseObject(result); @@ -728,8 +733,6 @@ contractInvoice.setInvoiceStatus("2"); baseMapper.updateById(contractInvoice); } //推送BIP pushBipInvoice(contractInvoice); }); } } @@ -768,11 +771,11 @@ JSONObject params = genBlueReceiveParams(contractInvoice, contract, customer, dept); String finalAccessToken = accessToken; log.info("XSJZ_YS_DJ_INSERT Request:{}", params.toJSONString()); log.info("应收发票集成入参:{}", params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString()); log.info("XSJZ_YS_DJ_INSERT Response:{}", result); log.info("应收发票集成回参:{}", result); //保存请求记录 paymentConfirmService.saveBipRequestRecord(params, "< XSJZ_YS_DJ_001>-应收发票保存接口", result); paymentConfirmService.saveBipRequestRecord(params, "应收发票集成接口", result); JSONObject resultJson = JSONObject.parseObject(result); if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) { JSONObject data = resultJson.getJSONObject("data"); @@ -787,11 +790,11 @@ JSONObject params = genRedReceiveParams(contractInvoice); String finalAccessToken = accessToken; log.info("XSJZ_YS_DJ_DELETE Request:", params.toJSONString()); log.info("应收发票删除入参:{}", params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/receivable/delete?access_token=" + finalAccessToken, params.toJSONString()); log.info("XSJZ_YS_DJ_DELETE Response:{}", result); log.info("应收发票删除回参:{}", result); //保存请求记录 paymentConfirmService.saveBipRequestRecord(params, "< XSJZ_YS_DJ_002>-应收发票删除接口", result); paymentConfirmService.saveBipRequestRecord(params, "应收发票删除接口", result); JSONObject resultJson = JSONObject.parseObject(result); if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) { contractInvoice.setBipPush("1"); @@ -898,6 +901,7 @@ vo.setContractCategory(contract.getContractCategory()); invoice.setApprovalStatus("1"); baseMapper.updateById(invoice); invoice.setBwRequestResult("0"); //蓝票 if (invoice.getInvoiceCategory().equals("1")) { // TODO 开蓝票接口 @@ -905,23 +909,29 @@ if (bwFlag) { String requestId = IdUtil.fastUUID(); invoice.setBwRequestId(requestId); log.info("蓝票请求接口入参", request.toJSONString()); invoice.setBwRequestResult("1"); invoice.setBwRequestParam(request.toJSONString()); log.info("蓝票请求接口入参:{}", request.toJSONString()); String result = HttpUtil.post(bwUrl + "method=baiwang.output.invoice.issue&version=1.0&requestId=" + requestId, request.toJSONString()); log.info("蓝票请求接口回参", result); log.info("蓝票请求接口回参:{}", result); saveBwRequestRecord("baiwang.output.invoice.issue", requestId, request.toJSONString(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && !resultObj.getBoolean("success")) { log.error("开票失败!!!"); return; resultObj.getBoolean("success")) { log.info("开票成功!!!"); invoice.setBwRequestResult("1"); } JSONObject modelJson = resultObj.getJSONObject("model"); JSONArray models = modelJson.getJSONArray("success"); if (ArrayUtil.isNotEmpty(models)) { JSONObject model = (JSONObject) models.get(0); Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN); invoice.setInvoiceTime(invoiceDate); invoice.setInvoiceNo(model.getString("invoiceNo")); if (ObjUtil.isNotNull(modelJson)) { JSONArray models = modelJson.getJSONArray("success"); if (CollUtil.isNotEmpty(models)) { JSONObject model = (JSONObject) models.get(0); Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN); invoice.setInvoiceTime(invoiceDate); invoice.setInvoiceNo(model.getString("invoiceNo")); //推送BIP pushBipInvoice(invoice); } } } if (StrUtil.isNotBlank(vo.getAdvanceInvoice())){ @@ -938,6 +948,13 @@ } if (contract.getBillingAmout().compareTo(contract.getAmount()) < 0) { contract.setBillingStatus("1"); List<ContractOutBound> outBoundList = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery() .eq(ContractOutBound::getContractId,contract.getId()) .apply("invoice_num < out_bound_num")); if (CollUtil.isNotEmpty(outBoundList)){ contract.setBillingStatus("2"); } } //防止重复审开票审核通过后 开票金额超出合同金额 if (contract.getBillingAmout().compareTo(contract.getAmount()) > 0) { @@ -979,6 +996,7 @@ } contractMapper.updateById(contract); } baseMapper.updateById(invoice); } //红票 if (invoice.getInvoiceCategory().equals("2")) { @@ -987,6 +1005,7 @@ JSONObject request = genRedInvoice(contract, blueInvoice, invoice.getSerialNo()); String requestId = IdUtil.fastUUID(); invoice.setBwRequestId(requestId); invoice.setBwRequestParam(request.toJSONString()); if (bwFlag) { log.info("红字确认单请求接口入参:{}", request.toJSONString()); String result = HttpUtil.post(bwUrl + "method=baiwang.output.redinvoice.add&version=1.0&requestId=" + requestId, request.toJSONString()); @@ -994,12 +1013,13 @@ saveBwRequestRecord("baiwang.output.redinvoice.add", requestId, request.toJSONString(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && !resultObj.getBoolean("success")) { log.error("红字确认单失败!!!"); return; resultObj.getBoolean("success")) { log.info("红字确认单成功!!!"); invoice.setBwRequestResult("1"); } JSONArray models = resultObj.getJSONArray("model"); if (ArrayUtil.isNotEmpty(models)) { if (CollUtil.isNotEmpty(models)) { JSONObject model = (JSONObject) models.get(0); if (StrUtil.isEmpty(model.getString("confirmBillingMark")) || StrUtil.equals(model.getString("confirmBillingMark"), "N")) { @@ -1014,6 +1034,7 @@ } } } baseMapper.updateById(invoice); contract.setBillingAmout(contract.getBillingAmout().subtract(invoice.getInvoiceTotalPriceTax())); //防止重复审开票审核通过后 开票金额为负 if (contract.getBillingAmout().compareTo(new BigDecimal("0")) < 0) { @@ -1120,4 +1141,77 @@ public Page pageScope(Page page, ContractQueryDTO queryDTO) { return baseMapper.pageScope(page, queryDTO, DataScope.of("comp_id")); } @Override public R refresh(Long invoiceId) { ContractInvoice invoice = baseMapper.selectById(invoiceId); //蓝票 if (invoice.getInvoiceCategory().equals("1")) { // TODO 开蓝票接口 if (bwFlag) { String requestId = IdUtil.fastUUID(); invoice.setBwRequestId(requestId); invoice.setBwRequestResult("1"); invoice.setBwRequestParam(invoice.getBwRequestParam()); log.info("蓝票请求接口入参:{}", invoice.getBwRequestParam()); String result = HttpUtil.post(bwUrl + "method=baiwang.output.invoice.issue&version=1.0&requestId=" + requestId, invoice.getBwRequestParam()); log.info("蓝票请求接口回参:{}", result); saveBwRequestRecord("baiwang.output.invoice.issue", requestId, invoice.getBwRequestParam(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && !resultObj.getBoolean("success")) { log.error("开票失败!!!"); return R.failed(resultObj.getString("message")); } invoice.setBwRequestResult("1"); JSONObject modelJson = resultObj.getJSONObject("model"); JSONArray models = modelJson.getJSONArray("success"); if (CollUtil.isNotEmpty(models)) { JSONObject model = (JSONObject) models.get(0); Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN); invoice.setInvoiceTime(invoiceDate); invoice.setInvoiceNo(model.getString("invoiceNo")); //推送BIP pushBipInvoice(invoice); } } } //红票 if (invoice.getInvoiceCategory().equals("2")) { // TODO 开红票接口 String requestId = IdUtil.fastUUID(); invoice.setBwRequestId(requestId); invoice.setBwRequestParam(invoice.getBwRequestParam()); if (bwFlag) { log.info("红字确认单请求接口入参:{}", invoice.getBwRequestParam()); String result = HttpUtil.post(bwUrl + "method=baiwang.output.redinvoice.add&version=1.0&requestId=" + requestId, invoice.getBwRequestParam()); log.info("红字确认单请求接口回参:{}", result); saveBwRequestRecord("baiwang.output.redinvoice.add", requestId, invoice.getBwRequestParam(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && !resultObj.getBoolean("success")) { log.error("红字确认单成功!!!"); return R.failed(resultObj.getString("message")); } invoice.setBwRequestResult("1"); JSONArray models = resultObj.getJSONArray("model"); if (ArrayUtil.isNotEmpty(models)) { JSONObject model = (JSONObject) models.get(0); if (StrUtil.isEmpty(model.getString("confirmBillingMark")) || StrUtil.equals(model.getString("confirmBillingMark"), "N")) { //等待确认 invoice.setRedReversal("3"); } else if (StrUtil.equals(model.getString("confirmBillingMark"), "Y")) { //确认即开 invoice.setInvoiceNo(model.getString("redInvoiceNo")); invoice.setRedReversal("1"); //推送BIP pushBipInvoice(invoice); } } } } baseMapper.updateById(invoice); return R.ok(); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -103,6 +103,12 @@ @Value("${dept.smj}") private String smj; @Value("${dept.smjsc}") private String smjsc; @Value("${dept.smjzt}") private String smjzt; @Value("${dept.sgb}") private String sgb; @@ -163,7 +169,8 @@ return R.failed("标的物不能为空"); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){ if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)|| StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){ contract.setContractNo(generateSMJContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){ @@ -286,7 +293,8 @@ contract.setPaidAmount(new BigDecimal("0")); contract.setBillingAmout(new BigDecimal("0")); contract.setNickName(SecurityUtils.getUser().getNickname()); if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){ if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)|| StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){ contract.setContractNo(generateSMJContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){ @@ -423,6 +431,12 @@ @Override public R startApproval(Long id) { Contract contract = baseMapper.selectById(id); //简易合同无法继续后续操作 if (StrUtil.equals(contract.getContractCategory(), "simple")){ return R.failed("请补充标的物和收款阶段后再进行操作!"); } //启动流程 ProcessInstanceParamDto dto = new ProcessInstanceParamDto(); Map<String, Object> map = BeanUtil.beanToMap(contract); @@ -441,6 +455,7 @@ Contract contract = baseMapper.selectById(id); contract.setContractStatus(2); baseMapper.updateById(contract); List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery() .eq(ContractSubjectMatter::getContractId,id)); @@ -968,7 +983,8 @@ newContract.setErpPushFlag("0"); newContract.setContractStatus(0); newContract.setBillingAmout(new BigDecimal("0")); if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){ if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)|| StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){ newContract.setContractNo(generateSMJContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){ @@ -2216,4 +2232,42 @@ e.printStackTrace(); } } @Override public R addSimple(ContractAddDTO addDTO) { Contract contract = BeanUtil.copyProperties(addDTO, Contract.class); contract.setPartyBId(SecurityUtils.getUser().getCompId()); contract.setPartyB(SecurityUtils.getUser().getCompName()); if (StrUtil.isEmpty(addDTO.getPartyA())){ BusinessCustomer bc = businessCustomerMapper.selectById(addDTO.getPartyAId()); if (ObjUtil.isNotNull(bc)){ contract.setPartyA(bc.getCompanyName()); } } contract.setPaidAmount(new BigDecimal("0")); contract.setBillingStatus("1"); contract.setBillingAmout(new BigDecimal("0")); contract.setErpPushFlag("0"); contract.setNickName(SecurityUtils.getUser().getNickname()); if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)|| StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){ contract.setContractNo(generateSMJContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){ contract.setContractNo(generateGYBContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){ contract.setContractNo(generateYMJContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){ contract.setContractNo(generateTFContractNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){ contract.setContractNo(generateJXCContractNo()); } baseMapper.insert(contract); return R.ok(); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractSubjectMatterServiceImpl.java
@@ -1,19 +1,33 @@ package com.by4cloud.platformx.business.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.admin.api.entity.SysDept; import com.by4cloud.platformx.admin.api.vo.DeptExcelVO; import com.by4cloud.platformx.business.dto.ContractSubjectMatterAddDTO; import com.by4cloud.platformx.business.entity.ContractSubjectMatter; import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.business.mapper.ContractSubjectMatterMapper; import com.by4cloud.platformx.business.mapper.ProductMapper; import com.by4cloud.platformx.business.service.ContractSubjectMatterService; import com.by4cloud.platformx.business.vo.ContractSubjectMatterVo; import com.by4cloud.platformx.business.vo.SubjectMatterExcelVO; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.datascope.DataScope; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.by4cloud.platformx.common.excel.vo.ErrorMessage; import com.by4cloud.platformx.common.security.util.SecurityUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.validation.BindingResult; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 合同标的物明细表 @@ -22,7 +36,11 @@ * @date 2026-04-29 16:39:29 */ @Service @RequiredArgsConstructor public class ContractSubjectMatterServiceImpl extends ServiceImpl<ContractSubjectMatterMapper, ContractSubjectMatter> implements ContractSubjectMatterService { private final ProductMapper productMapper; @Override public R selectSubjectMatterProcess(Long id) { MPJLambdaWrapper<ContractSubjectMatter> wrapper = new MPJLambdaWrapper<ContractSubjectMatter>() @@ -38,4 +56,41 @@ return R.ok(baseMapper.selectListByScope(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId,contractId) .orderByAsc(ContractSubjectMatter::getCreateTime), DataScope.of("comp_id"))); } @Override public R importSubjectMatter(List<SubjectMatterExcelVO> excelVOList, BindingResult bindingResult) { List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget(); List<ContractSubjectMatterAddDTO> addDTOList = new ArrayList<>(); for (SubjectMatterExcelVO item : excelVOList) { Set<String> errorMsg = new HashSet<>(); Product one = productMapper.selectOne(Wrappers.<Product>lambdaQuery() .eq(Product::getErpCode, item.getMaterialCode()) .eq(Product::getCompId, SecurityUtils.getUser().getCompId())); if (one == null) { errorMsg.add(item.getMaterialCode()+"erp编码不存在"); } if (CollUtil.isEmpty(errorMsg)) { ContractSubjectMatterAddDTO addDTO = new ContractSubjectMatterAddDTO(); addDTO.setMaterialCode(item.getMaterialCode()); addDTO.setMaterialInternalName(one.getProductName()); addDTO.setMaterialName(item.getMaterialName()); addDTO.setUnitPrice(item.getUnitPrice()); addDTO.setQuantity(item.getQuantity()); addDTO.setSpecification(one.getProductType()); addDTOList.add(addDTO); } else { // 数据不合法情况 errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg)); } } if (CollUtil.isNotEmpty(errorMessageList)) { return R.failed(errorMessageList,"部门导入失败"); } return R.ok(addDTOList, "部门导入成功"); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -50,6 +50,12 @@ @Value("${dept.smj}") private String smj; @Value("${dept.smjsc}") private String smjsc; @Value("${dept.smjzt}") private String smjzt; @Value("${dept.sgb}") private String sgb; @@ -102,7 +108,8 @@ //出库 addDTO.getSubjectMatterList().stream().forEach(outSubjectMatterAddDTO -> { OutBound outBound = BeanUtil.copyProperties(outSubjectMatterAddDTO, OutBound.class); if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){ if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)|| StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){ outBound.setBatchNumber(generateSMJContractCKNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){ @@ -545,7 +552,8 @@ contractSubjectMatterMapper.updateById(subjectMatter); // OutBound outBound = new OutBound(); if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){ if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)|| StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){ outBound.setBatchNumber(generateSMJContractCKNo()); } if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){ platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -528,7 +528,7 @@ throw new RuntimeException(e); } log.info("银行流水查询 Request:{}", params.toJSONString()); String result = HttpUtil.post(url + "/iuap-api-auth/yonbip/ctm/cmp/bankReconciliationQuery?access_token=" + finalAccessToken, params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/ctm/cmp/bankReconciliationQuery?access_token=" + finalAccessToken, params.toJSONString()); log.info("银行流水查询 Response:{}", result); //保存请求记录 saveBipRequestRecord(params, "银行流水查询接口", result); @@ -558,7 +558,7 @@ } catch (InvalidKeyException e) { throw new RuntimeException(e); } String getTokenResult = HttpUtil.get(url + "/iuap-api-auth/open-auth/selfAppAuth/getAccessToken?appKey=" + appKey + "×tamp=" + timestamp String getTokenResult = HttpUtil.get(url + "/open-auth/selfAppAuth/getAccessToken?appKey=" + appKey + "×tamp=" + timestamp + "&signature=" + signature); log.info("Get access_token Response:{}", getTokenResult); JSONObject tokenJson = JSONObject.parseObject(getTokenResult); platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml
@@ -44,21 +44,21 @@ SELECT sum(ci.invoice_total_price_tax) FROM contract_invoice ci WHERE ci.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND ci.invoice_time >= CURDATE() AND ci.invoice_time < DATE_ADD(CURDATE(), INTERVAL 1 DAY )) smjbr, ( SELECT sum(ci.invoice_total_price_tax) FROM contract_invoice ci WHERE ci.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND ci.invoice_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND ci.invoice_time < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) smjby, ( SELECT sum(ci.invoice_total_price_tax) FROM contract_invoice ci WHERE ci.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND ci.invoice_time >= DATE_FORMAT(CURDATE(), '%Y-01-01') AND ci.invoice_time < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01')) smjbn, ( platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml
@@ -1178,7 +1178,7 @@ contract c WHERE c.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND c.sign_date >= CURDATE() AND c.sign_date < DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr, ( @@ -1188,7 +1188,7 @@ contract c WHERE c.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND c.sign_date >=DATE_FORMAT( CURDATE(), '%Y-%m-01' ) AND c.sign_date < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby, ( @@ -1198,7 +1198,7 @@ contract c WHERE c.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND c.sign_date >=DATE_FORMAT( CURDATE(), '%Y-01-01' ) AND c.sign_date < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn, ( platformx-business-finance-biz/src/main/resources/mapper/ContractOutBoundMapper.xml
@@ -74,7 +74,7 @@ cob.del_flag = '0' AND cob.contract_id = csm.contract_id AND cob.subject_matter_code = csm.material_code AND cob.comp_id = 2056555602756063234 AND cob.comp_id = 2089995177814495234 <!-- AND cob.out_bound_time >= CURDATE() --> AND cob.out_bound_time < DATE_ADD( CURDATE(), INTERVAL -6 DAY )) smjbr, ( @@ -87,7 +87,7 @@ cob.del_flag = '0' AND cob.contract_id = csm.contract_id AND cob.subject_matter_code = csm.material_code AND cob.comp_id = 2056555602756063234 AND cob.comp_id = 2089995177814495234 AND cob.out_bound_time >= DATE_FORMAT( CURDATE(), '%Y-%m-01' ) AND cob.out_bound_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby, ( @@ -100,7 +100,7 @@ cob.del_flag = '0' AND cob.contract_id = csm.contract_id AND cob.subject_matter_code = csm.material_code AND cob.comp_id = 2056555602756063234 AND cob.comp_id = 2089995177814495234 AND cob.out_bound_time >= DATE_FORMAT( CURDATE(), '%Y-01-01' ) AND cob.out_bound_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn, ( @@ -277,7 +277,7 @@ AND csm.del_flag = '0' AND cob.contract_id = csm.contract_id AND cob.subject_matter_code = csm.material_code AND cob.comp_id = 2056555602756063234 AND cob.comp_id = 2089995177814495234 <!-- AND cob.out_bound_time >= CURDATE() --> AND cob.out_bound_time < DATE_ADD( CURDATE(), INTERVAL -6 DAY )) smjbr, ( @@ -291,7 +291,7 @@ AND csm.del_flag = '0' AND cob.contract_id = csm.contract_id AND cob.subject_matter_code = csm.material_code AND cob.comp_id = 2056555602756063234 AND cob.comp_id = 2089995177814495234 AND cob.out_bound_time >= DATE_FORMAT( CURDATE(), '%Y-%m-01' ) AND cob.out_bound_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby, ( @@ -305,7 +305,7 @@ AND csm.del_flag = '0' AND cob.contract_id = csm.contract_id AND cob.subject_matter_code = csm.material_code AND cob.comp_id = 2056555602756063234 AND cob.comp_id = 2089995177814495234 AND cob.out_bound_time >= DATE_FORMAT( CURDATE(), '%Y-01-01' ) AND cob.out_bound_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn, ( platformx-business-finance-biz/src/main/resources/mapper/CurrentOverdueMapper.xml
@@ -58,7 +58,7 @@ current_overdue co WHERE co.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND co.create_time >= CURDATE() AND co.create_time < DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr, ( @@ -68,7 +68,7 @@ current_overdue co WHERE co.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND co.create_time >= DATE_FORMAT( CURDATE(), '%Y-%m-01' ) AND co.create_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby, ( @@ -78,7 +78,7 @@ current_overdue co WHERE co.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND co.create_time >= DATE_FORMAT( CURDATE(), '%Y-01-01' ) AND co.create_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn, ( platformx-business-finance-biz/src/main/resources/mapper/HistoryOverdueMapper.xml
@@ -59,7 +59,7 @@ history_overdue co WHERE co.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND co.create_time >= CURDATE() AND co.create_time < DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr, ( @@ -69,7 +69,7 @@ history_overdue co WHERE co.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND co.create_time >= DATE_FORMAT( CURDATE(), '%Y-%m-01' ) AND co.create_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby, ( @@ -79,7 +79,7 @@ history_overdue co WHERE co.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND co.create_time >= DATE_FORMAT( CURDATE(), '%Y-01-01' ) AND co.create_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn, ( platformx-business-finance-biz/src/main/resources/mapper/PaymentSlipMapper.xml
@@ -60,7 +60,7 @@ payment_slip ps WHERE ps.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND ps.payment_time >= CURDATE() AND ps.payment_time < DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr, ( @@ -70,7 +70,7 @@ payment_slip ps WHERE ps.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND ps.payment_time >= DATE_FORMAT( CURDATE(), '%Y-%m-01' ) AND ps.payment_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby, ( @@ -80,7 +80,7 @@ payment_slip ps WHERE ps.del_flag = '0' AND comp_id = 2056555602756063234 AND comp_id = 2089995177814495234 AND ps.payment_time >= DATE_FORMAT( CURDATE(), '%Y-01-01' ) AND ps.payment_time < DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn, ( platformx-business-finance-biz/src/main/resources/template/jxc/product.xlsxBinary files differ