From 2d4402c3513386d4b2069783c3e0b8501eb4620f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 8 Sep 2025 10:42:53 +0800 Subject: [PATCH 001/109] feat:auditApprove --- .../store/dto/ContractInformationDTO.java | 43 +++++++++++++++++++ .../impl/SignFranchiseServiceImpl.java | 24 +++++++++++ 2 files changed, 67 insertions(+) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java new file mode 100644 index 000000000..aab1ee840 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java @@ -0,0 +1,43 @@ +package com.cool.store.dto; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2025/9/8 10:13 + * @Version 1.0 + */ +@Data +public class ContractInformationDTO { + @ApiModelProperty("门店ID") + private Long shopId; + @ApiModelProperty("门店名称") + private String shopName; + @ApiModelProperty("品牌方名称") + private String brandName; + @ApiModelProperty("支付方信息") + private String payee; + @ApiModelProperty("签约人1名称") + private String sign1Name; + @ApiModelProperty("签约人2名称") + private String sign2Name; + @ApiModelProperty("加盟模式") + private Integer joinModel; + @ApiModelProperty("每年加盟费") + private String yearFranchiseFee; + @ApiModelProperty("保证金") + private String loanMargin; + @ApiModelProperty("第一年度管理费") + private String firstYearManagementFee; + @ApiModelProperty("第一年度品牌使用费") + private String firstYearFee; + @ApiModelProperty("设计费") + private String performanceBond; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 96305a297..49dda1872 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.context.LoginUserInfo; import com.cool.store.dao.*; +import com.cool.store.dto.ContractInformationDTO; import com.cool.store.dto.PartnerBankInfoDTO; import com.cool.store.entity.*; import com.cool.store.enums.*; @@ -406,7 +407,30 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu //初始化数据 preparationService.contractAndBuildStoreCompletion(request.getShopId()); + //推送法大大数据 + //查询缴费信息 + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + + ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); + contractInformationDTO.setShopId(shopId); + contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); + contractInformationDTO.setShopName(shopInfoDO.getShopName()); + //品牌信息 + + + contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); + contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); + contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + + + + + log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); Boolean sendNotice = Boolean.TRUE; commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SIGN_CONTRACT); From 83ddafb8427b316725021defcd0522dcbee019a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 8 Sep 2025 18:46:42 +0800 Subject: [PATCH 002/109] feat:addContractConfig --- .../com/cool/store/enums/ErrorCodeEnum.java | 2 + .../com/cool/store/dao/ContractConfigDAO.java | 43 +++ .../store/mapper/ContractConfigMapper.java | 16 + .../resources/mapper/contractConfigMapper.xml | 34 +++ .../store/dto/contract/ContractConfigDTO.java | 54 ++++ .../store/dto/contract/ContractListDTO.java | 82 +++++ .../dto/contract/QueryContractListDTO.java | 16 + .../cool/store/entity/ContractConfigDO.java | 289 ++++++++++++++++++ .../store/service/ContractConfigService.java | 43 +++ .../impl/ContractConfigServiceImpl.java | 82 +++++ .../impl/SignFranchiseServiceImpl.java | 4 - 11 files changed, 661 insertions(+), 4 deletions(-) create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index d59f1e384..2b7cffb86 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -302,6 +302,8 @@ public enum ErrorCodeEnum { NOT_FLAGSHIP_STORE(16100005,"非直营店,无法跳过缴费阶段!",null), NOT_FLAGSHIP_STORE_NOT_EXIST(16100006,"当前阶段加盟类型不能变更!",null), + + CURRENT_BRAND_SORT_NUMBER_EXIST(16100007,"当前品牌已存在该排序数字!",null), ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java new file mode 100644 index 000000000..07e0b3c25 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java @@ -0,0 +1,43 @@ +package com.cool.store.dao; + +import com.cool.store.entity.ContractConfigDO; +import com.cool.store.mapper.ContractConfigMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:37 + * @Version 1.0 + */ +@Repository +public class ContractConfigDAO { + + @Resource + private ContractConfigMapper contractConfigMapper; + + public int addContractConfig(ContractConfigDO contractConfigDO){ + return contractConfigMapper.insertSelective(contractConfigDO); + } + + public int updateContractConfig(ContractConfigDO contractConfigDO){ + return contractConfigMapper.updateByPrimaryKeySelective(contractConfigDO); + } + + /** + * 根据品牌查询对应排序是否存在 + * @param brand + * @param serialNumber + * @return + */ + public ContractConfigDO queryContractConfigByBrand(String brand,Integer serialNumber){ + return contractConfigMapper.queryContractConfigByBrand(brand,serialNumber); + } + + + public List queryContractConfigList(String brand) { + return contractConfigMapper.queryContractConfigList(brand); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java new file mode 100644 index 000000000..7fffb9113 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java @@ -0,0 +1,16 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.ContractConfigDO; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ContractConfigMapper extends Mapper { + + + + ContractConfigDO queryContractConfigByBrand(String brand, Integer serialNumber); + + + List queryContractConfigList(String brand); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml new file mode 100644 index 000000000..cfc76f2de --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java new file mode 100644 index 000000000..d6d3a926c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java @@ -0,0 +1,54 @@ +package com.cool.store.dto.contract; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:52 + * @Version 1.0 + */ +@Data +public class ContractConfigDTO { + + @ApiModelProperty("主键 新建时忽略") + private Long id; + + @ApiModelProperty("品牌") + @NotBlank(message = "品牌不能为空") + private String brand; + + @ApiModelProperty("合同名称") + @NotBlank(message = "合同名称不能为空") + private String contractName; + + @ApiModelProperty("甲方名称") + @NotBlank(message = "甲方名称不能为空") + private String partyA; + + @ApiModelProperty("乙方名称") + @NotBlank(message = "乙方名称不能为空") + private String partyB; + + @ApiModelProperty(" 丙方名称") + private String partyC; + + @ApiModelProperty("加盟模式 多选 用逗号隔开") + private List franchiseModeList; + + @ApiModelProperty("法大大模板ID") + private String fadadaTemplateId; + + @ApiModelProperty("序号") + @NotNull(message = "序号不能为空") + private Integer serialNumber; + + @ApiModelProperty("收款方名称") + private String payeeName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java new file mode 100644 index 000000000..50f13a348 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java @@ -0,0 +1,82 @@ +package com.cool.store.dto.contract; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.enums.JoinModeEnum; +import com.cool.store.utils.StringUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/9/8 16:43 + * @Version 1.0 + */ +@Data +public class ContractListDTO { + + @ApiModelProperty("主键 新建时忽略") + private Long id; + + @ApiModelProperty("品牌") + @NotBlank(message = "品牌不能为空") + private String brand; + + @ApiModelProperty("合同名称") + @NotBlank(message = "合同名称不能为空") + private String contractName; + + @ApiModelProperty("甲方名称") + @NotBlank(message = "甲方名称不能为空") + private String partyA; + + @ApiModelProperty("乙方名称") + @NotBlank(message = "乙方名称不能为空") + private String partyB; + + @ApiModelProperty(" 丙方名称") + private String partyC; + + @ApiModelProperty("加盟模式 多选 用逗号隔开") + private List franchiseModeList; + + @ApiModelProperty("法大大模板ID") + private String fadadaTemplateId; + + @ApiModelProperty("序号") + @NotNull(message = "序号不能为空") + private Integer serialNumber; + + @ApiModelProperty("收款方名称") + private String payeeName; + + private String franchiseMode; + + @Data + protected class FranchiseModeDTO{ + + private String id; + + private String name; + + } + + private List getFranchiseModeList(){ + String[] split = this.franchiseMode.split(","); + ArrayList result = new ArrayList<>(); + Arrays.stream(split).filter(item -> StringUtil.isNotEmpty(item)).forEach(item -> { + FranchiseModeDTO franchiseModeDTO = new FranchiseModeDTO(); + franchiseModeDTO.setId(item); + franchiseModeDTO.setName(JoinModeEnum.getByCode(Integer.parseInt(item))); + result.add(franchiseModeDTO); + }); + return result; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java new file mode 100644 index 000000000..6e28fe9e1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/QueryContractListDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.contract; + +import com.cool.store.common.PageBasicInfo; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/9/8 16:43 + * @Version 1.0 + */ +@Data +public class QueryContractListDTO extends PageBasicInfo { + + private String brand; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java new file mode 100644 index 000000000..519722000 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java @@ -0,0 +1,289 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_contract_config") +public class ContractConfigDO { + /** + * 主键ID + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 品牌 + */ + private String brand; + + /** + * 合同名称 + */ + @Column(name = "contract_name") + private String contractName; + + /** + * 甲方名称 + */ + @Column(name = "party_a") + private String partyA; + + /** + * 乙方名称 + */ + @Column(name = "party_b") + private String partyB; + + /** + * 丙方名称 + */ + @Column(name = "party_c") + private String partyC; + + /** + * 加盟模式 多选 用逗号隔开 + */ + @Column(name = "franchise_mode") + private String franchiseMode; + + /** + * 法大大模板ID + */ + @Column(name = "fadada_template_id") + private String fadadaTemplateId; + + /** + * 序号 + */ + @Column(name = "serial_number") + private Integer serialNumber; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + @Column(name = "payee_name") + @ApiModelProperty("收款方名称") + private String payeeName; + + @Column(name = "deleted") + private Integer deleted; + + public String getPayeeName() { + return payeeName; + } + + public void setPayeeName(String payeeName) { + this.payeeName = payeeName; + } + + /** + * 获取主键ID + * + * @return id - 主键ID + */ + public Long getId() { + return id; + } + + /** + * 设置主键ID + * + * @param id 主键ID + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取品牌 + * + * @return brand - 品牌 + */ + public String getBrand() { + return brand; + } + + /** + * 设置品牌 + * + * @param brand 品牌 + */ + public void setBrand(String brand) { + this.brand = brand; + } + + /** + * 获取合同名称 + * + * @return contract_name - 合同名称 + */ + public String getContractName() { + return contractName; + } + + /** + * 设置合同名称 + * + * @param contractName 合同名称 + */ + public void setContractName(String contractName) { + this.contractName = contractName; + } + + /** + * 获取甲方名称 + * + * @return party_a - 甲方名称 + */ + public String getPartyA() { + return partyA; + } + + /** + * 设置甲方名称 + * + * @param partyA 甲方名称 + */ + public void setPartyA(String partyA) { + this.partyA = partyA; + } + + /** + * 获取乙方名称 + * + * @return party_b - 乙方名称 + */ + public String getPartyB() { + return partyB; + } + + /** + * 设置乙方名称 + * + * @param partyB 乙方名称 + */ + public void setPartyB(String partyB) { + this.partyB = partyB; + } + + /** + * 获取丙方名称 + * + * @return party_c - 丙方名称 + */ + public String getPartyC() { + return partyC; + } + + /** + * 设置丙方名称 + * + * @param partyC 丙方名称 + */ + public void setPartyC(String partyC) { + this.partyC = partyC; + } + + /** + * 获取加盟模式 多选 用逗号隔开 + * + * @return franchise_mode - 加盟模式 多选 用逗号隔开 + */ + public String getFranchiseMode() { + return franchiseMode; + } + + /** + * 设置加盟模式 多选 用逗号隔开 + * + * @param franchiseMode 加盟模式 多选 用逗号隔开 + */ + public void setFranchiseMode(String franchiseMode) { + this.franchiseMode = franchiseMode; + } + + /** + * 获取法大大模板ID + * + * @return fadada_template_id - 法大大模板ID + */ + public String getFadadaTemplateId() { + return fadadaTemplateId; + } + + /** + * 设置法大大模板ID + * + * @param fadadaTemplateId 法大大模板ID + */ + public void setFadadaTemplateId(String fadadaTemplateId) { + this.fadadaTemplateId = fadadaTemplateId; + } + + /** + * 获取序号 + * + * @return serial_number - 序号 + */ + public Integer getSerialNumber() { + return serialNumber; + } + + /** + * 设置序号 + * + * @param serialNumber 序号 + */ + public void setSerialNumber(Integer serialNumber) { + this.serialNumber = serialNumber; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java new file mode 100644 index 000000000..d2b46961c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java @@ -0,0 +1,43 @@ +package com.cool.store.service; + +import com.cool.store.dto.contract.ContractConfigDTO; +import com.cool.store.dto.contract.ContractListDTO; +import com.cool.store.dto.contract.QueryContractListDTO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:46 + * @Version 1.0 + */ +public interface ContractConfigService { + + + /** + * 新增配置 + * @param addContractConfigDTO + * @return + */ + Boolean addContractConfig(ContractConfigDTO addContractConfigDTO); + + /** + * 修改配置 + * @param addContractConfigDTO + * @return + */ + Boolean updateContractConfig(ContractConfigDTO addContractConfigDTO); + + + /** + * 查询配置列表 + * @param queryContractListDTO + * @return + */ + PageInfo queryContractConfigList(QueryContractListDTO queryContractListDTO); + + + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java new file mode 100644 index 000000000..606010d1a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java @@ -0,0 +1,82 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.ContractConfigDAO; +import com.cool.store.dto.contract.ContractConfigDTO; +import com.cool.store.dto.contract.ContractListDTO; +import com.cool.store.dto.contract.QueryContractListDTO; +import com.cool.store.entity.ContractConfigDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.service.ContractConfigService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/9/8 15:47 + * @Version 1.0 + */ +@Service +public class ContractConfigServiceImpl implements ContractConfigService { + + @Resource + private ContractConfigDAO contractConfigDAO; + + @Override + public Boolean addContractConfig(ContractConfigDTO addContractConfigDTO) { + ContractConfigDO contractConfig = contractConfigDAO.queryContractConfigByBrand(addContractConfigDTO.getBrand(), addContractConfigDTO.getSerialNumber()); + if (contractConfig != null){ + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + ContractConfigDO contractConfigDO = new ContractConfigDO(); + BeanUtils.copyProperties(addContractConfigDTO, contractConfigDO); + if (addContractConfigDTO.getFranchiseModeList() != null){ + String modelStr = addContractConfigDTO.getFranchiseModeList().stream().collect(Collectors.joining(",")); + contractConfigDO.setFranchiseMode("," + modelStr + ","); + } + contractConfigDAO.addContractConfig(contractConfigDO); + return Boolean.TRUE; + } + + @Override + public Boolean updateContractConfig(ContractConfigDTO addContractConfigDTO) { + ContractConfigDO contractConfig = contractConfigDAO.queryContractConfigByBrand(addContractConfigDTO.getBrand(), addContractConfigDTO.getSerialNumber()); + if (contractConfig != null && !contractConfig.getId().equals(addContractConfigDTO.getId())){ + throw new ServiceException(ErrorCodeEnum.CURRENT_BRAND_SORT_NUMBER_EXIST); + } + ContractConfigDO contractConfigDO = new ContractConfigDO(); + BeanUtils.copyProperties(addContractConfigDTO, contractConfigDO); + if (addContractConfigDTO.getFranchiseModeList() != null){ + String modelStr = addContractConfigDTO.getFranchiseModeList().stream().collect(Collectors.joining(",")); + contractConfigDO.setFranchiseMode("," + modelStr + ","); + } + return Boolean.TRUE; + } + + @Override + public PageInfo queryContractConfigList(QueryContractListDTO queryContractListDTO) { + PageHelper.startPage(queryContractListDTO.getPageNum(), queryContractListDTO.getPageSize()); + List contractConfigDOList = contractConfigDAO.queryContractConfigList(queryContractListDTO.getBrand()); + if (CollectionUtils.isEmpty(contractConfigDOList)){ + return new PageInfo<>(); + } + PageInfo contractConfigDOPageInfo = new PageInfo<>(contractConfigDOList); + List result = new ArrayList<>(); + contractConfigDOList.forEach(contractConfigDO -> { + ContractListDTO contractListDTO = new ContractListDTO(); + BeanUtils.copyProperties(contractConfigDO, contractListDTO); + result.add(contractListDTO); + }); + contractConfigDOPageInfo.setList( result); + return contractConfigDOPageInfo; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 49dda1872..645e3f4d3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -418,7 +418,6 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setShopName(shopInfoDO.getShopName()); //品牌信息 - contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); @@ -428,9 +427,6 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - - - log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); Boolean sendNotice = Boolean.TRUE; commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SIGN_CONTRACT); From 302d38af2b7ccc39a03dfd216848ca107181ba76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Tue, 9 Sep 2025 11:09:57 +0800 Subject: [PATCH 003/109] =?UTF-8?q?feat:=E5=90=88=E5=90=8C=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ErrorCodeEnum.java | 2 +- .../com/cool/store/dao/ContractConfigDAO.java | 24 ++++++++ .../store/mapper/ContractConfigMapper.java | 2 + ...figMapper.xml => ContractConfigMapper.xml} | 13 +++- .../store/dto/contract/ContractConfigDTO.java | 1 - .../cool/store/entity/ContractConfigDO.java | 8 +++ .../store/service/ContractConfigService.java | 7 ++- .../impl/ContractConfigServiceImpl.java | 14 +++++ .../service/impl/LinePayServiceImpl.java | 3 - .../webb/ContractConfigController.java | 59 +++++++++++++++++++ 10 files changed, 126 insertions(+), 7 deletions(-) rename coolstore-partner-dao/src/main/resources/mapper/{contractConfigMapper.xml => ContractConfigMapper.xml} (80%) create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 2b7cffb86..d48973587 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -304,10 +304,10 @@ public enum ErrorCodeEnum { NOT_FLAGSHIP_STORE_NOT_EXIST(16100006,"当前阶段加盟类型不能变更!",null), CURRENT_BRAND_SORT_NUMBER_EXIST(16100007,"当前品牌已存在该排序数字!",null), + CONTRACT_CONFIG_NOT_EXIST(16100008,"合同配置不存在!",null),; ; - protected static final Map map = Arrays.stream(values()).collect( Collectors.toMap(ErrorCodeEnum::getCode, Function.identity(), (a, b)->a)); private int code; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java index 07e0b3c25..9db56f10b 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ContractConfigDAO.java @@ -18,6 +18,11 @@ public class ContractConfigDAO { @Resource private ContractConfigMapper contractConfigMapper; + + public ContractConfigDO queryContractConfigById(Long id){ + return contractConfigMapper.selectByPrimaryKey(id); + } + public int addContractConfig(ContractConfigDO contractConfigDO){ return contractConfigMapper.insertSelective(contractConfigDO); } @@ -37,7 +42,26 @@ public class ContractConfigDAO { } + /** + * 合同配置列表 + * @param brand + * @return + */ public List queryContractConfigList(String brand) { return contractConfigMapper.queryContractConfigList(brand); } + + /** + * 根据加盟品牌与加盟模式 查出所有的未删除状态的合并合同 + * @param brand + * @param mode + * @return + */ + public List queryContractConfigListByBrandAndMode(String brand,String mode) { + return contractConfigMapper.queryContractConfigListByBrandAndMode(brand,mode); + } + + public void deleteContractConfig(Long id) { + contractConfigMapper.deleteByPrimaryKey(id); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java index 7fffb9113..b02e05d34 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ContractConfigMapper.java @@ -13,4 +13,6 @@ public interface ContractConfigMapper extends Mapper { List queryContractConfigList(String brand); + + List queryContractConfigListByBrandAndMode(String brand, String mode); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ContractConfigMapper.xml similarity index 80% rename from coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml rename to coolstore-partner-dao/src/main/resources/mapper/ContractConfigMapper.xml index cfc76f2de..fd81efa35 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/contractConfigMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ContractConfigMapper.xml @@ -14,7 +14,7 @@ - + @@ -31,4 +31,15 @@ and brand = #{brand} + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java index d6d3a926c..6e9d92519 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractConfigDTO.java @@ -32,7 +32,6 @@ public class ContractConfigDTO { private String partyA; @ApiModelProperty("乙方名称") - @NotBlank(message = "乙方名称不能为空") private String partyB; @ApiModelProperty(" 丙方名称") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java index 519722000..ef2c84d4c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ContractConfigDO.java @@ -89,6 +89,14 @@ public class ContractConfigDO { this.payeeName = payeeName; } + public Integer getDeleted() { + return deleted; + } + + public void setDeleted(Integer deleted) { + this.deleted = deleted; + } + /** * 获取主键ID * diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java index d2b46961c..7bcb7fdef 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ContractConfigService.java @@ -37,7 +37,12 @@ public interface ContractConfigService { PageInfo queryContractConfigList(QueryContractListDTO queryContractListDTO); - + /** + * 删除配置 + * @param id + * @return + */ + Boolean deleteContractConfig(Long id); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java index 606010d1a..5cafb54eb 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContractConfigServiceImpl.java @@ -8,6 +8,7 @@ import com.cool.store.entity.ContractConfigDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.service.ContractConfigService; +import com.cool.store.utils.poi.constant.Constants; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.collections4.CollectionUtils; @@ -57,6 +58,7 @@ public class ContractConfigServiceImpl implements ContractConfigService { String modelStr = addContractConfigDTO.getFranchiseModeList().stream().collect(Collectors.joining(",")); contractConfigDO.setFranchiseMode("," + modelStr + ","); } + contractConfigDAO.updateContractConfig(contractConfigDO); return Boolean.TRUE; } @@ -78,5 +80,17 @@ public class ContractConfigServiceImpl implements ContractConfigService { return contractConfigDOPageInfo; } + @Override + public Boolean deleteContractConfig(Long id) { + ContractConfigDO contractConfigDO = contractConfigDAO.queryContractConfigById(id); + if (contractConfigDO == null){ + throw new ServiceException(ErrorCodeEnum.CONTRACT_CONFIG_NOT_EXIST); + } + contractConfigDO.setDeleted(Constants.ONE_INTEGER); + //修改配置状态 + contractConfigDAO.updateContractConfig(contractConfigDO); + return Boolean.TRUE; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java index d1be25aea..5f00aa80f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java @@ -32,20 +32,17 @@ import com.cool.store.service.UserAuthMappingService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.RedisConstantUtil; import com.cool.store.utils.RedisUtilPool; -import com.cool.store.utils.UUIDUtils; import com.cool.store.utils.poi.DateUtils; import com.cool.store.utils.poi.StringUtils; import com.cool.store.utils.poi.constant.Constants; import com.cool.store.vo.LinePayVO; import com.cool.store.vo.PartnerUserInfoVO; -import jdk.nashorn.internal.codegen.types.BooleanType; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.math.BigDecimal; diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java new file mode 100644 index 000000000..7580972d2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContractConfigController.java @@ -0,0 +1,59 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.contract.ContractConfigDTO; +import com.cool.store.dto.contract.ContractListDTO; +import com.cool.store.dto.contract.QueryContractListDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.ContractConfigService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.xml.ws.Response; + +/** + * @Author suzhuhong + * @Date 2025/9/9 10:03 + * @Version 1.0 + */ +@RestController +@RequestMapping("pc/contract") +@Api(tags = "PC-合同配置") +@Slf4j +public class ContractConfigController { + + + @Resource + private ContractConfigService contractConfigService; + + @PostMapping("/addContractConfig") + @ApiOperation("添加合同配置") + public ResponseResult addContractConfig(@RequestBody @Validated ContractConfigDTO addContractConfigDTO) { + return ResponseResult.success(contractConfigService.addContractConfig(addContractConfigDTO)); + } + + @PostMapping("/updateContractConfig") + @ApiOperation("更新合同配置") + public ResponseResult updateContractConfig(@RequestBody @Validated ContractConfigDTO addContractConfigDTO) { + return ResponseResult.success(contractConfigService.updateContractConfig(addContractConfigDTO)); + } + + @PostMapping("/queryContractConfigList") + @ApiOperation("合同配置列表") + public ResponseResult> queryContractConfigList(@RequestBody QueryContractListDTO queryContractListDTO) { + return ResponseResult.success(contractConfigService.queryContractConfigList(queryContractListDTO)); + } + + @GetMapping("/deleteContractConfig") + @ApiOperation("删除配置") + public ResponseResult deleteContractConfig(Long id) { + return ResponseResult.success(contractConfigService.deleteContractConfig(id)); + } + + +} From e6dc4d5688bb2b0de45af9b539e298e480453b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Tue, 9 Sep 2025 15:25:47 +0800 Subject: [PATCH 004/109] =?UTF-8?q?feat:=E5=90=88=E5=90=8C=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/dto/ContractInformationDTO.java | 8 +- .../store/dto/contract/ContractListDTO.java | 89 ++++++++++++++++++- .../store/dto/contract/PushContractDTO.java | 44 +++++++++ .../impl/SignFranchiseServiceImpl.java | 22 ++++- 4 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java index aab1ee840..710a43c50 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto; +import com.cool.store.dto.contract.PushContractDTO; import com.cool.store.vo.BaseInfoVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; @@ -7,6 +8,7 @@ import lombok.Data; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * @Author suzhuhong @@ -19,10 +21,6 @@ public class ContractInformationDTO { private Long shopId; @ApiModelProperty("门店名称") private String shopName; - @ApiModelProperty("品牌方名称") - private String brandName; - @ApiModelProperty("支付方信息") - private String payee; @ApiModelProperty("签约人1名称") private String sign1Name; @ApiModelProperty("签约人2名称") @@ -39,5 +37,7 @@ public class ContractInformationDTO { private String firstYearFee; @ApiModelProperty("设计费") private String performanceBond; + @ApiModelProperty("合同配置信息") + private List contractList; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java index 50f13a348..7117c1af6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractListDTO.java @@ -18,7 +18,6 @@ import java.util.stream.Collectors; * @Date 2025/9/8 16:43 * @Version 1.0 */ -@Data public class ContractListDTO { @ApiModelProperty("主键 新建时忽略") @@ -67,7 +66,91 @@ public class ContractListDTO { } - private List getFranchiseModeList(){ + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public String getPartyA() { + return partyA; + } + + public void setPartyA(String partyA) { + this.partyA = partyA; + } + + public String getPartyB() { + return partyB; + } + + public void setPartyB(String partyB) { + this.partyB = partyB; + } + + public String getPartyC() { + return partyC; + } + + public void setPartyC(String partyC) { + this.partyC = partyC; + } + + public void setFranchiseModeList(List franchiseModeList) { + this.franchiseModeList = franchiseModeList; + } + + public String getFadadaTemplateId() { + return fadadaTemplateId; + } + + public void setFadadaTemplateId(String fadadaTemplateId) { + this.fadadaTemplateId = fadadaTemplateId; + } + + public Integer getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(Integer serialNumber) { + this.serialNumber = serialNumber; + } + + public String getPayeeName() { + return payeeName; + } + + public void setPayeeName(String payeeName) { + this.payeeName = payeeName; + } + + public String getFranchiseMode() { + return franchiseMode; + } + + public void setFranchiseMode(String franchiseMode) { + this.franchiseMode = franchiseMode; + } + + public List getFranchiseModeList(){ String[] split = this.franchiseMode.split(","); ArrayList result = new ArrayList<>(); Arrays.stream(split).filter(item -> StringUtil.isNotEmpty(item)).forEach(item -> { @@ -79,4 +162,6 @@ public class ContractListDTO { return result; } + + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java new file mode 100644 index 000000000..f462420fc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/PushContractDTO.java @@ -0,0 +1,44 @@ +package com.cool.store.dto.contract; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; + +/** + * @Author suzhuhong + * @Date 2025/9/9 13:35 + * @Version 1.0 + */ +@Data +public class PushContractDTO { + + /** + * 品牌 + */ + @ApiModelProperty("品牌方名称") + private String brand; + + @ApiModelProperty("合同名称") + private String contractName; + + @ApiModelProperty("甲方名称") + private String partyA; + + @ApiModelProperty("乙方名称") + private String partyB; + + @ApiModelProperty("丙方名称") + private String partyC; + + @ApiModelProperty("法大大模板ID") + private String fadadaTemplateId; + + @ApiModelProperty("合同签约顺序") + private Integer serialNumber; + + @ApiModelProperty("收款方名称") + private String payeeName; + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 645e3f4d3..ba6f8a2f8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -7,6 +7,7 @@ import com.cool.store.context.LoginUserInfo; import com.cool.store.dao.*; import com.cool.store.dto.ContractInformationDTO; import com.cool.store.dto.PartnerBankInfoDTO; +import com.cool.store.dto.contract.PushContractDTO; import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.enums.point.ShopSubStageEnum; @@ -120,6 +121,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu OperationLogService operationLogService; @Resource OperationLogDAO operationLogDAO; + @Resource + ContractConfigDAO contractConfigDAO; @Override @@ -417,7 +420,6 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); contractInformationDTO.setShopName(shopInfoDO.getShopName()); //品牌信息 - contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); @@ -426,6 +428,24 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + List contractConfigDOS = contractConfigDAO.queryContractConfigListByBrandAndMode(shopInfoDO.getFranchiseBrand(), JoinModeEnum.getByCode(shopInfoDO.getJoinMode())); + + if (CollectionUtils.isNotEmpty(contractConfigDOS)){ + contractInformationDTO.setContractList(contractConfigDOS.stream().map(contractConfigDO -> { + PushContractDTO pushContractDTO = new PushContractDTO(); + pushContractDTO.setBrand(contractConfigDO.getBrand()); + pushContractDTO.setContractName(contractConfigDO.getContractName()); + pushContractDTO.setPartyA(contractConfigDO.getPartyA()); + pushContractDTO.setPartyB(contractConfigDO.getPartyB()); + pushContractDTO.setPartyC(contractConfigDO.getPartyC()); + pushContractDTO.setFadadaTemplateId(contractConfigDO.getFadadaTemplateId()); + pushContractDTO.setSerialNumber(contractConfigDO.getSerialNumber()); + pushContractDTO.setPayeeName(contractConfigDO.getPayeeName()); + return pushContractDTO; + }).collect(Collectors.toList())); + + } + log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); Boolean sendNotice = Boolean.TRUE; From 220d5f09ea4209ac646bbc493f072cc647d235df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 10 Sep 2025 09:33:00 +0800 Subject: [PATCH 005/109] =?UTF-8?q?feat:=E5=90=88=E5=90=8C=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/enums/FranchiseBrandEnum.java | 45 +++++++++++++++---- .../store/dto/ContractInformationDTO.java | 6 ++- .../impl/SignFranchiseServiceImpl.java | 21 +++------ 3 files changed, 46 insertions(+), 26 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java index 1221d3c8f..de878c69f 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseBrandEnum.java @@ -14,20 +14,27 @@ import java.util.stream.Collectors; * @注释: */ public enum FranchiseBrandEnum { - ZXJP(1,"正新鸡排","option486"), - ZXSMZ(2,"正新三明治","option622"), - ZJS(3,"正烧记","option488"), - DGMX(4,"大鼓米线","option624"), - CXM(5,"串小妹","option626"), - MZG(6,"茂掌柜","option490"); + ZXJP(1,"正新鸡排","option486","上海正新食品集团有限公司","海南正新多品牌管理有限公司"), + ZXSMZ(2,"正新三明治","option622","",""), + ZJS(3,"正烧记","option488","上海正烧信息科技有限公司","上海正烧信息科技有限公司"), + DGMX(4,"大鼓米线","option624","",""), + CXM(5,"串小妹","option626","",""), + MZG(6,"茂掌柜","option490","",""); private int code; private String desc; - //红圈通code + /**法大大合同编号*/ private String hqtCode; - FranchiseBrandEnum(int code, String desc,String hqtCode) { + /**品牌方*/ + private String brandOwner; + /**收款方*/ + private String payeeName; + + FranchiseBrandEnum(int code, String desc,String hqtCode,String brandOwner,String payeeName) { this.code = code; this.desc = desc; this.hqtCode = hqtCode; + this.brandOwner = brandOwner; + this.payeeName = payeeName; } public int getCode() { return code; @@ -40,6 +47,14 @@ public enum FranchiseBrandEnum { return hqtCode; } + public String getBrandOwner() { + return brandOwner; + } + + public String getPayeeName() { + return payeeName; + } + public static String getDescByCode(String code) { if (StringUtils.isBlank(code)){ return null; @@ -52,6 +67,20 @@ public enum FranchiseBrandEnum { } return null; } + + public static FranchiseBrandEnum getEnumByCode(String code) { + if (StringUtils.isBlank(code)){ + return null; + } + int i = Integer.parseInt(code); + for (FranchiseBrandEnum e : FranchiseBrandEnum.values()) { + if (i == e.getCode()) { + return e; + } + } + return null; + } + public static String getDescByCode(Integer code) { if (code==null){ return null; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java index 710a43c50..20b3da15f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java @@ -37,7 +37,9 @@ public class ContractInformationDTO { private String firstYearFee; @ApiModelProperty("设计费") private String performanceBond; - @ApiModelProperty("合同配置信息") - private List contractList; + @ApiModelProperty("收款方名称") + private String payeeName; + @ApiModelProperty("品牌方") + private String brandOwner; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index ba6f8a2f8..711a4f4d1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -428,25 +428,14 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - List contractConfigDOS = contractConfigDAO.queryContractConfigListByBrandAndMode(shopInfoDO.getFranchiseBrand(), JoinModeEnum.getByCode(shopInfoDO.getJoinMode())); - - if (CollectionUtils.isNotEmpty(contractConfigDOS)){ - contractInformationDTO.setContractList(contractConfigDOS.stream().map(contractConfigDO -> { - PushContractDTO pushContractDTO = new PushContractDTO(); - pushContractDTO.setBrand(contractConfigDO.getBrand()); - pushContractDTO.setContractName(contractConfigDO.getContractName()); - pushContractDTO.setPartyA(contractConfigDO.getPartyA()); - pushContractDTO.setPartyB(contractConfigDO.getPartyB()); - pushContractDTO.setPartyC(contractConfigDO.getPartyC()); - pushContractDTO.setFadadaTemplateId(contractConfigDO.getFadadaTemplateId()); - pushContractDTO.setSerialNumber(contractConfigDO.getSerialNumber()); - pushContractDTO.setPayeeName(contractConfigDO.getPayeeName()); - return pushContractDTO; - }).collect(Collectors.toList())); - + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); + if (enumByCode != null){ + contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); + contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); } + log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); Boolean sendNotice = Boolean.TRUE; commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SIGN_CONTRACT); From a855b824ca6cdd12ae9c141a65ff6baa765d30d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 17 Sep 2025 15:17:21 +0800 Subject: [PATCH 006/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/mapper/SignFranchiseMapper.java | 4 +- .../resources/mapper/SignFranchiseMapper.xml | 14 ++- .../dto/contract/ContractCallbackDTO.java | 17 +++ .../com/cool/store/service/PushService.java | 13 +- .../store/service/impl/PushServiceImpl.java | 12 +- .../impl/SignFranchiseServiceImpl.java | 116 ++++++++++-------- .../controller/webb/PCTestController.java | 48 +++++++- 7 files changed, 157 insertions(+), 67 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java index 8ac02937f..b595f6d25 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.entity.SignFranchiseDO; import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.common.Mapper; @@ -11,7 +12,8 @@ public interface SignFranchiseMapper extends Mapper { SignFranchiseDO selectByShopId(@Param("shopId") Long shopId); void updateAuditByShopId(@Param("auditId") Long auditId, - @Param("shopId") Long shopId); + @Param("shopId") Long shopId, + @Param("dto") ContractCallbackDTO dto); List selectByShopIds( @Param("list")List shopIds); Integer dateHandle(); diff --git a/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml index 5c927fb7d..d4ceb8c0e 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml @@ -3,7 +3,19 @@ update xfsg_sign_franchise - set audit_id = #{auditId} + + + audit_id = #{auditId}, + + + + info_consistency_flag = #{dto.infoConsistencyFlag}, + + + reason = #{dto.reason}, + + + where shop_id = #{shopId} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java new file mode 100644 index 000000000..e686d0af1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.contract; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/9/17 14:42 + * @Version 1.0 + */ +@Data +public class ContractCallbackDTO { + + private Integer infoConsistencyFlag; + + private String reason; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java index e2e49e8c6..f9444f0a8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PushService.java @@ -1,9 +1,7 @@ package com.cool.store.service; -import com.cool.store.dto.GetAccessTokenDTO; -import com.cool.store.dto.HqtTokenDTO; -import com.cool.store.dto.ModifyPasswordDTO; -import com.cool.store.dto.XgjOrganizationDTO; +import com.cool.store.dto.*; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.request.AuditRequest; import com.cool.store.request.ZxjpApiRequest; import com.cool.store.request.xgj.PushFranchiseFeeRequest; @@ -94,6 +92,13 @@ public interface PushService { */ HqtTokenDTO getHqtToken(); + /** + * 法大大一期 推送加盟合同信息 + * @param contractInformationDTO + * @return + */ + ContractCallbackDTO pushContract(ContractInformationDTO contractInformationDTO); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java index 38801696a..afff5d4bb 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PushServiceImpl.java @@ -1,10 +1,8 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSONObject; -import com.cool.store.dto.GetAccessTokenDTO; -import com.cool.store.dto.HqtTokenDTO; -import com.cool.store.dto.ModifyPasswordDTO; -import com.cool.store.dto.XgjOrganizationDTO; +import com.cool.store.dto.*; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.ZxjpApiRequest; @@ -133,6 +131,11 @@ public class PushServiceImpl implements PushService { String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeBill"; return executePostApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); } + @Override + public ContractCallbackDTO pushContract(ContractInformationDTO contractInformationDTO) { + String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseContract"; + return executePostApiCall(apiUrl, contractInformationDTO, ContractCallbackDTO.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); + } @Override public Boolean pushReceiptToXGJ(ReceiptRequest request) { @@ -296,6 +299,7 @@ public class PushServiceImpl implements PushService { } } + private T executeApiCall(String url, Object requestBody, Class responseType, String username, String secret){ return executePostApiCall(url,requestBody,responseType,username,secret,null); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 711a4f4d1..063920164 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -7,6 +7,7 @@ import com.cool.store.context.LoginUserInfo; import com.cool.store.dao.*; import com.cool.store.dto.ContractInformationDTO; import com.cool.store.dto.PartnerBankInfoDTO; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.dto.contract.PushContractDTO; import com.cool.store.entity.*; import com.cool.store.enums.*; @@ -123,45 +124,47 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu OperationLogDAO operationLogDAO; @Resource ContractConfigDAO contractConfigDAO; + @Resource + PushService pushService; @Override public Boolean auditResult(AuditResultRequest request) { log.info("SignFranchiseServiceImpl auditResult request:{}", JSONObject.toJSONString(request)); - Long shopId = getShopId(request.getKdzBusinessId()); - ShopSubStageStatusEnum shopSubStageStatusEnum = null; - if (request.getAuditResult() == 1) { - shopSubStageStatusEnum = SHOP_SUB_STAGE_STATUS_84; - } else if (request.getAuditResult() == 0) { - shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85; - } - ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); - shopAuditInfoDO.setShopId(shopId); - shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode()); - shopAuditInfoDO.setSubmittedUserId(""); - shopAuditInfoDO.setSubmittedUserName(""); - if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { - shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); - shopAuditInfoDO.setRejectReason(request.getCause()); - Map requestMap = new HashMap<>(); - ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); - LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); - requestMap.put("storeName", shopInfoDO.getShopName()); - requestMap.put("partnerName", lineInfo.getUsername()); - requestMap.put("partnerMobile", lineInfo.getMobile()); - requestMap.put("lineId", String.valueOf(lineInfo.getId())); - requestMap.put("shopId", String.valueOf(shopInfoDO.getId())); - commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_20, requestMap); - } else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) { - shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); - shopAuditInfoDO.setPassReason(request.getCause()); - //校验建店与加盟签约合同是否完成 并初始化后续流程数据 - //preparationService.contractAndBuildStoreCompletion(shopId); - } - shopAuditInfoMapper.insertSelective(shopAuditInfoDO); - Long auditId = shopAuditInfoDO.getId(); - shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, auditId); - signFranchiseMapper.updateAuditByShopId(auditId, shopId); +// Long shopId = getShopId(request.getKdzBusinessId()); +// ShopSubStageStatusEnum shopSubStageStatusEnum = null; +// if (request.getAuditResult() == 1) { +// shopSubStageStatusEnum = SHOP_SUB_STAGE_STATUS_84; +// } else if (request.getAuditResult() == 0) { +// shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85; +// } +// ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); +// shopAuditInfoDO.setShopId(shopId); +// shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode()); +// shopAuditInfoDO.setSubmittedUserId(""); +// shopAuditInfoDO.setSubmittedUserName(""); +// if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { +// shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); +// shopAuditInfoDO.setRejectReason(request.getCause()); +// Map requestMap = new HashMap<>(); +// ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); +// LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); +// requestMap.put("storeName", shopInfoDO.getShopName()); +// requestMap.put("partnerName", lineInfo.getUsername()); +// requestMap.put("partnerMobile", lineInfo.getMobile()); +// requestMap.put("lineId", String.valueOf(lineInfo.getId())); +// requestMap.put("shopId", String.valueOf(shopInfoDO.getId())); +// commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_20, requestMap); +// } else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) { +// shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); +// shopAuditInfoDO.setPassReason(request.getCause()); +// //校验建店与加盟签约合同是否完成 并初始化后续流程数据 +// //preparationService.contractAndBuildStoreCompletion(shopId); +// } +// shopAuditInfoMapper.insertSelective(shopAuditInfoDO); +// Long auditId = shopAuditInfoDO.getId(); +// shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, auditId); + //signFranchiseMapper.updateAuditByShopId(auditId, shopId); return true; } @@ -361,6 +364,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu shopAuditInfoDO.setSubmittedUserId(user.getUserId()); shopAuditInfoDO.setSubmittedUserName(user.getName()); //驳回 + ContractCallbackDTO contractCallbackDTO = null; if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); shopAuditInfoDO.setRejectReason(request.getCause()); @@ -415,27 +419,33 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); - ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); - contractInformationDTO.setShopId(shopId); - contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); - contractInformationDTO.setShopName(shopInfoDO.getShopName()); - //品牌信息 - contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); - contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); - contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); - contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); - contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); - contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); - contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + //自营店 无缴费信息 不需要校验 + if (franchiseFeeDO != null){ + ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); + contractInformationDTO.setShopId(shopId); + contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); + contractInformationDTO.setShopName(shopInfoDO.getShopName()); + //品牌信息 + contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); + contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); + contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); - if (enumByCode != null){ - contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); - contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); + if (enumByCode != null){ + contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); + contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); + } + try { + contractCallbackDTO = pushService.pushContract(contractInformationDTO); + } catch (Exception e) { + log.error("推送合同信息失败", e); + } } - - log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); Boolean sendNotice = Boolean.TRUE; commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SIGN_CONTRACT); @@ -460,7 +470,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } shopAuditInfoMapper.insertSelective(shopAuditInfoDO); Long auditId = shopAuditInfoDO.getId(); - signFranchiseMapper.updateAuditByShopId(auditId, shopId); + signFranchiseMapper.updateAuditByShopId(auditId, shopId,contractCallbackDTO); //审批记录表记录 List operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83, OperationTypeEnum.OPERATION_TYPE_1.getCode()); operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause()); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index 64c87bda8..c80580481 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -4,12 +4,11 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; -import com.cool.store.dto.FoodTokenDTO; -import com.cool.store.dto.GetAccessTokenDTO; -import com.cool.store.dto.HqtTokenDTO; -import com.cool.store.dto.ModifyPasswordDTO; +import com.cool.store.dto.*; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.entity.*; import com.cool.store.enums.DownSystemTypeEnum; +import com.cool.store.enums.FranchiseBrandEnum; import com.cool.store.enums.MessageEnum; import com.cool.store.enums.SMSMsgEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; @@ -17,6 +16,7 @@ import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.FranchiseFeeMapper; import com.cool.store.mapper.LineInfoMapper; import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.mapper.SignFranchiseMapper; import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.request.*; import com.cool.store.request.bigdata.ProfitDataRequest; @@ -99,6 +99,8 @@ public class PCTestController { LinePayService linePayService; @Resource LinePayDAO linePayDAO; + @Resource + SignFranchiseMapper signFranchiseMapper; @GetMapping("/syncStore") public ResponseResult syncStore(@RequestParam("shopId")Long shopId){ @@ -393,6 +395,44 @@ public class PCTestController { return ResponseResult.success(Boolean.TRUE); } + @GetMapping("/pushContract") + @ApiOperation("推送合同信息") + public ResponseResult pushContract(@RequestParam(value = "shopId", required = true) Long shopId) { + + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopId); + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + + //自营店 无缴费信息 不需要校验 + if (franchiseFeeDO != null){ + ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); + contractInformationDTO.setShopId(shopId); + contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); + contractInformationDTO.setShopName(shopInfoDO.getShopName()); + //品牌信息 + contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); + contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); + contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); + if (enumByCode != null){ + contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); + contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); + } + try { + ContractCallbackDTO contractCallbackDTO = pushService.pushContract(contractInformationDTO); + log.info("推送合同信息回调:{}", JSONObject.toJSONString(contractCallbackDTO)); + } catch (Exception e) { + log.error("推送合同信息失败", e); + } + } + return ResponseResult.success(Boolean.TRUE); + } + @Resource ShopStageInfoDAO shopStageInfoDAO; From 5ada2f284f2174e52b3f092df13ed0862497b5b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 17 Sep 2025 15:48:38 +0800 Subject: [PATCH 007/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F=20=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/entity/SignFranchiseDO.java | 10 ++++++++++ .../cool/store/response/AddSignFranchiseResponse.java | 5 +++++ .../store/service/impl/SignFranchiseServiceImpl.java | 2 ++ 3 files changed, 17 insertions(+) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java index 34af719bc..9f10482e4 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java @@ -86,4 +86,14 @@ public class SignFranchiseDO { //是否统管 : 1-统管,0-不统管', @Column(name = "unified_management") private Integer unifiedManagement; + /** + * 信息是否一致 财务使用 + */ + @Column(name = "info_consistency_flag") + private Integer infoConsistencyFlag; + /** + * 不一致原因 + */ + @Column(name = "reason") + private String reason; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java index f6537dfe0..e75765010 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.persistence.Column; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.Date; @@ -240,6 +241,10 @@ public class AddSignFranchiseResponse { @ApiModelProperty("是否统管 : 1-统管,0-不统管") private Integer unifiedManagement; + @ApiModelProperty("信息是否一致") + private Integer infoConsistencyFlag; + @ApiModelProperty("不一致原因") + private String reason; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 063920164..783469770 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -563,6 +563,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } if (Objects.nonNull(signFranchiseDO)) { addSignFranchiseResponse.setUnifiedManagement(signFranchiseDO.getUnifiedManagement()); + addSignFranchiseResponse.setInfoConsistencyFlag(signFranchiseDO.getInfoConsistencyFlag()); + addSignFranchiseResponse.setReason(signFranchiseDO.getReason()); addSignFranchiseResponse.setId(signFranchiseDO.getId()); addSignFranchiseResponse.setShopId(signFranchiseDO.getShopId()); addSignFranchiseResponse.setSignType(signFranchiseDO.getSignType()); From 2053507ae701fc27a9c2600fed8b9c5b9a376c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 19 Sep 2025 14:01:32 +0800 Subject: [PATCH 008/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F=20=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/service/impl/FranchiseFeeServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index 8bfb2cc07..38d1cbe7c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -246,7 +246,10 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { } franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ - shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + ShopStageInfoDO shopStageStatus = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); + if (SHOP_SUB_STAGE_STATUS_00.equals(shopStageStatus.getShopSubStageStatus())){ + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + } } return ApiResponse.success(Boolean.TRUE); } From 6f38fb99ed196e10aec638bc481b4c144db6cd4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 19 Sep 2025 14:28:57 +0800 Subject: [PATCH 009/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F=20=E9=99=90=E5=88=B6=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=8E=BB=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/service/impl/FranchiseFeeServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index 38d1cbe7c..de0897cfc 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -102,9 +102,9 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { @Transactional(rollbackFor = Exception.class) public Boolean update(FranchiseFeeRequest request) { ShopStageInfoDO shopStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); - if (shopStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus())){ - throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); - } +// if (shopStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus())){ +// throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); +// } FranchiseFeeDO franchiseFeeDO = request.toFranchiseFeeDO(); FranchiseFeeDO franchiseFeeDO1 = franchiseFeeMapper.selectByShopId(request.getShopId()); if (Objects.nonNull(franchiseFeeDO1)) { From ba47781bd115ee66d54550a8d8033e5a3464fe7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 19 Sep 2025 14:35:35 +0800 Subject: [PATCH 010/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F=20=E9=99=90=E5=88=B6=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=8E=BB=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/service/impl/FranchiseFeeServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index de0897cfc..a184c4d95 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -228,9 +228,9 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { return ApiResponse.error(ErrorCodeEnum.SHOP_ID_NOT_EXIST); } FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); - if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(franchiseFeeDO.getXgjCollectionStatus())){ - return ApiResponse.error(ErrorCodeEnum.XGJ_COLLECTION_STATUS_COMPLETE); - } +// if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(franchiseFeeDO.getXgjCollectionStatus())){ +// return ApiResponse.error(ErrorCodeEnum.XGJ_COLLECTION_STATUS_COMPLETE); +// } franchiseFeeDO.setXgjCollectionStatus(request.getPaymentStatus()); franchiseFeeDO.setXgjRemainderPayableAmount(request.getRemainingFee()); franchiseFeeDO.setXgjFeesPaid(request.getPaidFees()); From b202c65b3aa69fb06db7d6e50629656a5c48bfa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 19 Sep 2025 14:50:51 +0800 Subject: [PATCH 011/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F=20=E9=99=90=E5=88=B6=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=8E=BB=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/service/impl/FranchiseFeeServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index a184c4d95..db11cc618 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -247,7 +247,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ ShopStageInfoDO shopStageStatus = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); - if (SHOP_SUB_STAGE_STATUS_00.equals(shopStageStatus.getShopSubStageStatus())){ + if (SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(shopStageStatus.getShopSubStageStatus())){ shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); } } From 5239a72970fda8cdd717616209231f10e8628bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 19 Sep 2025 17:30:15 +0800 Subject: [PATCH 012/109] =?UTF-8?q?feat:=E6=B3=95=E5=A4=A7=E5=A4=A7?= =?UTF-8?q?=E4=B8=80=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/service/impl/FranchiseFeeServiceImpl.java | 5 ++++- .../cool/store/service/impl/SignFranchiseServiceImpl.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index db11cc618..5a404ff5f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -242,7 +242,10 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { LinePayDO lastPay = linePayMapper.getLastPay(franchiseFeeDO.getShopId()); lastPay.setRemark(lastPay.getRemark()+"系统监测到您多缴费"+request.getPaidFees().subtract(request.getPayableFee())+"元 请申请退款或留做他用!"); linePayMapper.updateByPrimaryKeySelective(lastPay); - shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + ShopStageInfoDO shopStageStatus = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); + if (SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(shopStageStatus.getShopSubStageStatus())){ + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_73,SHOP_SUB_STAGE_STATUS_80)); + } } franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 783469770..17c2a152d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -431,7 +431,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); - contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); From 59ca00cc2d7f2aaee5d9c4eff56a7ed57a47c4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 19 Sep 2025 17:42:47 +0800 Subject: [PATCH 013/109] =?UTF-8?q?feat:=E7=AD=BE=E7=BA=A6=E4=B9=8B?= =?UTF-8?q?=E5=90=8E=E9=87=8D=E6=96=B0=E6=8E=A8=E9=80=81=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SignFranchiseServiceImpl.java | 86 ++++++++++++------- 1 file changed, 54 insertions(+), 32 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 17c2a152d..12c24c2e5 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -219,7 +219,18 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED); } else { + //修改签约人信息 signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO); + //如果已经签约 修改之后从新推送数据到新管家 + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getId(), ShopSubStageEnum.SHOP_STAGE_8); + if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus())){ + //如果已经签约 修改之后从新推送数据 + ContractCallbackDTO contractCallbackDTO = pushContractRequest(shopInfoDO, request.getShopId()); + if (!Objects.isNull(contractCallbackDTO)){ + signFranchiseMapper.updateAuditByShopId(null, request.getShopId(),contractCallbackDTO); + } + + } } //修改shop & point updateShopAndPoint(request, shopInfoDO, pointInfoById); @@ -414,39 +425,9 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu //初始化数据 preparationService.contractAndBuildStoreCompletion(request.getShopId()); - //推送法大大数据 - //查询缴费信息 - FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); - SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + //推送数据 + contractCallbackDTO = pushContractRequest(shopInfoDO, request.getShopId()); - //自营店 无缴费信息 不需要校验 - if (franchiseFeeDO != null){ - ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); - contractInformationDTO.setShopId(shopId); - contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); - contractInformationDTO.setShopName(shopInfoDO.getShopName()); - //品牌信息 - contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); - contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); - contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); - contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); - contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); - contractInformationDTO.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); - contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - - FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); - if (enumByCode != null){ - contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); - contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); - } - try { - contractCallbackDTO = pushService.pushContract(contractInformationDTO); - } catch (Exception e) { - log.error("推送合同信息失败", e); - } - } - - log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); Boolean sendNotice = Boolean.TRUE; commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SIGN_CONTRACT); if (sendNotice) { @@ -488,6 +469,47 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } } + + /** + * 推送合同信息请求 + * @param shopId + */ + private ContractCallbackDTO pushContractRequest(ShopInfoDO shopInfoDO,Long shopId){ + //推送法大大数据 + //查询缴费信息 + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + + log.info("加盟合同审批时签约类型:{}", SignTypeEnum.getDescByCode(signFranchiseDO.getSignType())); + //自营店 无缴费信息 不需要校验 + if (franchiseFeeDO != null){ + ContractInformationDTO contractInformationDTO = new ContractInformationDTO(); + contractInformationDTO.setShopId(shopId); + contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode()); + contractInformationDTO.setShopName(shopInfoDO.getShopName()); + //品牌信息 + contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst()); + contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond()); + contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin()); + contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); + contractInformationDTO.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); + contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + + FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); + if (enumByCode != null){ + contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); + contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner()); + } + try { + return pushService.pushContract(contractInformationDTO); + } catch (Exception e) { + log.error("推送合同信息失败", e); + } + } + return null; + } + public HqtBuildRequest getHqtBuildRequest(Long shopId) { ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfo.getLineId()); From 89e9cf3b57e8f07bb79a42e8b659941834eb51ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 10 Oct 2025 10:06:11 +0800 Subject: [PATCH 014/109] =?UTF-8?q?feat:=E8=80=81=E5=BA=97=E6=96=B0?= =?UTF-8?q?=E5=BC=80=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/dao/SignFranchiseDAO.java | 9 +++++++++ .../cool/store/dto/ContractInformationDTO.java | 2 ++ .../store/dto/contract/ContractCallbackDTO.java | 2 ++ .../com/cool/store/entity/SignFranchiseDO.java | 3 +++ .../store/request/AddSignFranchiseRequest.java | 4 ++++ .../store/response/AddSignFranchiseResponse.java | 4 ++-- .../service/impl/SignFranchiseServiceImpl.java | 15 +++++++++++++-- 7 files changed, 35 insertions(+), 4 deletions(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java index 42cbec644..c79e7307b 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SignFranchiseDAO.java @@ -1,6 +1,8 @@ package com.cool.store.dao; import com.alibaba.excel.util.CollectionUtils; +import com.alibaba.excel.util.StringUtils; +import com.cool.store.dto.contract.ContractCallbackDTO; import com.cool.store.entity.SignFranchiseDO; import com.cool.store.mapper.SignFranchiseMapper; import org.apache.ibatis.annotations.Param; @@ -38,4 +40,11 @@ public class SignFranchiseDAO { public SignFranchiseDO selectByShopId(Long shopId){ return signFranchiseMapper.selectByShopId(shopId); } + + public void updateAuditByShopId(Long auditId, Long shopId, ContractCallbackDTO dto){ + if (dto==null || (StringUtils.isEmpty(dto.getReason())&&dto.getInfoConsistencyFlag()==null)){ + return; + } + signFranchiseMapper.updateAuditByShopId(auditId,shopId,dto); + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java index 20b3da15f..2bb015289 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ContractInformationDTO.java @@ -41,5 +41,7 @@ public class ContractInformationDTO { private String payeeName; @ApiModelProperty("品牌方") private String brandOwner; + @ApiModelProperty("老店编码 签约类型选择老店转加盟时有") + private String oldShopCode; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java index e686d0af1..9339be828 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/contract/ContractCallbackDTO.java @@ -14,4 +14,6 @@ public class ContractCallbackDTO { private String reason; + private String storeCode; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java index 9f10482e4..a86dd7544 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java @@ -96,4 +96,7 @@ public class SignFranchiseDO { */ @Column(name = "reason") private String reason; + + @Column(name = "old_shop_code") + private String oldShopCode; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java index be8b6ec1c..aaf8d6c24 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java @@ -148,6 +148,9 @@ public class AddSignFranchiseRequest { @ApiModelProperty("是否统管 : 1-统管,0-不统管") private Integer unifiedManagement; + @ApiModelProperty("老店编码 签约类型选择老店转加盟时有") + private String oldShopCode; + public SignFranchiseDO toSignFranchiseDO() { @@ -161,6 +164,7 @@ public class AddSignFranchiseRequest { signFranchiseDO.setContractStartTime(this.contractStartTime); signFranchiseDO.setContractEndTime(this.contractStartEndTime); signFranchiseDO.setImpressionNum(this.impressionNum); + signFranchiseDO.setOldShopCode(this.oldShopCode); // signFranchiseDO.setBusinessStartHours(setMill(this.businessStartHours)); // signFranchiseDO.setBusinessEndHours(setMill(this.businessEndHours)); // signFranchiseDO.setIrregularReason(this.irregularReason); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java index e75765010..0eba431b2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java @@ -245,6 +245,6 @@ public class AddSignFranchiseResponse { private Integer infoConsistencyFlag; @ApiModelProperty("不一致原因") private String reason; - - + @ApiModelProperty("老店编码 签约类型选择老店转加盟时有") + private String oldShopCode; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 12c24c2e5..044bd0cc9 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -62,6 +62,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu private EnterpriseUserRoleDao enterpriseUserRoleDao; @Resource SignFranchiseMapper signFranchiseMapper; + @Resource + SignFranchiseDAO signFranchiseDAO; @Resource UserAuthMappingService userAuthMappingService; @@ -227,7 +229,11 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu //如果已经签约 修改之后从新推送数据 ContractCallbackDTO contractCallbackDTO = pushContractRequest(shopInfoDO, request.getShopId()); if (!Objects.isNull(contractCallbackDTO)){ - signFranchiseMapper.updateAuditByShopId(null, request.getShopId(),contractCallbackDTO); + if (StringUtils.isNoneEmpty(contractCallbackDTO.getStoreCode())){ + shopInfoDO.setShopCode(contractCallbackDTO.getStoreCode()); + shopInfoDAO.updateShopInfo(shopInfoDO); + } + signFranchiseDAO.updateAuditByShopId(null, request.getShopId(),contractCallbackDTO); } } @@ -451,7 +457,11 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } shopAuditInfoMapper.insertSelective(shopAuditInfoDO); Long auditId = shopAuditInfoDO.getId(); - signFranchiseMapper.updateAuditByShopId(auditId, shopId,contractCallbackDTO); + if (contractCallbackDTO!=null&&StringUtils.isNotEmpty(contractCallbackDTO.getStoreCode())){ + shopInfoDO.setShopCode(contractCallbackDTO.getStoreCode()); + shopInfoMapper.updateByPrimaryKeySelective(shopInfoDO); + } + signFranchiseDAO.updateAuditByShopId(auditId, shopId,contractCallbackDTO); //审批记录表记录 List operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83, OperationTypeEnum.OPERATION_TYPE_1.getCode()); operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause()); @@ -495,6 +505,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); contractInformationDTO.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + contractInformationDTO.setOldShopCode(signFranchiseDO.getOldShopCode()); FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); if (enumByCode != null){ From 17494e9fb4826d7d76967a3d9beccbcb7b33c213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 23 Oct 2025 18:01:44 +0800 Subject: [PATCH 015/109] feat:getOldShopCode --- .../com/cool/store/service/impl/SignFranchiseServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 044bd0cc9..1fc2d7341 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -625,6 +625,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu addSignFranchiseResponse.setIntroduceStore(signFranchiseDO.getIntroduceStore()); addSignFranchiseResponse.setIntroductionAward(signFranchiseDO.getIntroductionAward()); addSignFranchiseResponse.setPartnershipSignatoryFirstWhichStore(signFranchiseDO.getPartnershipSignatoryFirstWhichStore()); + addSignFranchiseResponse.setOldShopCode(signFranchiseDO.getOldShopCode()); } else { if (Objects.nonNull(franchiseFeeDO)) { From 3f23c0ae950eadcbf013920a246b781ab8b15e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 29 Oct 2025 19:31:38 +0800 Subject: [PATCH 016/109] =?UTF-8?q?feat:=E8=A3=85=E4=BF=AE=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../decoration/DecorationTeamConfigDAO.java | 37 ++++ .../decoration/ShopDecorationAssignDAO.java | 21 +++ .../dao/decoration/TeamAreaMappingDAO.java | 54 ++++++ .../DecorationTeamConfigMapper.java | 7 + .../ShopDecorationAssignMapper.java | 7 + .../decoration/TeamAreaMappingMapper.java | 48 +++++ .../decoration/DecorationTeamConfigMapper.xml | 16 ++ .../decoration/ShopDecorationAssignMapper.xml | 15 ++ .../decoration/TeamAreaMappingMapper.xml | 66 +++++++ .../dto/decoration/DecorationTeamDTO.java | 12 ++ .../dto/decoration/TeamAreaMappingDTO.java | 21 +++ .../decoration/DecorationTeamConfigDO.java | 168 ++++++++++++++++++ .../decoration/ShopDecorationAssignDO.java | 145 +++++++++++++++ .../entity/decoration/TeamAreaMappingDO.java | 97 ++++++++++ .../request/decoration/AddTeamRequest.java | 21 +++ .../request/decoration/UpdateTeamRequest.java | 28 +++ .../service/DecorationHandleService.java | 42 +++++ .../impl/DecorationHandleServiceImpl.java | 94 ++++++++++ 18 files changed, 899 insertions(+) create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java new file mode 100644 index 000000000..868dbed2a --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java @@ -0,0 +1,37 @@ +package com.cool.store.dao.decoration; + +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.mapper.decoration.DecorationTeamConfigMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:07 + * @Version 1.0 + */ +@Repository +public class DecorationTeamConfigDAO { + + @Resource + private DecorationTeamConfigMapper decorationTeamConfigMapper; + + public void addTeam(DecorationTeamConfigDO decorationTeamConfigDO){ + decorationTeamConfigMapper.insertSelective(decorationTeamConfigDO); + } + + public void updateTeam(DecorationTeamConfigDO decorationTeamConfigDO){ + decorationTeamConfigMapper.updateByPrimaryKeySelective(decorationTeamConfigDO); + } + + public DecorationTeamConfigDO getById(Long id){ + if (id == null){ + return null; + } + return decorationTeamConfigMapper.selectByPrimaryKey(id); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java new file mode 100644 index 000000000..7ad9b71d1 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java @@ -0,0 +1,21 @@ +package com.cool.store.dao.decoration; + +import com.cool.store.mapper.decoration.ShopDecorationAssignMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:07 + * @Version 1.0 + */ +@Repository +public class ShopDecorationAssignDAO { + + @Resource + private ShopDecorationAssignMapper shopDecorationAssignMapper; + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java new file mode 100644 index 000000000..52329d379 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java @@ -0,0 +1,54 @@ +package com.cool.store.dao.decoration; + +import com.cool.store.entity.decoration.TeamAreaMappingDO; +import com.cool.store.mapper.decoration.TeamAreaMappingMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:08 + * @Version 1.0 + */ +@Repository +public class TeamAreaMappingDAO { + + private TeamAreaMappingMapper teamAreaMappingMapper; + + public void batchInsert(Long teamId,List cityId){ + if (teamId == null || CollectionUtils.isEmpty(cityId)){ + return; + } + List list = new ArrayList<>(); + cityId.forEach(x->{ + TeamAreaMappingDO teamAreaMappingDO = new TeamAreaMappingDO(); + teamAreaMappingDO.setTeamId(teamId); + teamAreaMappingDO.setOpenCityId(x); + list.add(teamAreaMappingDO); + }); + teamAreaMappingMapper.batchInsert(list); + } + + public int deletedByTeamId(Long teamId){ + if (teamId == null){ + return 0; + } + return teamAreaMappingMapper.deletedByTeamId(teamId); + } + + public int deletedIds(List ids){ + if (CollectionUtils.isEmpty(ids)){ + return 0; + } + return teamAreaMappingMapper.deletedIds(ids); + } + + + + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java new file mode 100644 index 000000000..1eead2a3f --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.decoration; + +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import tk.mybatis.mapper.common.Mapper; + +public interface DecorationTeamConfigMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java new file mode 100644 index 000000000..35a6fc8d9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.decoration; + +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import tk.mybatis.mapper.common.Mapper; + +public interface ShopDecorationAssignMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java new file mode 100644 index 000000000..b4cf228be --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/TeamAreaMappingMapper.java @@ -0,0 +1,48 @@ +package com.cool.store.mapper.decoration; + +import com.cool.store.dto.decoration.TeamAreaMappingDTO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface TeamAreaMappingMapper extends Mapper { + + /** + * 批量插入 + * @param list + * @return + */ + Integer batchInsert(@Param("list") List list); + /** + * 根据团队id删除 更新团队id时候删除 + * @param teamId + * @return + */ + Integer deletedByTeamId(@Param("teamId") Long teamId); + + /** + * 根据ids删除 + * @param ids + * @return + */ + Integer deletedIds(@Param("ids") List ids); + + /** + * 根据城市id查询 + * @param cityId + * @return + */ + TeamAreaMappingDO getByCityId(@Param("cityId") Long cityId); + + /** + * 根据团队id批量查询 + * @param teamIdList + * @return + */ + List listByTeamIdList(@Param("teamIdList") List teamIdList); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml new file mode 100644 index 000000000..2ddba67a1 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml new file mode 100644 index 000000000..b4709b3a2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml new file mode 100644 index 000000000..8c82fd7f2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/TeamAreaMappingMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + INSERT INTO zxjp_team_area_mapping ( + team_id, + open_city_id + ) VALUES + + ( + #{item.teamId}, + #{item.openCityId} + ) + + + + + + DELETE FROM zxjp_team_area_mapping + WHERE team_id = #{teamId} + + + + + DELETE FROM zxjp_team_area_mapping + WHERE id IN + + #{id} + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java new file mode 100644 index 000000000..881b4327f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java @@ -0,0 +1,12 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/10/29 18:41 + * @Version 1.0 + */ +@Data +public class DecorationTeamDTO { +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java new file mode 100644 index 000000000..0f616ac1a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TeamAreaMappingDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +import javax.persistence.Column; + +/** + * @Author suzhuhong + * @Date 2025/10/29 19:01 + * @Version 1.0 + */ +@Data +public class TeamAreaMappingDTO { + + private Long teamId; + + private Long openCityId; + + private String openCityName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java new file mode 100644 index 000000000..718b81d42 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/DecorationTeamConfigDO.java @@ -0,0 +1,168 @@ +package com.cool.store.entity.decoration; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_decoration_team_config") +public class DecorationTeamConfigDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 团队名称 + */ + @Column(name = "team_name") + private String teamName; + + /** + * 团队编号 + */ + @Column(name = "team_code") + private String teamCode; + + /** + * 使用系统(1-CRM,2-红圈通) + */ + @Column(name = "use_system") + private Integer useSystem; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 删除状态(0-正常,1-删除) + */ + private Integer deleted; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取团队名称 + * + * @return team_name - 团队名称 + */ + public String getTeamName() { + return teamName; + } + + /** + * 设置团队名称 + * + * @param teamName 团队名称 + */ + public void setTeamName(String teamName) { + this.teamName = teamName; + } + + /** + * 获取团队编号 + * + * @return team_code - 团队编号 + */ + public String getTeamCode() { + return teamCode; + } + + /** + * 设置团队编号 + * + * @param teamCode 团队编号 + */ + public void setTeamCode(String teamCode) { + this.teamCode = teamCode; + } + + /** + * 获取使用系统(1-CRM,2-红圈通) + * + * @return use_system - 使用系统(1-CRM,2-红圈通) + */ + public Integer getUseSystem() { + return useSystem; + } + + /** + * 设置使用系统(1-CRM,2-红圈通) + * + * @param useSystem 使用系统(1-CRM,2-红圈通) + */ + public void setUseSystem(Integer useSystem) { + this.useSystem = useSystem; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取删除状态(0-正常,1-删除) + * + * @return deleted - 删除状态(0-正常,1-删除) + */ + public Integer getDeleted() { + return deleted; + } + + /** + * 设置删除状态(0-正常,1-删除) + * + * @param deleted 删除状态(0-正常,1-删除) + */ + public void setDeleted(Integer deleted) { + this.deleted = deleted; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java new file mode 100644 index 000000000..8f838ab7d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java @@ -0,0 +1,145 @@ +package com.cool.store.entity.decoration; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_shop_decoration_assign") +public class ShopDecorationAssignDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 装修团队id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 分配状态(0-待分配,1-已分配) + */ + @Column(name = "decoration_desc_status") + private Byte decorationDescStatus; + + /** + * 装修团队id + */ + @Column(name = "decoration_team_id") + private Long decorationTeamId; + + /** + * 创建时间 + */ + @Column(name = "created_time") + private Date createdTime; + + /** + * 更新时间 + */ + @Column(name = "updated_time") + private Date updatedTime; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取装修团队id + * + * @return shop_id - 装修团队id + */ + public Long getShopId() { + return shopId; + } + + /** + * 设置装修团队id + * + * @param shopId 装修团队id + */ + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + /** + * 获取分配状态(0-待分配,1-已分配) + * + * @return decoration_desc_status - 分配状态(0-待分配,1-已分配) + */ + public Byte getDecorationDescStatus() { + return decorationDescStatus; + } + + /** + * 设置分配状态(0-待分配,1-已分配) + * + * @param decorationDescStatus 分配状态(0-待分配,1-已分配) + */ + public void setDecorationDescStatus(Byte decorationDescStatus) { + this.decorationDescStatus = decorationDescStatus; + } + + /** + * 获取装修团队id + * + * @return decoration_team_id - 装修团队id + */ + public Long getDecorationTeamId() { + return decorationTeamId; + } + + /** + * 设置装修团队id + * + * @param decorationTeamId 装修团队id + */ + public void setDecorationTeamId(Long decorationTeamId) { + this.decorationTeamId = decorationTeamId; + } + + /** + * 获取创建时间 + * + * @return created_time - 创建时间 + */ + public Date getCreatedTime() { + return createdTime; + } + + /** + * 设置创建时间 + * + * @param createdTime 创建时间 + */ + public void setCreatedTime(Date createdTime) { + this.createdTime = createdTime; + } + + /** + * 获取更新时间 + * + * @return updated_time - 更新时间 + */ + public Date getUpdatedTime() { + return updatedTime; + } + + /** + * 设置更新时间 + * + * @param updatedTime 更新时间 + */ + public void setUpdatedTime(Date updatedTime) { + this.updatedTime = updatedTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java new file mode 100644 index 000000000..028ebf824 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/TeamAreaMappingDO.java @@ -0,0 +1,97 @@ +package com.cool.store.entity.decoration; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_team_area_mapping") +public class TeamAreaMappingDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 团队ID + */ + @Column(name = "team_id") + private Long teamId; + + /** + * 城市ID + */ + @Column(name = "open_city_id") + private Long openCityId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取团队ID + * + * @return team_id - 团队ID + */ + public Long getTeamId() { + return teamId; + } + + /** + * 设置团队ID + * + * @param teamId 团队ID + */ + public void setTeamId(Long teamId) { + this.teamId = teamId; + } + + /** + * 获取城市ID + * + * @return open_city_id - 城市ID + */ + public Long getOpenCityId() { + return openCityId; + } + + /** + * 设置城市ID + * + * @param openCityId 城市ID + */ + public void setOpenCityId(Long openCityId) { + this.openCityId = openCityId; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java new file mode 100644 index 000000000..8d1d9493d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/AddTeamRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 16:13 + * @Version 1.0 + */ +@Data +public class AddTeamRequest { + @ApiModelProperty("团队名称") + private String teamName; + @ApiModelProperty("负责区域列表 直传市ID,选择省时,将市Id全部传入") + private List openCityIdList; + @ApiModelProperty("团队名称") + private Integer userSystem; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java new file mode 100644 index 000000000..3ded0fdea --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/UpdateTeamRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/10/29 16:16 + * @Version 1.0 + */ +@Data +public class UpdateTeamRequest { + + @ApiModelProperty("ID") + private Long id; + @ApiModelProperty("团队名称") + private String teamCode; + @ApiModelProperty("团队名称") + private String teamName; + @ApiModelProperty("负责区域列表 直传市ID,选择省时,将市Id全部传入") + private List openCityIdList; + @ApiModelProperty("团队名称") + private Integer userSystem; + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java new file mode 100644 index 000000000..e5eeb781a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java @@ -0,0 +1,42 @@ +package com.cool.store.service; + +import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.UpdateTeamRequest; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:54 + * @Version 1.0 + */ +public interface DecorationHandleService { + + + /** + * 新增团队 + * @param request + * @return + */ + Boolean addTeam(AddTeamRequest request); + + /** + * 修改团队 + * @param request + * @return + */ + Boolean update(UpdateTeamRequest request); + + /** + * 删除团队 + * @param teamId + * @return + */ + Boolean deleteByTeamId(Long teamId); + + + + + + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java new file mode 100644 index 000000000..19e3fcd7e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java @@ -0,0 +1,94 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.decoration.DecorationTeamConfigDAO; +import com.cool.store.dao.decoration.TeamAreaMappingDAO; +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.UpdateTeamRequest; +import com.cool.store.service.DecorationHandleService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.StringUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author suzhuhong + * @Date 2025/10/29 15:55 + * @Version 1.0 + */ +@Service +public class DecorationHandleServiceImpl implements DecorationHandleService { + + + @Resource + private DecorationTeamConfigDAO decorationTeamConfigDAO; + @Resource + private TeamAreaMappingDAO teamAreaMappingDAO; + @Resource + RedisUtilPool redisUtilPool; + + @Override + public Boolean addTeam(AddTeamRequest request) { + //校验 + if (Objects.isNull(request)||CollectionUtils.isEmpty(request.getOpenCityIdList()) || StringUtil.isEmpty(request.getTeamName())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + //先删除城市团队关系 + teamAreaMappingDAO.deletedIds(request.getOpenCityIdList()); + + DecorationTeamConfigDO decorationTeamConfigDO = new DecorationTeamConfigDO(); + decorationTeamConfigDO.setTeamName(request.getTeamName()); + decorationTeamConfigDO.setTeamCode(getNextNumber()); + decorationTeamConfigDO.setUseSystem(request.getUserSystem()); + decorationTeamConfigDAO.addTeam(decorationTeamConfigDO); + teamAreaMappingDAO.batchInsert(decorationTeamConfigDO.getId(),request.getOpenCityIdList()); + return Boolean.TRUE; + } + + @Override + public Boolean update(UpdateTeamRequest request) { + if (request.getId() == null||CollectionUtils.isEmpty(request.getOpenCityIdList()) || StringUtil.isEmpty(request.getTeamName())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + DecorationTeamConfigDO teamConfigDO = decorationTeamConfigDAO.getById(request.getId()); + if (teamConfigDO==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + teamConfigDO.setTeamName(request.getTeamName()); + teamConfigDO.setUseSystem(request.getUserSystem()); + decorationTeamConfigDAO.updateTeam(teamConfigDO); + //删除团队城市关系 + teamAreaMappingDAO.deletedByTeamId(teamConfigDO.getId()); + //新增更新之后的团队城市关系 + teamAreaMappingDAO.batchInsert(teamConfigDO.getId(),request.getOpenCityIdList()); + return Boolean.TRUE; + } + + @Override + public Boolean deleteByTeamId(Long teamId) { + DecorationTeamConfigDO teamConfigDO = decorationTeamConfigDAO.getById(teamId); + if (teamConfigDO==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + teamConfigDO.setDeleted(1); + teamAreaMappingDAO.deletedByTeamId(teamId); + return Boolean.TRUE; + } + + + public String getNextNumber() { + Long current = redisUtilPool.incrby("counter_key", 1); + if (current == 1) { + // 如果是第一次,重新设置为 1(因为 increment 从 0 开始) + redisUtilPool.setString("counter_key", "1"); + current = 1L; + } + return String.format("TD%04d", current); + } + +} From ec73dad33e71322d90ef23913da66ccd37acf12b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 30 Oct 2025 18:34:54 +0800 Subject: [PATCH 017/109] =?UTF-8?q?feat:=E8=A3=85=E4=BF=AE=E5=9B=A2?= =?UTF-8?q?=E9=98=9F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Decoration/DecorationUseSystemEnum.java | 25 ++++++++ .../decoration/DecorationTeamConfigDAO.java | 5 ++ .../dao/decoration/TeamAreaMappingDAO.java | 12 ++++ .../DecorationTeamConfigMapper.java | 13 ++++ .../decoration/DecorationTeamConfigMapper.xml | 11 ++++ .../dto/decoration/DecorationTeamDTO.java | 13 ++++ .../service/DecorationHandleService.java | 12 ++++ .../impl/DecorationHandleServiceImpl.java | 24 ++++++++ .../webb/DecorationAllocationController.java | 59 +++++++++++++++++++ 9 files changed, 174 insertions(+) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java new file mode 100644 index 000000000..b304cf76a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums.Decoration; + +/** + * @Author suzhuhong + * @Date 2025/10/30 14:35 + * @Version 1.0 + */ +public enum DecorationUseSystemEnum { + + CRM(1,"CRM"), + HQT(2,"红圈通"); + + + private Integer code; + + private String userSystemName; + + + DecorationUseSystemEnum(Integer code, String userSystemName) { + this.code = code; + this.userSystemName = userSystemName; + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java index 868dbed2a..d5111062d 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/DecorationTeamConfigDAO.java @@ -1,5 +1,6 @@ package com.cool.store.dao.decoration; +import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.entity.decoration.DecorationTeamConfigDO; import com.cool.store.mapper.decoration.DecorationTeamConfigMapper; import org.springframework.stereotype.Repository; @@ -33,5 +34,9 @@ public class DecorationTeamConfigDAO { return decorationTeamConfigMapper.selectByPrimaryKey(id); } + public List listByCondition(){ + return decorationTeamConfigMapper.listByCondition(); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java index 52329d379..c6c61c720 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java @@ -1,5 +1,7 @@ package com.cool.store.dao.decoration; +import com.aliyun.openservices.shade.com.google.common.collect.Maps; +import com.cool.store.dto.decoration.TeamAreaMappingDTO; import com.cool.store.entity.decoration.TeamAreaMappingDO; import com.cool.store.mapper.decoration.TeamAreaMappingMapper; import org.apache.commons.collections4.CollectionUtils; @@ -7,6 +9,8 @@ import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -47,6 +51,14 @@ public class TeamAreaMappingDAO { } + public Map> listByTeamIdList(List teamIdList){ + if (CollectionUtils.isEmpty(teamIdList)){ + return Maps.newHashMap(); + } + List teamAreaMappingDTOS = teamAreaMappingMapper.listByTeamIdList(teamIdList); + Map> map = teamAreaMappingDTOS.stream().collect(Collectors.groupingBy(TeamAreaMappingDTO::getTeamId)); + return map; + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java index 1eead2a3f..2cff39b62 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/DecorationTeamConfigMapper.java @@ -1,7 +1,20 @@ package com.cool.store.mapper.decoration; +import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.entity.decoration.DecorationTeamConfigDO; import tk.mybatis.mapper.common.Mapper; +import java.util.List; + public interface DecorationTeamConfigMapper extends Mapper { + + + /** + * 查询团队 + * @return + */ + List listByCondition(); + + + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml index 2ddba67a1..c89ee9ca1 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml @@ -13,4 +13,15 @@ + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java index 881b4327f..0c8ab3113 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationTeamDTO.java @@ -2,6 +2,8 @@ package com.cool.store.dto.decoration; import lombok.Data; +import java.util.List; + /** * @Author suzhuhong * @Date 2025/10/29 18:41 @@ -9,4 +11,15 @@ import lombok.Data; */ @Data public class DecorationTeamDTO { + + private Long id; + + private String teamName; + + private String teamCode; + + private Integer useSystem; + + private List cityList; + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java index e5eeb781a..578017d5f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java @@ -1,7 +1,12 @@ package com.cool.store.service; +import com.cool.store.common.PageBasicInfo; +import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.request.decoration.AddTeamRequest; import com.cool.store.request.decoration.UpdateTeamRequest; +import com.github.pagehelper.PageInfo; + +import java.util.List; /** * @Author suzhuhong @@ -32,6 +37,13 @@ public interface DecorationHandleService { */ Boolean deleteByTeamId(Long teamId); + /** + * pageBasicInfo + * 根据条件查询团队 + * @return + */ + PageInfo listByCondition(PageBasicInfo pageBasicInfo ); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java index 19e3fcd7e..5a2a47a0c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java @@ -1,7 +1,10 @@ package com.cool.store.service.impl; +import com.cool.store.common.PageBasicInfo; import com.cool.store.dao.decoration.DecorationTeamConfigDAO; import com.cool.store.dao.decoration.TeamAreaMappingDAO; +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.dto.decoration.TeamAreaMappingDTO; import com.cool.store.entity.decoration.DecorationTeamConfigDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; @@ -10,11 +13,16 @@ import com.cool.store.request.decoration.UpdateTeamRequest; import com.cool.store.service.DecorationHandleService; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.StringUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -80,6 +88,22 @@ public class DecorationHandleServiceImpl implements DecorationHandleService { return Boolean.TRUE; } + @Override + public PageInfo listByCondition(PageBasicInfo pageBasicInfo) { + PageHelper.startPage(pageBasicInfo.getPageNum(), pageBasicInfo.getPageSize()); + List list = decorationTeamConfigDAO.listByCondition(); + if (CollectionUtils.isEmpty(list)){ + return new PageInfo<>(); + } + List teamIds = list.stream().map(DecorationTeamDTO::getId).collect(Collectors.toList()); + Map> listMap = teamAreaMappingDAO.listByTeamIdList(teamIds); + list.forEach(x->{ + x.setCityList(listMap.get(x.getId())); + }); + PageInfo result = new PageInfo<>(list); + return result; + } + public String getNextNumber() { Long current = redisUtilPool.incrby("counter_key", 1); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java new file mode 100644 index 000000000..21cae571a --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java @@ -0,0 +1,59 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.dto.decoration.DecorationTeamDTO; +import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.UpdateTeamRequest; +import com.cool.store.service.DecorationHandleService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/10/30 18:00 + * @Version 1.0 + */ +@RequestMapping("/pc/decoration") +@RestController +@Api(tags = "装修分配团队") +@Slf4j +public class DecorationAllocationController { + + @Resource + private DecorationHandleService decorationHandleService; + + + @PostMapping("/addTeam") + @ApiOperation("添加团队") + public Boolean addTeam(AddTeamRequest request){ + return decorationHandleService.addTeam(request); + } + + @PostMapping("/update") + @ApiOperation("修改团队") + public Boolean update(UpdateTeamRequest request){ + return decorationHandleService.update(request); + } + + @PostMapping("/deleteByTeamId") + @ApiOperation("删除团队") + public Boolean deleteByTeamId(Long teamId){ + return decorationHandleService.deleteByTeamId(teamId); + } + + + @PostMapping("/listByCondition") + @ApiOperation("查询团队") + public PageInfo listByCondition(PageBasicInfo pageBasicInfo){ + return decorationHandleService.listByCondition(pageBasicInfo); + } + + +} From 45a53a5607b679d97c757a4b6b992970174e0add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 31 Oct 2025 09:58:04 +0800 Subject: [PATCH 018/109] =?UTF-8?q?feat:=E5=9B=A2=E9=98=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/decoration/TeamAreaMappingDAO.java | 2 ++ .../decoration/DecorationTeamConfigMapper.xml | 4 ++-- .../impl/DecorationHandleServiceImpl.java | 1 + .../webb/DecorationAllocationController.java | 18 ++++++++++-------- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java index c6c61c720..e92e5e2af 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java @@ -7,6 +7,7 @@ import com.cool.store.mapper.decoration.TeamAreaMappingMapper; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -20,6 +21,7 @@ import java.util.stream.Collectors; @Repository public class TeamAreaMappingDAO { + @Resource private TeamAreaMappingMapper teamAreaMappingMapper; public void batchInsert(Long teamId,List cityId){ diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml index c89ee9ca1..733a5c109 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/DecorationTeamConfigMapper.xml @@ -21,7 +21,7 @@ t.team_code, t.use_system from - zxjp_decoration_team_config - where deleted = 0 + zxjp_decoration_team_config t + where t.deleted = 0 \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java index 5a2a47a0c..3eaba3aba 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java @@ -85,6 +85,7 @@ public class DecorationHandleServiceImpl implements DecorationHandleService { } teamConfigDO.setDeleted(1); teamAreaMappingDAO.deletedByTeamId(teamId); + decorationTeamConfigDAO.updateTeam(teamConfigDO); return Boolean.TRUE; } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java index 21cae571a..8fa3dc4f9 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DecorationAllocationController.java @@ -4,12 +4,14 @@ import com.cool.store.common.PageBasicInfo; import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.request.decoration.AddTeamRequest; import com.cool.store.request.decoration.UpdateTeamRequest; +import com.cool.store.response.ResponseResult; import com.cool.store.service.DecorationHandleService; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -32,27 +34,27 @@ public class DecorationAllocationController { @PostMapping("/addTeam") @ApiOperation("添加团队") - public Boolean addTeam(AddTeamRequest request){ - return decorationHandleService.addTeam(request); + public ResponseResult addTeam(@RequestBody AddTeamRequest request){ + return ResponseResult.success(decorationHandleService.addTeam(request)); } @PostMapping("/update") @ApiOperation("修改团队") - public Boolean update(UpdateTeamRequest request){ - return decorationHandleService.update(request); + public ResponseResult update(@RequestBody UpdateTeamRequest request){ + return ResponseResult.success(decorationHandleService.update(request)); } @PostMapping("/deleteByTeamId") @ApiOperation("删除团队") - public Boolean deleteByTeamId(Long teamId){ - return decorationHandleService.deleteByTeamId(teamId); + public ResponseResult deleteByTeamId(Long teamId){ + return ResponseResult.success(decorationHandleService.deleteByTeamId(teamId)); } @PostMapping("/listByCondition") @ApiOperation("查询团队") - public PageInfo listByCondition(PageBasicInfo pageBasicInfo){ - return decorationHandleService.listByCondition(pageBasicInfo); + public ResponseResult> listByCondition(@RequestBody PageBasicInfo pageBasicInfo){ + return ResponseResult.success(decorationHandleService.listByCondition(pageBasicInfo)); } From 18fb551a728f2b590a932ea11faaf9698944a6a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 31 Oct 2025 15:14:08 +0800 Subject: [PATCH 019/109] =?UTF-8?q?feat:=E5=9B=A2=E9=98=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/dao/decoration/TeamAreaMappingDAO.java | 5 +++++ .../store/service/DecorationHandleService.java | 7 +++++++ .../service/impl/DecorationHandleServiceImpl.java | 15 +++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java index e92e5e2af..3a6313a9b 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/TeamAreaMappingDAO.java @@ -5,6 +5,7 @@ import com.cool.store.dto.decoration.TeamAreaMappingDTO; import com.cool.store.entity.decoration.TeamAreaMappingDO; import com.cool.store.mapper.decoration.TeamAreaMappingMapper; import org.apache.commons.collections4.CollectionUtils; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import javax.annotation.Resource; @@ -52,6 +53,10 @@ public class TeamAreaMappingDAO { return teamAreaMappingMapper.deletedIds(ids); } + public TeamAreaMappingDO getByCityId(Long cityId){ + return teamAreaMappingMapper.getByCityId(cityId); + } + public Map> listByTeamIdList(List teamIdList){ if (CollectionUtils.isEmpty(teamIdList)){ diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java index 578017d5f..5207a464a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java @@ -44,6 +44,13 @@ public interface DecorationHandleService { */ PageInfo listByCondition(PageBasicInfo pageBasicInfo ); + /** + * openCityId + * @param openCityId + * @return + */ + Long getDecorationTeamIdByCityId(Long openCityId); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java index 3eaba3aba..8a4a81594 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java @@ -6,6 +6,8 @@ import com.cool.store.dao.decoration.TeamAreaMappingDAO; import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.dto.decoration.TeamAreaMappingDTO; import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; +import com.cool.store.enums.Decoration.DecorationUseSystemEnum; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.decoration.AddTeamRequest; @@ -105,6 +107,19 @@ public class DecorationHandleServiceImpl implements DecorationHandleService { return result; } + @Override + public Long getDecorationTeamIdByCityId(Long openCityId) { + if (openCityId==null){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + TeamAreaMappingDO cityInfo = teamAreaMappingDAO.getByCityId(openCityId); + if (Objects.isNull(cityInfo)){ + return null; + } + DecorationTeamConfigDO teamInfo = decorationTeamConfigDAO.getById(cityInfo.getTeamId()); + return teamInfo.getId(); + } + public String getNextNumber() { Long current = redisUtilPool.incrby("counter_key", 1); From 614f42f7ca68813b01fb2ba78bb696f69f01ef11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 3 Nov 2025 15:09:54 +0800 Subject: [PATCH 020/109] feat:handleDecorationTeam --- .../Decoration/DecorationDescStatus.java | 37 ++++++++ .../Decoration/DecorationUseSystemEnum.java | 7 ++ .../com/cool/store/enums/ErrorCodeEnum.java | 9 +- .../cool/store/enums/RocketMqGroupEnum.java | 3 +- .../com/cool/store/enums/RocketMqTagEnum.java | 3 +- .../decoration/ShopDecorationAssignDAO.java | 50 +++++++++++ .../ShopDecorationAssignMapper.java | 23 +++++ .../decoration/ShopDecorationAssignMapper.xml | 60 +++++++++++++ .../dto/decoration/DecorationListDTO.java | 50 +++++++++++ .../decoration/ShopDecorationAssignDO.java | 6 +- .../decoration/DecorationListRequest.java | 38 ++++++++ .../store/mq/consumer/ConsumerClient.java | 16 ++++ .../ShopDecorationAssignListener.java | 60 +++++++++++++ .../service/DecorationHandleService.java | 16 ++++ .../store/service/SignFranchiseService.java | 3 + .../impl/DecorationHandleServiceImpl.java | 86 ++++++++++++++++++- .../impl/SignFranchiseServiceImpl.java | 40 ++++++++- 17 files changed, 493 insertions(+), 14 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java new file mode 100644 index 000000000..ca91fe397 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationDescStatus.java @@ -0,0 +1,37 @@ +package com.cool.store.enums.Decoration; + +/** + * @Author suzhuhong + * @Date 2025/11/3 9:40 + * @Version 1.0 + */ +public enum DecorationDescStatus { + + TO_BE_ASSIGNED(0, "待分配"), + ASSIGNED(1, "已分配"), + ; + + + + + private Integer code; + + private String descStatus; + + DecorationDescStatus(Integer code, String descStatus) { + this.code = code; + this.descStatus = descStatus; + } + + public Integer getCode() { + return code; + } + + public String getDescStatus() { + return descStatus; + } + + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java index b304cf76a..807068d63 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/Decoration/DecorationUseSystemEnum.java @@ -21,5 +21,12 @@ public enum DecorationUseSystemEnum { this.userSystemName = userSystemName; } + public Integer getCode() { + return code; + } + + public String getUserSystemName() { + return userSystemName; + } } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index cbbb7cdd3..32ee77f96 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -310,9 +310,12 @@ public enum ErrorCodeEnum { MESSAGE_NOT_HANDLED(1610008,"当前消息无需处理,请确认消息处理类型!",null), MESSAGE_PUBLISH(1610009,"您选择通知任务正在发布中,请稍后重试!",null), - NOT_FLAGSHIP_STORE(16100005,"非直营店,无法跳过缴费阶段!",null), - NOT_FLAGSHIP_STORE_NOT_EXIST(16100006,"当前阶段加盟类型不能变更!",null), - JOIN_MODE_NOT_ALLOW_OPERATE(16100007,"加盟部人员只能新建加盟店或联营店,请确认!",null), + NOT_FLAGSHIP_STORE(1611005,"非直营店,无法跳过缴费阶段!",null), + NOT_FLAGSHIP_STORE_NOT_EXIST(1611006,"当前阶段加盟类型不能变更!",null), + JOIN_MODE_NOT_ALLOW_OPERATE(1611007,"加盟部人员只能新建加盟店或联营店,请确认!",null), + + //装修 + TEAM_USED(1612001,"该装修团队有门店使用,无法删除,请确认!",null), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java index 76e751674..68ebaf10f 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java @@ -33,7 +33,8 @@ public enum RocketMqGroupEnum { FEI_SHU_EVENT_LISTENER("fei_shu_event_listener", new ArrayList<>(Arrays.asList(RocketMqTagEnum.USER_EVENT, RocketMqTagEnum.AUTH_SCOPE_CHANGE, RocketMqTagEnum.DEPT_EVENT))), - STORE_USER_UPDATE("store_user_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_USER_UPDATE))) + STORE_USER_UPDATE("store_user_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_USER_UPDATE))), + SHOP_DECORATION_ASSIGN("shop_decoration_assign", new ArrayList<>(Arrays.asList(RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN))) ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java index 4635dd69d..b8b2bba54 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java @@ -18,7 +18,8 @@ public enum RocketMqTagEnum { ZXJP_CREATE_STORE("zxjp_create_store", "正新鸡排招商创建门店"), PARTNER_LICENSE_SYNC_QUEUE("partner_license_sync_queue", "招商证照信息同步"), BUSINESS_SYNC("business_sync", "工商食安信息同步"), - STORE_USER_UPDATE("store_user_update", "门店信息人员变更同步菜品"); + STORE_USER_UPDATE("store_user_update", "门店信息人员变更同步菜品"), + DELAY_SHOP_DECORATION_ASSIGN("shop_decoration_assign","门店装修分配"); ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java index 7ad9b71d1..8b75e8fbd 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/decoration/ShopDecorationAssignDAO.java @@ -1,9 +1,16 @@ package com.cool.store.dao.decoration; +import com.cool.store.dao.HyOpenAreaInfoDAO; +import com.cool.store.dto.decoration.DecorationListDTO; +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; import com.cool.store.mapper.decoration.ShopDecorationAssignMapper; +import com.cool.store.request.decoration.DecorationListRequest; import org.springframework.stereotype.Repository; import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -15,7 +22,50 @@ public class ShopDecorationAssignDAO { @Resource private ShopDecorationAssignMapper shopDecorationAssignMapper; + @Resource + HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + public Integer insert(ShopDecorationAssignDO shopDecorationAssignDO) { + if (shopDecorationAssignDO == null){ + return 0; + } + return shopDecorationAssignMapper.insert(shopDecorationAssignDO); + } + + public ShopDecorationAssignDO getById(Long id) { + if (id == null){ + return null; + } + return shopDecorationAssignMapper.selectByPrimaryKey(id); + } + + public Integer update(ShopDecorationAssignDO shopDecorationAssignDO) { + if (shopDecorationAssignDO == null){ + return 0; + } + return shopDecorationAssignMapper.updateByPrimaryKey(shopDecorationAssignDO); + } + + public Integer countByTeamId(Long teamId) { + if (teamId == null){ + return 0; + } + return shopDecorationAssignMapper.countByTeamId(teamId); + } + + public List listByCondition(DecorationListRequest request) { + if (request == null){ + return null; + } + if (request.getWantShopAreaId()!=null){ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(request.getWantShopAreaId()); + List hyOpenAreaInfoDOList = hyOpenAreaInfoDAO.queryByKeyword(hyOpenAreaInfoDO.getAreaPath(), null, null, false); + List wantShopAreaIds = hyOpenAreaInfoDOList.stream().map(HyOpenAreaInfoDO::getId).collect(Collectors.toList()); + request.setWantShopAreaIds(wantShopAreaIds); + } + return shopDecorationAssignMapper.listByCondition(request); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java index 35a6fc8d9..26c7a25f3 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java @@ -1,7 +1,30 @@ package com.cool.store.mapper.decoration; +import com.cool.store.dto.decoration.DecorationListDTO; import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.request.decoration.DecorationListRequest; +import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.common.Mapper; +import java.util.List; + public interface ShopDecorationAssignMapper extends Mapper { + + + /** + * 查询团队被门店使用次数 + * @param teamId + * @return + */ + Integer countByTeamId(Long teamId); + + /** + * 查询分配装修团队列表 + * @param request + * @return + */ + List listByCondition(@Param("request") DecorationListRequest request); + + + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml index b4709b3a2..b7c9e78b3 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml @@ -12,4 +12,64 @@ + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java new file mode 100644 index 000000000..8abea507f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationListDTO.java @@ -0,0 +1,50 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/3 11:23 + * @Version 1.0 + */ +@Data +public class DecorationListDTO { + + @ApiModelProperty("门店ID") + private Long shopId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("门店编号") + private String shopCode; + + @ApiModelProperty("门店区域ID") + private String regionId; + + @ApiModelProperty("门店区域名称") + private String regionName; + + @ApiModelProperty("门店省") + private String province; + + @ApiModelProperty("门店市") + private String city; + + @ApiModelProperty("门店县") + private String district; + + @ApiModelProperty("门店详细地址") + private String detailAddress; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("门店签约类型") + private Integer signType; + + @ApiModelProperty("门店装修分配状态") + private Integer decorationDescStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java index 8f838ab7d..b2e45d82e 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/decoration/ShopDecorationAssignDO.java @@ -19,7 +19,7 @@ public class ShopDecorationAssignDO { * 分配状态(0-待分配,1-已分配) */ @Column(name = "decoration_desc_status") - private Byte decorationDescStatus; + private Integer decorationDescStatus; /** * 装修团队id @@ -76,7 +76,7 @@ public class ShopDecorationAssignDO { * * @return decoration_desc_status - 分配状态(0-待分配,1-已分配) */ - public Byte getDecorationDescStatus() { + public Integer getDecorationDescStatus() { return decorationDescStatus; } @@ -85,7 +85,7 @@ public class ShopDecorationAssignDO { * * @param decorationDescStatus 分配状态(0-待分配,1-已分配) */ - public void setDecorationDescStatus(Byte decorationDescStatus) { + public void setDecorationDescStatus(Integer decorationDescStatus) { this.decorationDescStatus = decorationDescStatus; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java new file mode 100644 index 000000000..328e96bb8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/decoration/DecorationListRequest.java @@ -0,0 +1,38 @@ +package com.cool.store.request.decoration; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/3 13:31 + * @Version 1.0 + */ +@Data +public class DecorationListRequest extends PageBasicInfo { + + @ApiModelProperty("关键字 门店名称/门店编码") + private String keyword; + + @ApiModelProperty("门店类型") + private Integer storeType; + + @ApiModelProperty("门店签约类型") + private Integer signType; + + @ApiModelProperty("门店区域ID") + private Integer regionId; + + @ApiModelProperty("门店意向开店区域") + private Long wantShopAreaId; + + @ApiModelProperty(value = "门店意向开店区域IDs",hidden = true) + private List wantShopAreaIds; + + @ApiModelProperty("门店装修分配状态") + private Integer decorationDescStatus; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java index e720e5c03..fd3635272 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java @@ -8,6 +8,7 @@ import com.aliyun.openservices.ons.api.bean.Subscription; import com.cool.store.constants.CommonConstants; import com.cool.store.enums.RocketMqGroupEnum; import com.cool.store.mq.RocketMqConfig; +import com.cool.store.mq.consumer.listener.ShopDecorationAssignListener; import com.cool.store.mq.consumer.listener.StoreUserUpdateListener; import com.cool.store.mq.consumer.listener.XfsgTrainingPersonSyncListener; import com.google.common.collect.Maps; @@ -35,6 +36,8 @@ public class ConsumerClient { private XfsgTrainingPersonSyncListener xfsgTrainingPersonSyncListener; @Resource private StoreUserUpdateListener storeUserUpdateListener; + @Resource + private ShopDecorationAssignListener shopDecorationAssignListener; /** * 获取通用配置 @@ -101,4 +104,17 @@ public class ConsumerClient { return consumerBean; } + @Bean(initMethod = "start", destroyMethod = "shutdown") + public ConsumerBean shopDecorationAssign() { + RocketMqGroupEnum groupEnum = RocketMqGroupEnum.SHOP_DECORATION_ASSIGN; + ConsumerBean consumerBean = new ConsumerBean(); + //配置文件 + Properties properties = getCommonProperties(groupEnum); + consumerBean.setProperties(properties); + Map commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, shopDecorationAssignListener); + //订阅多个topic如上面设置 + consumerBean.setSubscriptionTable(commonSubscriptionTable); + return consumerBean; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java new file mode 100644 index 000000000..b394b6872 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/ShopDecorationAssignListener.java @@ -0,0 +1,60 @@ +package com.cool.store.mq.consumer.listener; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.ons.api.Action; +import com.aliyun.openservices.ons.api.ConsumeContext; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.MessageListener; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.store.StoreUserPositionDTO; +import com.cool.store.dto.store.StoreUserUpdateDTO; +import com.cool.store.service.DecorationHandleService; +import com.cool.store.utils.RedisUtilPool; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/3 10:13 + * @Version 1.0 + */ +@Slf4j +@Service +public class ShopDecorationAssignListener implements MessageListener { + + @Autowired + public RedisUtilPool redisUtilPool; + @Resource + DecorationHandleService decorationHandleService; + + @Override + public Action consume(Message message, ConsumeContext context) { + String text = new String(message.getBody()); + if(StringUtils.isBlank(text)){ + log.info("消息体为空,tag:{},messageId:{}",message.getTag(),message.getMsgID()); + return Action.CommitMessage; + } + String lockKey = "ShopDecorationAssignListener:" + message.getMsgID(); + boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES); + if(lock){ + try { + decorationHandleService.handleDecorationTeam(Long.valueOf(text)); + }catch (Exception e){ + log.error("ShopDecorationAssignListener consume error",e); + return Action.ReconsumeLater; + }finally { + redisUtilPool.delKey(lockKey); + } + log.info("消费成功,tag:{},messageId:{},reqBody={}",message.getTag(),message.getMsgID(),text); + return Action.CommitMessage; + } + return Action.ReconsumeLater; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java index 5207a464a..a1a186f84 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationHandleService.java @@ -1,8 +1,10 @@ package com.cool.store.service; import com.cool.store.common.PageBasicInfo; +import com.cool.store.dto.decoration.DecorationListDTO; import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.DecorationListRequest; import com.cool.store.request.decoration.UpdateTeamRequest; import com.github.pagehelper.PageInfo; @@ -51,6 +53,20 @@ public interface DecorationHandleService { */ Long getDecorationTeamIdByCityId(Long openCityId); + /** + * 处理团队 + * @param teamId + * @return + */ + Boolean handleDecorationTeam(Long decorationAssignId); + + /** + * 列表 + * @param request + * @return + */ + PageInfo listByCondition(DecorationListRequest request); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java index cff97e9ec..c37b2d3f8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java @@ -4,6 +4,7 @@ import com.cool.store.context.LoginUserInfo; import com.cool.store.request.AddSignFranchiseRequest; import com.cool.store.request.AuditApproveRequest; import com.cool.store.request.AuditResultRequest; +import com.cool.store.request.HqtBuildRequest; import com.cool.store.response.AddSignFranchiseResponse; import com.cool.store.response.ResponseResult; @@ -42,4 +43,6 @@ public interface SignFranchiseService { Boolean rePay(Long shopId); Integer dateHandle(); + + HqtBuildRequest getHqtBuildRequest(Long shopId); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java index 8a4a81594..32d31431f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationHandleServiceImpl.java @@ -1,29 +1,43 @@ package com.cool.store.service.impl; import com.cool.store.common.PageBasicInfo; +import com.cool.store.dao.RegionDao; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.ShopStageInfoDAO; import com.cool.store.dao.decoration.DecorationTeamConfigDAO; +import com.cool.store.dao.decoration.ShopDecorationAssignDAO; import com.cool.store.dao.decoration.TeamAreaMappingDAO; +import com.cool.store.dto.decoration.DecorationListDTO; import com.cool.store.dto.decoration.DecorationTeamDTO; import com.cool.store.dto.decoration.TeamAreaMappingDTO; +import com.cool.store.entity.RegionDO; +import com.cool.store.entity.ShopInfoDO; import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; import com.cool.store.entity.decoration.TeamAreaMappingDO; +import com.cool.store.enums.Decoration.DecorationDescStatus; import com.cool.store.enums.Decoration.DecorationUseSystemEnum; import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.JoinModeEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.decoration.AddTeamRequest; +import com.cool.store.request.decoration.DecorationListRequest; import com.cool.store.request.decoration.UpdateTeamRequest; import com.cool.store.service.DecorationHandleService; +import com.cool.store.service.HqtAPIService; +import com.cool.store.service.SignFranchiseService; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.StringUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import springfox.documentation.service.ApiListing; import javax.annotation.Resource; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -32,6 +46,7 @@ import java.util.stream.Collectors; * @Version 1.0 */ @Service +@Slf4j public class DecorationHandleServiceImpl implements DecorationHandleService { @@ -40,7 +55,19 @@ public class DecorationHandleServiceImpl implements DecorationHandleService { @Resource private TeamAreaMappingDAO teamAreaMappingDAO; @Resource + ShopDecorationAssignDAO shopDecorationAssignDAO; + @Resource RedisUtilPool redisUtilPool; + @Resource + private HqtAPIService hqtAPIService; + @Resource + ShopStageInfoDAO shopStageInfoDAO; + @Resource + ShopInfoDAO shopInfoDAO; + @Resource + SignFranchiseService signFranchiseService; + @Resource + RegionDao regionDao; @Override public Boolean addTeam(AddTeamRequest request) { @@ -85,6 +112,11 @@ public class DecorationHandleServiceImpl implements DecorationHandleService { if (teamConfigDO==null){ throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); } + //查询当前团队是否有门店使用 有的话 不能删除 + Integer count = shopDecorationAssignDAO.countByTeamId(teamId); + if (count != null && count > 0){ + throw new ServiceException(ErrorCodeEnum.TEAM_USED); + } teamConfigDO.setDeleted(1); teamAreaMappingDAO.deletedByTeamId(teamId); decorationTeamConfigDAO.updateTeam(teamConfigDO); @@ -120,6 +152,54 @@ public class DecorationHandleServiceImpl implements DecorationHandleService { return teamInfo.getId(); } + @Override + public Boolean handleDecorationTeam(Long decorationAssignId) { + //先查询 + ShopDecorationAssignDO shopDecorationAssign = shopDecorationAssignDAO.getById(decorationAssignId); + if (shopDecorationAssign == null){ + log.info("handleDecorationTeam_error data not exist"); + return Boolean.FALSE; + } + //如果门店是已经分配状态 则不能再次分配 + if (DecorationDescStatus.ASSIGNED.getCode().equals(shopDecorationAssign.getDecorationDescStatus())){ + log.info("handleDecorationTeam id:{},门店已分配",decorationAssignId); + } + //没有分配的门店 开始分配 + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopDecorationAssign.getShopId()); + //查询装修团队 + DecorationTeamConfigDO teamInfo = decorationTeamConfigDAO.getById(shopDecorationAssign.getDecorationTeamId()); + if (teamInfo == null){ + log.info("handleDecorationTeam_error team not exist"); + return Boolean.FALSE; + } + //配置的系统是红圈通 且不是加盟公司自有店 则推送数据 也就是配置了crm或者是加盟公司自有店 走crm流程 + if (teamInfo.getUseSystem().equals(DecorationUseSystemEnum.HQT.getCode())&&!shopInfoDO.getJoinMode().equals(JoinModeEnum.OWN_STORE.getCode())){ + hqtAPIService.pushHqtBuild(signFranchiseService.getHqtBuildRequest(shopInfoDO.getId())); + } + shopDecorationAssign.setDecorationDescStatus(DecorationDescStatus.ASSIGNED.getCode()); + shopDecorationAssignDAO.update(shopDecorationAssign); + //阶段 + shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_861); + return Boolean.TRUE; + } + + @Override + public PageInfo listByCondition(DecorationListRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List decorationListDTOS = shopDecorationAssignDAO.listByCondition(request); + if (CollectionUtils.isEmpty(decorationListDTOS)){ + return new PageInfo<>(); + } + Set regionIds = decorationListDTOS.stream().map(DecorationListDTO::getRegionId).collect(Collectors.toSet()); + List regionList = regionDao.getRegionByRegionIds(new ArrayList<>(regionIds)); + //转为map + Map regionMap = regionList.stream().collect(Collectors.toMap(RegionDO::getRegionId, RegionDO::getName)); + decorationListDTOS.forEach(x->{ + x.setRegionName(regionMap.get(x.getRegionId())); + }); + return new PageInfo<>(decorationListDTOS); + } + public String getNextNumber() { Long current = redisUtilPool.incrby("counter_key", 1); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 96305a297..2b0c3e279 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -5,13 +5,21 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.context.LoginUserInfo; import com.cool.store.dao.*; +import com.cool.store.dao.decoration.DecorationTeamConfigDAO; +import com.cool.store.dao.decoration.ShopDecorationAssignDAO; +import com.cool.store.dao.decoration.TeamAreaMappingDAO; import com.cool.store.dto.PartnerBankInfoDTO; import com.cool.store.entity.*; +import com.cool.store.entity.decoration.DecorationTeamConfigDO; +import com.cool.store.entity.decoration.ShopDecorationAssignDO; +import com.cool.store.entity.decoration.TeamAreaMappingDO; import com.cool.store.enums.*; +import com.cool.store.enums.Decoration.DecorationDescStatus; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.*; +import com.cool.store.mq.producer.SimpleMessageService; import com.cool.store.request.*; import com.cool.store.response.AddSignFranchiseResponse; import com.cool.store.response.ResponseResult; @@ -27,6 +35,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import sun.font.Decoration; import javax.annotation.Resource; import java.math.BigDecimal; @@ -119,6 +128,14 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu OperationLogService operationLogService; @Resource OperationLogDAO operationLogDAO; + @Resource + TeamAreaMappingDAO teamAreaMappingDAO; + @Resource + DecorationTeamConfigDAO decorationTeamConfigDAO; + @Resource + ShopDecorationAssignDAO shopDecorationAssignDAO; + @Resource + private SimpleMessageService simpleMessageService; @Override @@ -390,10 +407,26 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu )); }else{ //,加盟公司自有店->加盟公司建店 不推送数据 再crm中完成 - if ( !shopInfoDO.getJoinMode().equals(JoinModeEnum.OWN_STORE.getCode())){ - hqtAPIService.pushHqtBuild(getHqtBuildRequest(request.getShopId())); + //v2.0.0 先确认装修团队 + TeamAreaMappingDO city = teamAreaMappingDAO.getByCityId(shopInfoDO.getWantShopAreaId()); + //默认团队 + Long teamId = 1L; + if (Objects.nonNull(city)) { + //v2.0.0 确认团队 + DecorationTeamConfigDO decorationTeamConfigDO = decorationTeamConfigDAO.getById(city.getTeamId()); + if (Objects.nonNull(decorationTeamConfigDO)) { + //v2.0.0 确认团队 + teamId = decorationTeamConfigDO.getId(); + } + } - shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_861); + ShopDecorationAssignDO shopDecorationAssignDO = new ShopDecorationAssignDO(); + shopDecorationAssignDO.setDecorationDescStatus(DecorationDescStatus.TO_BE_ASSIGNED.getCode()); + shopDecorationAssignDO.setDecorationTeamId(teamId); + shopDecorationAssignDO.setShopId(shopId); + shopDecorationAssignDAO.insert(shopDecorationAssignDO); + //新增一个延迟队列 四个小时之后确定是否手动分配 没有手动分配 直接自动分配 红圈通推送和下一个流程开始改为分配团队之后 触发 + simpleMessageService.send(String.valueOf(shopDecorationAssignDO.getId()), RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN,System.currentTimeMillis() + 4*60 * 1000); } shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); shopAuditInfoDO.setPassReason(request.getCause()); @@ -449,6 +482,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } } + @Override public HqtBuildRequest getHqtBuildRequest(Long shopId) { ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfo.getLineId()); From ddaa9bd1fe04a1aa12c1919a95bb28dc46a86f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 3 Nov 2025 15:33:41 +0800 Subject: [PATCH 021/109] feat:handleDecorationTeam --- .../decoration/ShopDecorationAssignMapper.xml | 2 ++ .../com/cool/store/dto/ShopSignerInfoDTO.java | 26 ++++++++++++++ .../dto/decoration/DecorationListDTO.java | 5 +++ .../service/DecorationHandleService.java | 10 +++++- .../impl/DecorationHandleServiceImpl.java | 35 +++++++++++++++---- .../webb/DecorationAllocationController.java | 19 +++++++--- 6 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/ShopSignerInfoDTO.java diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml index b7c9e78b3..c27cc4510 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml @@ -20,8 +20,10 @@ - select count(1) from shop_decoration_assign where decoration_team_id = #{teamId} + select count(1) from zxjp_shop_decoration_assign where decoration_team_id = #{teamId} From 59519b46fa72c0fa528543661082b4c51de2326f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 5 Nov 2025 10:10:18 +0800 Subject: [PATCH 025/109] feat:request --- .../store/mapper/decoration/ShopDecorationAssignMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java index 26c7a25f3..d1bac2437 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/decoration/ShopDecorationAssignMapper.java @@ -23,7 +23,7 @@ public interface ShopDecorationAssignMapper extends Mapper listByCondition(@Param("request") DecorationListRequest request); + List listByCondition(DecorationListRequest request); From c9c8d6d0491b95332980a779b652529b1b5cba00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 5 Nov 2025 10:26:56 +0800 Subject: [PATCH 026/109] feat:request --- .../mapper/decoration/ShopDecorationAssignMapper.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml index 597be33d8..ef36ac7e5 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/decoration/ShopDecorationAssignMapper.xml @@ -49,15 +49,6 @@ AND xsi.region_id = #{regionId} - - AND xsi.province = #{province} - - - AND xsi.city = #{city} - - - AND xsi.district = #{district} - AND zsda.decoration_desc_status = #{decorationDescStatus} From 360328eba829f27e37ba1724f5f2917660180198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 10 Nov 2025 13:28:19 +0800 Subject: [PATCH 027/109] feat:getShopId --- .../com/cool/store/service/impl/SignFranchiseServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 1fc2d7341..1eb43e9d3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -224,7 +224,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu //修改签约人信息 signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO); //如果已经签约 修改之后从新推送数据到新管家 - ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getId(), ShopSubStageEnum.SHOP_STAGE_8); + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_8); if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus())){ //如果已经签约 修改之后从新推送数据 ContractCallbackDTO contractCallbackDTO = pushContractRequest(shopInfoDO, request.getShopId()); From 9d00b92cc56497401a51ec8e4ae83084df89a938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 12 Nov 2025 13:29:54 +0800 Subject: [PATCH 028/109] =?UTF-8?q?feat:=E8=80=81=E5=BA=97=E8=BD=AC?= =?UTF-8?q?=E5=8A=A0=E7=9B=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/service/impl/SignFranchiseServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 1eb43e9d3..2ea32f2fa 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -505,8 +505,10 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee()); contractInformationDTO.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - contractInformationDTO.setOldShopCode(signFranchiseDO.getOldShopCode()); - + //老店转加盟(也叫直营转加盟) + if (SignTypeEnum.DIRECT_SALES_TO_JOINING.getCode().equals(signFranchiseDO.getSignType())){ + contractInformationDTO.setOldShopCode(signFranchiseDO.getOldShopCode()); + } FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand()); if (enumByCode != null){ contractInformationDTO.setPayeeName(enumByCode.getPayeeName()); From c99c4375d7c1570bebf4e2ec17ba66bd3c98da57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 12 Nov 2025 16:27:52 +0800 Subject: [PATCH 029/109] =?UTF-8?q?feat:=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/utils/OpenSignatureUtil.java | 87 ++++++++++++++- .../store/utils/VerifySignatureUtils.java | 104 ++++++++++++++++++ 2 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java index 2fd0cabd1..a6e6db642 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java @@ -5,9 +5,10 @@ import lombok.extern.slf4j.Slf4j; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import java.security.*; +import java.security.spec.PKCS8EncodedKeySpec; import java.util.*; import java.util.stream.Collectors; @@ -110,4 +111,86 @@ public class OpenSignatureUtil { } return result.toString(); } + + /** + * 构造签名串 + * @param params 参数Map + * @return 构造好的签名串 + */ + public static String buildSignString(Map params) { + return params.entrySet().stream() + // 过滤空值字段 + .filter(entry -> entry.getValue() != null && !entry.getValue().trim().isEmpty()) + // 按参数名 ASCII 码升序排序 + .sorted(Map.Entry.comparingByKey()) + // 格式化为 key=value,值进行URL编码 + .map(entry -> { + try { + String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()); + return entry.getKey() + "=" + encodedValue; + } catch (Exception e) { + throw new RuntimeException("URL编码失败", e); + } + }) + // 用 & 连接 + .collect(Collectors.joining("&")); + } + + /** + * 使用私钥对签名串进行 RSA-SHA256 签名 + * @param signString 待签名的字符串 + * @param privateKeyStr Base64编码的私钥 + * @return Base64编码的签名 + */ + public static String signWithRsaSha256(String signString, String privateKeyStr) { + try { + // 1. 解码Base64私钥 + byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr); + + // 2. 创建PKCS8编码密钥规范 + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); + + // 3. 获取RSA KeyFactory + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + + // 4. 生成私钥对象 + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + + // 5. 创建Signature实例,使用SHA256withRSA算法 + Signature signature = Signature.getInstance("SHA256withRSA"); + signature.initSign(privateKey); + + // 6. 更新要签名的数据 + signature.update(signString.getBytes(StandardCharsets.UTF_8)); + + // 7. 执行签名 + byte[] digitalSignature = signature.sign(); + + // 8. 对签名结果进行Base64编码 + return Base64.getEncoder().encodeToString(digitalSignature); + + } catch (Exception e) { + throw new RuntimeException("RSA-SHA256签名失败", e); + } + } + + /** + * 完整的签名生成方法 + * @param params 参数Map + * @param privateKeyStr 私钥字符串 + * @return 签名结果 + */ + public static String generateSignature(Map params, String privateKeyStr) { + // 1. 构造签名串 + String signString = buildSignString(params); + log.info("待签名串: {}", signString); + + // 2. 使用私钥进行RSA-SHA256签名 + String signature = signWithRsaSha256(signString, privateKeyStr); + log.info("生成签名: {}", signature); + + return signature; + } + + } \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java new file mode 100644 index 000000000..615968bff --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java @@ -0,0 +1,104 @@ +package com.cool.store.utils; + +import lombok.extern.slf4j.Slf4j; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.spec.X509EncodedKeySpec; +import java.util.*; +import java.util.stream.Collectors; +import java.net.URLEncoder; +import java.util.Base64; + +/** + *RSA-SHA256 验签工具类 + * @Author suzhuhong + * @Date 2025/11/12 15:15 + * @Version 1.0 + */ +@Slf4j +public class VerifySignatureUtils { + + /** + * 验证签名 + * @param params 参数Map(包含sign字段) + * @param publicKeyStr Base64编码的公钥 + * @return 验签结果 + */ + public static boolean verifySignature(Map params, String publicKeyStr) { + try { + // 1. 从参数中提取签名(并移除,不参与签名串构造) + String receivedSignature = params.get("sign"); + if (receivedSignature == null || receivedSignature.trim().isEmpty()) { + throw new IllegalArgumentException("签名参数sign不能为空"); + } + + // 2. 创建参数的副本,移除sign字段 + Map paramsForSign = new HashMap<>(params); + paramsForSign.remove("sign"); + + // 3. 构造签名串(与签名方相同的规则) + String signString = buildSignString(paramsForSign); + log.info("验签待签名串: {}", signString); + + // 4. 验证签名 + return verifyRsaSha256(signString, receivedSignature, publicKeyStr); + + } catch (Exception e) { + log.error("验签过程异常: ", e.getMessage()); + return false; + } + } + + /** + * 构造签名串(与签名方相同的逻辑) + */ + private static String buildSignString(Map params) { + return params.entrySet().stream() + .filter(entry -> entry.getValue() != null && !entry.getValue().trim().isEmpty()) + .sorted(Map.Entry.comparingByKey()) + .map(entry -> { + try { + String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()); + return entry.getKey() + "=" + encodedValue; + } catch (Exception e) { + throw new RuntimeException("URL编码失败", e); + } + }) + .collect(Collectors.joining("&")); + } + + /** + * RSA-SHA256 验签 + */ + private static boolean verifyRsaSha256(String data, String signature, String publicKeyStr) { + try { + // 1. 解码Base64公钥 + byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr); + + // 2. 创建X509编码密钥规范 + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); + + // 3. 获取RSA KeyFactory + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + + // 4. 生成公钥对象 + PublicKey publicKey = keyFactory.generatePublic(keySpec); + + // 5. 创建Signature实例 + Signature sig = Signature.getInstance("SHA256withRSA"); + sig.initVerify(publicKey); + + // 6. 更新要验证的数据 + sig.update(data.getBytes(StandardCharsets.UTF_8)); + + // 7. 解码收到的签名 + byte[] signatureBytes = Base64.getDecoder().decode(signature); + + // 8. 执行验证 + return sig.verify(signatureBytes); + + } catch (Exception e) { + throw new RuntimeException("RSA-SHA256验签失败", e); + } + } +} \ No newline at end of file From e6e57d6304ff3886029fb2c30813b774613f7639 Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 12 Nov 2025 18:39:52 +0800 Subject: [PATCH 030/109] =?UTF-8?q?fix:=E6=96=B0=E5=BB=BAshop=E9=97=A8?= =?UTF-8?q?=E5=BA=97=E6=96=B0=E5=A2=9EstoreId=EF=BC=8C=E5=BB=BA=E5=BA=97?= =?UTF-8?q?=E6=90=BA=E5=B8=A6storeId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/cool/store/dao/ShopInfoDAO.java | 3 +++ .../src/main/resources/mapper/ShopInfoMapper.xml | 7 ++++--- .../src/main/java/com/cool/store/entity/ShopInfoDO.java | 3 +++ .../main/java/com/cool/store/request/StoreMasterDTO.java | 2 ++ .../com/cool/store/service/impl/SyncMainSysServerImpl.java | 1 + 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java index 439afb1ee..37d13e74f 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -17,6 +17,7 @@ import com.cool.store.mapper.ShopInfoMapper; import com.cool.store.request.*; import com.cool.store.response.MiniShopsResponse; import com.cool.store.response.PlatformBuildListResponse; +import com.cool.store.utils.UUIDUtils; import com.cool.store.vo.shop.StageShopCountVO; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; @@ -54,6 +55,7 @@ public class ShopInfoDAO { if(CollectionUtils.isEmpty(shopInfoList)){ return CommonConstants.ZERO; } + shopInfoList.forEach(v -> v.setStoreId(UUIDUtils.get32UUID())); return shopInfoMapper.batchAddShop(shopInfoList); } @@ -96,6 +98,7 @@ public class ShopInfoDAO { */ public Long addShopInfo(ShopInfoDO shopInfo){ shopInfoMapper.insertSelective(shopInfo); + shopInfo.setStoreId(UUIDUtils.get32UUID()); return shopInfo.getId(); } diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 20bb1dbd7..783288301 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -38,6 +38,7 @@ + @@ -46,17 +47,17 @@ shop_code, store_num, shop_manager_user_id, supervisor_user_id, plan_open_time, cur_progress, shop_type, shop_stage, deleted, create_time, update_time, join_mode,detail_address,franchise_brand,development_manager,want_shop_area_id,investment_manager,shop_status,create_user_id,update_user_id,store_type - , province,province_code,city,city_code,district,district_code,manager_region_id,shop_decoration_attributes,hqt_shop_id + , province,province_code,city,city_code,district,district_code,manager_region_id,shop_decoration_attributes,hqt_shop_id,store_id insert into xfsg_shop_info(region_id, line_id, partner_id, shop_name, store_num,supervisor_user_id,create_time,join_mode,franchise_brand, - development_manager,want_shop_area_id,investment_manager) values + development_manager,want_shop_area_id,investment_manager,store_id) values (#{shop.regionId}, #{shop.lineId}, #{shop.partnerId}, #{shop.shopName}, #{shop.storeNum},#{shop.supervisorUserId},#{shop.createTime},#{shop.joinMode},#{shop.franchiseBrand},#{shop.developmentManager}, - #{shop.wantShopAreaId},#{shop.investmentManager}) + #{shop.wantShopAreaId},#{shop.investmentManager},#{shop.storeId}) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java index 54b6a0f0f..4c11a5798 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java @@ -158,4 +158,7 @@ public class ShopInfoDO { //红圈通门店id @Column(name = "hqt_shop_id") private String hqtShopId; + // 门店id + @Column(name = "store_id") + private String storeId; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java index 642bc5d6d..7f1e8cc20 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/StoreMasterDTO.java @@ -16,6 +16,8 @@ import java.util.Date; public class StoreMasterDTO { private String enterpriseId; + @ApiModelProperty("门店id") + private String storeId; @ApiModelProperty("门店名称(加盟签约)") private String storeName; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java index e90791f27..e2a14ef65 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java @@ -103,6 +103,7 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { return; } storeMasterDTO.setEnterpriseId(eid); + storeMasterDTO.setStoreId(shopInfo.getStoreId()); storeMasterDTO.setStoreStatus("not_open"); storeMasterDTO.setStoreName(shopInfo.getShopName()); storeMasterDTO.setStoreNum(shopInfo.getShopCode()); From 9f042b9dbd96c7a8aaf94a00aca8dd4aa777cf09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 13 Nov 2025 18:44:19 +0800 Subject: [PATCH 031/109] =?UTF-8?q?feat:=E9=92=B1=E5=8C=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coolstore-partner-common/pom.xml | 4 + .../com/cool/store/utils/KeyFormatUtil.java | 82 +++++ .../cool/store/utils/OpenSignatureUtil.java | 81 ----- .../com/cool/store/utils/RsaSignUtil.java | 309 ++++++++++++++++++ .../store/utils/VerifySignatureUtils.java | 104 ------ .../dto/wallet/AccountAuthenticationDTO.java | 15 + .../cool/store/dto/wallet/AccountInfoDTO.java | 64 ++++ .../cool/store/dto/wallet/AccountNoDTO.java | 15 + .../store/dto/wallet/AccountVerifyDTO.java | 17 + .../com/cool/store/dto/wallet/AddTagDTO.java | 17 + .../com/cool/store/dto/wallet/BankDTO.java | 25 ++ .../cool/store/dto/wallet/BankListDTO.java | 20 ++ .../store/dto/wallet/LargePaymentDTO.java | 53 +++ .../com/cool/store/dto/wallet/PaymentDTO.java | 74 +++++ .../store/dto/wallet/PaymentDetailDTO.java | 32 ++ .../store/dto/wallet/StoreAccountDTO.java | 19 ++ .../request/wallet/AccountAddTagRequest.java | 51 +++ .../request/wallet/AccountVerifyRequest.java | 17 + .../wallet/CreateStoreAndAccountRequest.java | 43 +++ .../request/wallet/CreateStoreRequest.java | 60 ++++ .../store/request/wallet/GetBankRequest.java | 21 ++ .../wallet/LargePaymentDetailRequest.java | 17 + .../request/wallet/LargePaymentRequest.java | 26 ++ .../request/wallet/OutStoreIdRequest.java | 15 + .../request/wallet/PaymentDetailRequest.java | 15 + .../wallet/UpdateStoreAccountRequest.java | 29 ++ .../request/wallet/WalletBasicPageInfo.java | 40 +++ .../cool/store/http/WalletHttpClientRest.java | 231 +++++++++++++ .../service/wallet/WalletApiService.java | 116 +++++++ .../controller/webb/PCTestController.java | 170 +++++++++- .../main/resources/application-ab.properties | 5 + .../resources/application-local.properties | 6 +- .../resources/application-test.properties | 5 + pom.xml | 5 + 34 files changed, 1606 insertions(+), 197 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java delete mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java diff --git a/coolstore-partner-common/pom.xml b/coolstore-partner-common/pom.xml index a6081765b..c499b9524 100644 --- a/coolstore-partner-common/pom.xml +++ b/coolstore-partner-common/pom.xml @@ -103,6 +103,10 @@ openpdf 1.3.30 + + org.bouncycastle + bcprov-jdk15on + org.icepdf.os diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java new file mode 100644 index 000000000..c0a1e190b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/KeyFormatUtil.java @@ -0,0 +1,82 @@ +package com.cool.store.utils; + +/** + * @Author suzhuhong + * @Date 2025/11/13 12:15 + * @Version 1.0 + */ +public class KeyFormatUtil { + + /** + * 将单行密钥转换为标准PEM多行格式 + */ + public static String convertToPEMFormat(String singleLineKey, String keyType) { + if (singleLineKey == null || singleLineKey.trim().isEmpty()) { + throw new IllegalArgumentException("密钥不能为空"); + } + + // 清理密钥,移除可能存在的头尾标记和空白 + String cleanedKey = cleanKey(singleLineKey); + + // 定义头尾标记 + String header = getKeyHeader(keyType); + String footer = getKeyFooter(keyType); + + // 构建多行格式 + StringBuilder pemKey = new StringBuilder(); + pemKey.append(header).append("\n"); + + // 每64个字符换行 + for (int i = 0; i < cleanedKey.length(); i += 64) { + int end = Math.min(i + 64, cleanedKey.length()); + pemKey.append(cleanedKey.substring(i, end)).append("\n"); + } + + pemKey.append(footer); + return pemKey.toString(); + } + + /** + * 清理密钥字符串 + */ + public static String cleanKey(String key) { + return key.replaceAll("-----BEGIN.*-----", "") + .replaceAll("-----END.*-----", "") + .replaceAll("\\s", "") // 移除所有空白字符 + .trim(); + } + + private static String getKeyHeader(String keyType) { + switch (keyType.toUpperCase()) { + case "PRIVATE": + case "PRIVATE_KEY": + return "-----BEGIN PRIVATE KEY-----"; + case "PUBLIC": + case "PUBLIC_KEY": + return "-----BEGIN PUBLIC KEY-----"; + case "RSA_PRIVATE": + return "-----BEGIN RSA PRIVATE KEY-----"; + case "RSA_PUBLIC": + return "-----BEGIN RSA PUBLIC KEY-----"; + default: + throw new IllegalArgumentException("不支持的密钥类型: " + keyType); + } + } + + private static String getKeyFooter(String keyType) { + switch (keyType.toUpperCase()) { + case "PRIVATE": + case "PRIVATE_KEY": + return "-----END PRIVATE KEY-----"; + case "PUBLIC": + case "PUBLIC_KEY": + return "-----END PUBLIC KEY-----"; + case "RSA_PRIVATE": + return "-----END RSA PRIVATE KEY-----"; + case "RSA_PUBLIC": + return "-----END RSA PUBLIC KEY-----"; + default: + throw new IllegalArgumentException("不支持的密钥类型: " + keyType); + } + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java index a6e6db642..730bebac0 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/OpenSignatureUtil.java @@ -112,85 +112,4 @@ public class OpenSignatureUtil { return result.toString(); } - /** - * 构造签名串 - * @param params 参数Map - * @return 构造好的签名串 - */ - public static String buildSignString(Map params) { - return params.entrySet().stream() - // 过滤空值字段 - .filter(entry -> entry.getValue() != null && !entry.getValue().trim().isEmpty()) - // 按参数名 ASCII 码升序排序 - .sorted(Map.Entry.comparingByKey()) - // 格式化为 key=value,值进行URL编码 - .map(entry -> { - try { - String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()); - return entry.getKey() + "=" + encodedValue; - } catch (Exception e) { - throw new RuntimeException("URL编码失败", e); - } - }) - // 用 & 连接 - .collect(Collectors.joining("&")); - } - - /** - * 使用私钥对签名串进行 RSA-SHA256 签名 - * @param signString 待签名的字符串 - * @param privateKeyStr Base64编码的私钥 - * @return Base64编码的签名 - */ - public static String signWithRsaSha256(String signString, String privateKeyStr) { - try { - // 1. 解码Base64私钥 - byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr); - - // 2. 创建PKCS8编码密钥规范 - PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); - - // 3. 获取RSA KeyFactory - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - - // 4. 生成私钥对象 - PrivateKey privateKey = keyFactory.generatePrivate(keySpec); - - // 5. 创建Signature实例,使用SHA256withRSA算法 - Signature signature = Signature.getInstance("SHA256withRSA"); - signature.initSign(privateKey); - - // 6. 更新要签名的数据 - signature.update(signString.getBytes(StandardCharsets.UTF_8)); - - // 7. 执行签名 - byte[] digitalSignature = signature.sign(); - - // 8. 对签名结果进行Base64编码 - return Base64.getEncoder().encodeToString(digitalSignature); - - } catch (Exception e) { - throw new RuntimeException("RSA-SHA256签名失败", e); - } - } - - /** - * 完整的签名生成方法 - * @param params 参数Map - * @param privateKeyStr 私钥字符串 - * @return 签名结果 - */ - public static String generateSignature(Map params, String privateKeyStr) { - // 1. 构造签名串 - String signString = buildSignString(params); - log.info("待签名串: {}", signString); - - // 2. 使用私钥进行RSA-SHA256签名 - String signature = signWithRsaSha256(signString, privateKeyStr); - log.info("生成签名: {}", signature); - - return signature; - } - - } \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java new file mode 100644 index 000000000..49c44b360 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java @@ -0,0 +1,309 @@ +package com.cool.store.utils; + +import com.sun.deploy.net.URLEncoder; +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.asn1.pkcs.RSAPrivateKey; +import sun.security.util.DerInputStream; +import sun.security.util.DerValue; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.*; +import java.util.*; +/** + * RSA签名工具类 + * @Author suzhuhong + * @Date 2025/11/12 22:57 + * @Version 1.0 + */ +@Slf4j +public class RsaSignUtil { + + + /** + * 加签方法 + */ + public static String generateSign(Map params, String privateKeyPEM) { + // 移除可能存在的sign字段 + params.remove("sign"); + String afterSort = objectToSortedString(params); + log.info("排序后的参数:{}", afterSort); + String formattedPrivateKey = KeyFormatUtil.convertToPEMFormat(privateKeyPEM, "RSA_PRIVATE"); + return rsaPrivateKeySign(afterSort, privateKeyPEM, "SHA256withRSA"); + } + + /** + * 验签方法 + */ + public static boolean verifySign(Map params, String publicKeyPEM) { + String sign = String.valueOf(params.get("sign")); + params.remove("sign"); + String afterSort = objectToSortedString(params); + return rsaPublicKeyVerify(afterSort, sign, publicKeyPEM, "SHA256withRSA"); + } + + /** + * 查询签名验证 - 主入口方法 + */ + public static boolean querySignCrm(String publicKey, Map params) { + return verifySign(params, publicKey); + } + + /** + * 将对象转换为排序后的字符串 + */ + public static String objectToSortedString(Map obj) { + return convertToSortedString(obj, ""); + } + + /** + * 递归将参数转换为排序字符串 + */ + private static String convertToSortedString(Map params, String prefix) { + // 按键排序 + List keys = new ArrayList<>(params.keySet()); + Collections.sort(keys); + + List parts = new ArrayList<>(); + + for (String key : keys) { + Object value = params.get(key); + if (value == null || "".equals(value) || + (value instanceof Number && ((Number) value).doubleValue() == 0)) { + continue; + } + + String currentKey = key; + if (!prefix.isEmpty()) { + currentKey = prefix + "[" + key + "]"; + } + + if (value instanceof Map) { + @SuppressWarnings("unchecked") + Map nestedMap = (Map) value; + String nestedString = convertToSortedString(nestedMap, currentKey); + if (!nestedString.isEmpty()) { + parts.add(nestedString); + } + } else if (value instanceof List) { + List list = (List) value; + List elemStrs = new ArrayList<>(); + + for (Object element : list) { + String elementStr; + if (element instanceof Map) { + @SuppressWarnings("unchecked") + Map elementMap = (Map) element; + String inner = convertToSortedString(elementMap, ""); + elementStr = "{" + inner + "}"; + } else if (element instanceof Double) { + elementStr = String.format("%.0f", (Double) element); + } else if (element instanceof Float) { + elementStr = String.format("%.0f", (Float) element); + } else { + elementStr = String.valueOf(element); + } + elemStrs.add(elementStr); + } + + // 对元素字符串排序 + Collections.sort(elemStrs); + + // URL编码并添加到parts + for (String es : elemStrs) { + String encodedValue = urlEncode(es); + parts.add(currentKey + "[]=" + encodedValue); + } + } else if (value instanceof Double) { + String strValue = String.format("%.0f", (Double) value); + parts.add(currentKey + "=" + urlEncode(strValue)); + } else if (value instanceof Float) { + String strValue = String.format("%.0f", (Float) value); + parts.add(currentKey + "=" + urlEncode(strValue)); + } else { + String strValue = String.valueOf(value); + parts.add(currentKey + "=" + urlEncode(strValue)); + } + } + + return String.join("&", parts); + } + + /** + * URL编码(替换+为%20) + */ + private static String urlEncode(String value) { + try { + return URLEncoder.encode(value, StandardCharsets.UTF_8.name()) + .replace("+", "%20"); + } catch (Exception e) { + return value; + } + } + + /** + * RSA私钥加签 + */ + public static String rsaPrivateKeySign(String text, String privateKeyPEM, String algorithm) { + try { + // 1. 解析私钥 + log.debug("Received private key PEM: {}", privateKeyPEM); + PrivateKey privateKey = parsePrivateKey(privateKeyPEM); + if (privateKey == null) { + throw new RuntimeException("解析私钥失败"); + } + + // 2. 创建签名实例 + Signature signature = Signature.getInstance(algorithm); + signature.initSign(privateKey); + signature.update(text.getBytes(StandardCharsets.UTF_8)); + + // 3. 生成签名并Base64编码 + byte[] digitalSignature = signature.sign(); + return Base64.getEncoder().encodeToString(digitalSignature); + + } catch (Exception e) { + throw new RuntimeException("加签失败: " + e.getMessage(), e); + } + } + + /** + * RSA公钥验签 + */ + public static boolean rsaPublicKeyVerify(String text, String signBase64, + String publicKeyPEM, String algorithm) { + try { + // 1. 解码Base64签名 + byte[] signature = Base64.getDecoder().decode(signBase64); + + // 2. 解析公钥 + PublicKey publicKey = parsePublicKey(publicKeyPEM); + if (publicKey == null) { + return false; + } + + // 3. 验证签名 + Signature sig = Signature.getInstance(algorithm); + sig.initVerify(publicKey); + sig.update(text.getBytes(StandardCharsets.UTF_8)); + + return sig.verify(signature); + } catch (Exception e) { + return false; + } + } + + /** + * 解析PEM格式私钥(兼容PKCS#1和PKCS#8格式) + */ + private static PrivateKey parsePrivateKey(String privateKeyPEM) { + try { + String pemContent = privateKeyPEM + .replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replace("-----BEGIN RSA PRIVATE KEY-----", "") + .replace("-----END RSA PRIVATE KEY-----", "") + .replaceAll("\\s", ""); + + byte[] keyBytes = Base64.getDecoder().decode(pemContent); + + // 尝试PKCS#8格式 + try { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePrivate(keySpec); + } catch (Exception e) { + // 使用Bouncy Castle处理PKCS#1 + RSAPrivateKey rsaPrivKey = RSAPrivateKey.getInstance(keyBytes); + return KeyFactory.getInstance("RSA").generatePrivate( + new RSAPrivateKeySpec(rsaPrivKey.getModulus(), rsaPrivKey.getPrivateExponent())); + } + } catch (Exception e) { + throw new RuntimeException("解析私钥失败: " + e.getMessage(), e); + } + } + + /** + * 解析PKCS#1格式私钥 + */ + private static PrivateKey parsePKCS1PrivateKey(byte[] keyBytes) { + try { + int length = keyBytes.length; + byte[] pkcs8Header = new byte[] { + 0x30, (byte) 0x82, + (byte) ((length + 26) >> 8), (byte) (length + 26), // 总长度 + 0x02, 0x01, 0x00, + 0x30, 0x0D, 0x06, 0x09, 0x2A, (byte) 0x86, 0x48, (byte) 0x86, (byte) 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, + 0x04, (byte) 0x82, + (byte) (length >> 8), (byte) length // BIT STRING 长度 + }; + + byte[] pkcs8Key = new byte[pkcs8Header.length + keyBytes.length]; + System.arraycopy(pkcs8Header, 0, pkcs8Key, 0, pkcs8Header.length); + System.arraycopy(keyBytes, 0, pkcs8Key, pkcs8Header.length, keyBytes.length); + + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8Key); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePrivate(keySpec); + } catch (Exception e) { + throw new RuntimeException("解析PKCS#1私钥失败: " + e.getMessage(), e); + } + } + + /** + * 解析PEM格式公钥(兼容PKCS#1和PKCS#8格式) + */ + private static PublicKey parsePublicKey(String publicKeyPEM) { + try { + // 移除PEM头尾标记和空白字符 + String pemContent = publicKeyPEM + .replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replace("-----BEGIN RSA PUBLIC KEY-----", "") + .replace("-----END RSA PUBLIC KEY-----", "") + .replaceAll("\\s", ""); + + byte[] keyBytes = Base64.getDecoder().decode(pemContent); + + // 先尝试PKCS#8格式 + try { + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } catch (Exception e) { + // 如果PKCS#8失败,尝试PKCS#1格式 + return parsePKCS1PublicKey(keyBytes); + } + } catch (Exception e) { + return null; + } + } + + /** + * 解析PKCS#1格式公钥 + */ + private static PublicKey parsePKCS1PublicKey(byte[] keyBytes) { + try { + // PKCS#1 RSA公钥转换为PKCS#8格式 + byte[] pkcs8Prefix = new byte[] { + 0x30, (byte) 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, (byte) 0x86, + 0x48, (byte) 0x86, (byte) 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, + (byte) 0x82, 0x01, 0x0f, 0x00 + }; + + byte[] pkcs8Key = new byte[pkcs8Prefix.length + keyBytes.length]; + System.arraycopy(pkcs8Prefix, 0, pkcs8Key, 0, pkcs8Prefix.length); + System.arraycopy(keyBytes, 0, pkcs8Key, pkcs8Prefix.length, keyBytes.length); + + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(pkcs8Key); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } catch (Exception e) { + return null; + } + } +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java deleted file mode 100644 index 615968bff..000000000 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/VerifySignatureUtils.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.cool.store.utils; - -import lombok.extern.slf4j.Slf4j; -import java.nio.charset.StandardCharsets; -import java.security.*; -import java.security.spec.X509EncodedKeySpec; -import java.util.*; -import java.util.stream.Collectors; -import java.net.URLEncoder; -import java.util.Base64; - -/** - *RSA-SHA256 验签工具类 - * @Author suzhuhong - * @Date 2025/11/12 15:15 - * @Version 1.0 - */ -@Slf4j -public class VerifySignatureUtils { - - /** - * 验证签名 - * @param params 参数Map(包含sign字段) - * @param publicKeyStr Base64编码的公钥 - * @return 验签结果 - */ - public static boolean verifySignature(Map params, String publicKeyStr) { - try { - // 1. 从参数中提取签名(并移除,不参与签名串构造) - String receivedSignature = params.get("sign"); - if (receivedSignature == null || receivedSignature.trim().isEmpty()) { - throw new IllegalArgumentException("签名参数sign不能为空"); - } - - // 2. 创建参数的副本,移除sign字段 - Map paramsForSign = new HashMap<>(params); - paramsForSign.remove("sign"); - - // 3. 构造签名串(与签名方相同的规则) - String signString = buildSignString(paramsForSign); - log.info("验签待签名串: {}", signString); - - // 4. 验证签名 - return verifyRsaSha256(signString, receivedSignature, publicKeyStr); - - } catch (Exception e) { - log.error("验签过程异常: ", e.getMessage()); - return false; - } - } - - /** - * 构造签名串(与签名方相同的逻辑) - */ - private static String buildSignString(Map params) { - return params.entrySet().stream() - .filter(entry -> entry.getValue() != null && !entry.getValue().trim().isEmpty()) - .sorted(Map.Entry.comparingByKey()) - .map(entry -> { - try { - String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()); - return entry.getKey() + "=" + encodedValue; - } catch (Exception e) { - throw new RuntimeException("URL编码失败", e); - } - }) - .collect(Collectors.joining("&")); - } - - /** - * RSA-SHA256 验签 - */ - private static boolean verifyRsaSha256(String data, String signature, String publicKeyStr) { - try { - // 1. 解码Base64公钥 - byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr); - - // 2. 创建X509编码密钥规范 - X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); - - // 3. 获取RSA KeyFactory - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - - // 4. 生成公钥对象 - PublicKey publicKey = keyFactory.generatePublic(keySpec); - - // 5. 创建Signature实例 - Signature sig = Signature.getInstance("SHA256withRSA"); - sig.initVerify(publicKey); - - // 6. 更新要验证的数据 - sig.update(data.getBytes(StandardCharsets.UTF_8)); - - // 7. 解码收到的签名 - byte[] signatureBytes = Base64.getDecoder().decode(signature); - - // 8. 执行验证 - return sig.verify(signatureBytes); - - } catch (Exception e) { - throw new RuntimeException("RSA-SHA256验签失败", e); - } - } -} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java new file mode 100644 index 000000000..e5de9cf48 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java @@ -0,0 +1,15 @@ +package com.cool.store.dto.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:06 + * @Version 1.0 + */ +@Data +public class AccountAuthenticationDTO { + + private Integer accountStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java new file mode 100644 index 000000000..323cd9ae9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -0,0 +1,64 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 门店签约人账户 + * @Author suzhuhong + * @Date 2025/11/13 16:54 + * @Version 1.0 + */ +@Data +public class AccountInfoDTO { + + @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) + private String accountType; + + @ApiModelProperty(value = "营业执照号码") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称") + private String licenseName; + + @ApiModelProperty(value = "法人姓名") + private String legalName; + + @ApiModelProperty(value = "法人证件号码") + private String legalNo; + + @ApiModelProperty(value = "法人联系电话") + private String legalPhone; + + @ApiModelProperty(value = "门店编号", required = true) + private String storeSn; + + @ApiModelProperty(value = "账户编号", required = true) + private String accountNo; + + @ApiModelProperty(value = "账户名称", required = true) + private String accountName; + + @ApiModelProperty(value = "账户别名", required = true) + private String accountAliasName; + + @ApiModelProperty(value = "结算银行卡号", required = true) + private String accountCardNo; + + @ApiModelProperty(value = "结算卡银行预留手机号", required = true) + private String accountPhone; + + @ApiModelProperty(value = "开户支行名称", required = true) + private String bankName; + + @ApiModelProperty(value = "支行编号", required = true) + private String bankNo; + + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通", required = true) + private Integer accountStatus; + + @ApiModelProperty(value = "账户余额", required = true) + private String totalAmount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java new file mode 100644 index 000000000..c78f890d7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java @@ -0,0 +1,15 @@ +package com.cool.store.dto.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:58 + * @Version 1.0 + */ +@Data +public class AccountNoDTO { + + private String accountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java new file mode 100644 index 000000000..d8a8c78aa --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:09 + * @Version 1.0 + */ +@Data +public class AccountVerifyDTO { + + private String outStoreId; + + private Integer accountStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java new file mode 100644 index 000000000..0408d50d8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:59 + * @Version 1.0 + */ +@Data +public class AddTagDTO { + + private Integer status; + + private Integer addTagType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java new file mode 100644 index 000000000..9375c398f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:54 + * @Version 1.0 + */ +@Data +public class BankDTO { + + @ApiModelProperty("银行编号") + private String headCode; + @ApiModelProperty("银行名称") + private String headName; + @ApiModelProperty("支行号") + private String branchCode; + @ApiModelProperty("支行名称") + private String branchName; + @ApiModelProperty("支行地址") + private String branchAddress; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java new file mode 100644 index 000000000..a7441adf3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:36 + * @Version 1.0 + */ +@Data +public class BankListDTO { + + WalletBasicPageInfo page; + + List pageData; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java new file mode 100644 index 000000000..f95e440cf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java @@ -0,0 +1,53 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:15 + * @Version 1.0 + */ +@Data +public class LargePaymentDTO { + + @ApiModelProperty(value = "外部门店唯一标识", required = true) + private String outStoreId; + + @ApiModelProperty(value = "请求预支付Id", required = true) + private String paymentId; + + @ApiModelProperty(value = "收款码唯一流水号", required = true) + private String transOrderTrace; + + @ApiModelProperty(value = "付款人账户编号", required = true) + private String payerAcctNo; + + @ApiModelProperty(value = "付款人户名", required = true) + private String payerAcctName; + + @ApiModelProperty(value = "付款银行名称") + private String payerBankName; + + @ApiModelProperty(value = "付款银行行号") + private String payerBankNo; + + @ApiModelProperty(value = "充值金额", required = true) + private String amt; + + @ApiModelProperty(value = "收款账号", required = true) + private String payeeAccNo; + + @ApiModelProperty(value = "收款账户名称", required = true) + private String payeeAccName; + + @ApiModelProperty(value = "收款银行名称", required = true) + private String payeeBankName; + + @ApiModelProperty(value = "收款银行行号", required = true) + private String payeeBankNo; + + @ApiModelProperty(value = "账号过期时间") + private String expireTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java new file mode 100644 index 000000000..aac3aa8bd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java @@ -0,0 +1,74 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/13 18:23 + * @Version 1.0 + */ +@Data +public class PaymentDTO { + + @ApiModelProperty(name = "外部门店唯一标识", required = true) + private String outStoreId; + + @ApiModelProperty(name = "请求预支付Id", required = true) + private String paymentId; + + @ApiModelProperty(name = "收款码唯一流水号", required = true) + private String transOrderTrace; + + @ApiModelProperty(name = "金额", required = true) + private String totalFee; + + @ApiModelProperty(name = "状态:1-成功 2-失败 3-支付中 4-撤销", required = true) + private Integer orderStatus; + + @ApiModelProperty(name = "利楚订单号(商户订单号)") + private String outTradeNo; + + @ApiModelProperty(name = "通道订单号(银行订单号)") + private String channelOrderNo; + + @ApiModelProperty(name = "付款人账号") + private String payerAccNo; + + @ApiModelProperty(name = "付款人户名") + private String payerAccName; + + @ApiModelProperty(name = "付款人银行名称") + private String payerBankName; + + @ApiModelProperty(name = "付款银行行号") + private String payerBankNo; + + @ApiModelProperty(name = "收款账号", required = true) + private String payeeAccNo; + + @ApiModelProperty(name = "收款账户名称", required = true) + private String payeeAccName; + + @ApiModelProperty(name = "收款银行名称", required = true) + private String payeeBankName; + + @ApiModelProperty(name = "收款银行行号", required = true) + private String payeeBankNo; + + @ApiModelProperty(name = "账号过期时间") + private String expireTime; + + @ApiModelProperty(name = "创建时间") + private String createTime; + + @ApiModelProperty(name = "付款明细") + private List payList; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java new file mode 100644 index 000000000..c20e7492a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java @@ -0,0 +1,32 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:38 + * @Version 1.0 + */ +@Data +public class PaymentDetailDTO { + + @ApiModelProperty(value = "打款金额", required = true) + private String tranAmt; + + @ApiModelProperty(value = "付款人账号", required = true) + private String payerAccountName; + + @ApiModelProperty(value = "付款时间", required = true) + private String paySuccessTime; + + @ApiModelProperty(value = "付款银行账号", required = true) + private String payerAccountBankNo; + + @ApiModelProperty(value = "银行受理时间", required = true) + private String tranSeqNo; + + @ApiModelProperty(value = "付款账号", required = true) + private String payerAccountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java new file mode 100644 index 000000000..d3f88e374 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:54 + * @Version 1.0 + */ +@Data +public class StoreAccountDTO { + + /** + * 营帐通的账户ID + */ + private String accountId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java new file mode 100644 index 000000000..0e5db1110 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java @@ -0,0 +1,51 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:09 + * @Version 1.0 + */ +@Data +@ApiModel(description = "营业执照信息请求参数") +public class AccountAddTagRequest { + + @ApiModelProperty(value = "外部门店唯一标识", required = true) + @NotBlank(message = "外部门店唯一标识不能为空") + private String outStoreId; + + @ApiModelProperty(value = "营业执照号码", required = true) + @NotBlank(message = "营业执照号码不能为空") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称", required = true) + @NotBlank(message = "工商注册名称不能为空") + private String licenseName; + + @ApiModelProperty(value = "营业执照到期日(格式YYYY-MM-DD),如果证件到期日期为“长期”,则传:“2999-12-31”)") + private String licenseExpire; + + @ApiModelProperty(value = "法人姓名", required = true) + @NotBlank(message = "法人姓名不能为空") + private String legalName; + + @ApiModelProperty(value = "法人证件号码", required = true) + @NotBlank(message = "法人证件号码不能为空") + private String legalNo; + + @ApiModelProperty(value = "证件发证日期 yyyy-MM-dd") + private String idCardStartDate; + + @ApiModelProperty(value = "证件到期日期 yyyy-MM-dd,如果证件到期日期为“长期”,则传:“2999-12-31”") + private String idCardEndDate; + + @ApiModelProperty(value = "法人联系电话", required = true) + @NotBlank(message = "法人联系电话不能为空") + private String legalPhone; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java new file mode 100644 index 000000000..bc0f40c47 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:08 + * @Version 1.0 + */ +@Data +public class AccountVerifyRequest { + + private String outStoreId; + + private String verifyNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java new file mode 100644 index 000000000..21148fae1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java @@ -0,0 +1,43 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 13:49 + * @Version 1.0 + */ +@Data +public class CreateStoreAndAccountRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "组织编号", required = true) + private String orgCode; + @ApiModelProperty(name = "组织名称", required = true) + private String orgName; + @ApiModelProperty(name = "联系电话", required = true) + private String phoneNumber; + @ApiModelProperty(name = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) + private Integer accountType; + @ApiModelProperty(name = "开户类型:1企业 2个体工商户,3个人(小微商户) ", required = true) + private Integer businessType; + @ApiModelProperty(name = "法人姓名", required = true) + private String legalName; + @ApiModelProperty(name = "法人证件号码", required = true) + private String legalNo; + @ApiModelProperty(name = "账户简称", required = true) + private String accountAliasName; + @ApiModelProperty(name = "结算银行卡号", required = true) + private String accountCardno; + @ApiModelProperty(name = "结算卡银行预留手机号", required = true) + private String accountPhone; + @ApiModelProperty(name = "支行编号", required = true) + private String bankNo; + @ApiModelProperty(name = "开户支行名称", required = true) + private String bankName; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java new file mode 100644 index 000000000..295493fe8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java @@ -0,0 +1,60 @@ +package com.cool.store.request.wallet; + +import com.sun.istack.NotNull; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Author suzhuhong + * @Date 2025/11/13 14:07 + * @Version 1.0 + */ +@Data +public class CreateStoreRequest { + + @ApiModelProperty(value = "CRM门店编号", required = true) + @NotBlank(message = "CRM门店编号不能为空") + private String outStoreId; + + @ApiModelProperty(value = "门店编号", required = true) + @NotBlank(message = "门店编号不能为空") + private String storeSn; + + @ApiModelProperty(value = "门店名称", required = true) + @NotBlank(message = "门店名称不能为空") + private String storeName; + + @ApiModelProperty(value = "门店内部名称") + private String inStoreName; + + @ApiModelProperty(value = "组织编号", required = true) + @NotBlank(message = "组织编号不能为空") + private String orgCode; + + @ApiModelProperty(value = "组织名称", required = true) + @NotBlank(message = "组织名称不能为空") + private String orgName; + + @ApiModelProperty(value = "联系电话", required = true) + @NotBlank(message = "联系电话不能为空") + private String phoneNumber; + + @ApiModelProperty(value = "门店模式: 1.社会加盟 2.强管 3.强加盟", required = true) + private Integer storeMode; + + @ApiModelProperty(value = "省-标准行政区域编码", required = true) + private Integer province; + + @ApiModelProperty(value = "市-标准行政区域编码", required = true) + private Integer city; + + @ApiModelProperty(value = "区县-标准行政区域编码", required = true) + private Integer district; + + @ApiModelProperty(value = "门店地址", required = true) + @NotBlank(message = "门店地址不能为空") + private String address; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java new file mode 100644 index 000000000..6d8f8f0fc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/GetBankRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:55 + * @Version 1.0 + */ +@Data +public class GetBankRequest { + + @ApiModelProperty("银行名称") + private String headName; + @ApiModelProperty("关键字查询") + private String keyword; + @ApiModelProperty("分页查询参数") + private WalletBasicPageInfo page; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java new file mode 100644 index 000000000..b24aadec2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentDetailRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 18:28 + * @Version 1.0 + */ +@Data +public class LargePaymentDetailRequest { + + private String transOrderTrace; + + private String paymentId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java new file mode 100644 index 000000000..a7e1b9521 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:00 + * @Version 1.0 + */ +@Data +public class LargePaymentRequest { + + @ApiModelProperty(name = "商户门店编号",required = true) + private String outStoreId; + + @ApiModelProperty(name = "请求预支付Id",required = true) + private String paymentId; + + @ApiModelProperty(name = "签约人名称",required = true) + private String payerAccName; + + @ApiModelProperty(name = "支付金额",required = true) + private String amt; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java new file mode 100644 index 000000000..67126ef08 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:05 + * @Version 1.0 + */ +@Data +public class OutStoreIdRequest { + + private String outStoreId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java new file mode 100644 index 000000000..8cfded563 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/PaymentDetailRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 17:37 + * @Version 1.0 + */ +@Data +public class PaymentDetailRequest { + + private String paymentId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java new file mode 100644 index 000000000..ed37eef29 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/13 16:46 + * @Version 1.0 + */ +@Data +public class UpdateStoreAccountRequest { + + @ApiModelProperty(name = "商户门店编号",required = true) + private String outStoreId; + @ApiModelProperty(name = "法人/自然人证件号码",required = true) + private String idnum; + @ApiModelProperty(name = "签约人姓名(对私结算卡必传)以上二选一",required = true) + private String accountName; + @ApiModelProperty(name = "结算银行卡号",required = true) + private String accountCardno; + @ApiModelProperty(name = "结算卡银行预留手机号。",required = true) + private String accountPhone; + @ApiModelProperty(name = "支行编号",required = true) + private String bankNo; + @ApiModelProperty(name = "开户支行名称",required = true) + private String bankName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java new file mode 100644 index 000000000..4a1cde0a2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java @@ -0,0 +1,40 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:56 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WalletBasicPageInfo { + + @ApiModelProperty(name = "当前页码",required = true) + private Integer currentPage; + + @ApiModelProperty(name = "每页数量",required = true) + private Integer pageSize; + + private Integer total; + + private Integer count; + + private Boolean first; + + private Boolean last; + + public WalletBasicPageInfo(Integer currentPage, Integer pageSize){ + this.currentPage = currentPage; + this.pageSize = pageSize; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java new file mode 100644 index 000000000..aeb5cf88f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java @@ -0,0 +1,231 @@ +package com.cool.store.http; + +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.utils.RsaSignUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:00 + * @Version 1.0 + */ +@Service +@Slf4j +public class WalletHttpClientRest { + + @Autowired + private OkHttpClient okHttpClient; + + @Autowired + private ObjectMapper objectMapper; + + @Value("${cool.api.rsa.private.key}") + private String coolPrivateKey; + @Value("${wallet.api.rsa.public.key}") + private String walletPublicKey; + + + /** + * 发送带签名的POST请求 + */ + public T postWithSign(String url, Object request, Class responseType) { + try { + // 1. 准备请求参数 + Map requestParams = convertToMap(request); + requestParams.put("timestamp", System.currentTimeMillis()); + requestParams.put("key", "360155690205317"); + // 2. 生成签名 + String signature = RsaSignUtil.generateSign(requestParams,coolPrivateKey); + requestParams.put("sign", signature); + + // 3. 发送请求 + String responseJson = executePost(url, requestParams); + + // 4. 解析响应 + return parseResponse(responseJson, responseType); + + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + // 其他异常统一包装为RuntimeException + log.error("发送带签名POST请求失败: {}", url, e); + throw new RuntimeException("接口调用异常: " + e.getMessage(), e); + } + } + + /** + * 发送带签名和验签的POST请求 + */ + public T postWithSignAndVerify(String url, Object request, Class responseType) { + try { + // 1. 准备请求参数 + Map requestParams = convertToMap(request); + requestParams.put("timestamp", System.currentTimeMillis()); + + // 2. 生成签名 + String signature = RsaSignUtil.generateSign(requestParams,coolPrivateKey); + requestParams.put("sign", signature); + + // 3. 发送请求 + String responseJson = executePost(url, requestParams); + + // 4. 解析响应并验证签名 + return parseAndVerifyResponse(responseJson, responseType); + + } catch (Exception e) { + log.error("发送带签名和验签POST请求失败: {}", url, e); + throw new RuntimeException(e.getMessage()); + } + } + + /** + * 发送普通POST请求(无签名) + */ + public T post(String url, Object request, Class responseType) { + try { + String responseJson = executePost(url, request); + return parseResponse(responseJson, responseType); + } catch (Exception e) { + log.error("发送POST请求失败: {}", url, e); + throw new RuntimeException("调用外部接口失败: " + e.getMessage()); + } + } + + /** + * 执行POST请求 + */ + private String executePost(String url, Object body) throws IOException { + String jsonBody = objectMapper.writeValueAsString(body); + RequestBody requestBody = RequestBody.create( MediaType.parse("application/json; charset=utf-8"),jsonBody); + + Request request = new Request.Builder() + .url(url) + .post(requestBody) + .addHeader("Content-Type", "application/json") + .build(); + + log.info("发送POST请求: {}, 数据: {}", url, jsonBody); + + try (Response response = okHttpClient.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR,response.code() + " " + response.message()); + } + + + String responseBody = response.body().string(); + log.info("收到响应: {}", responseBody); + + checkBusinessResponseCode(responseBody); + + return responseBody; + } + } + + private void checkBusinessResponseCode(String responseJson) throws IOException { + try { + Map responseMap = objectMapper.readValue(responseJson, + new TypeReference>() { + }); + + Object codeObj = responseMap.get("code"); + if (codeObj != null) { + int code = 0; + if (codeObj instanceof Number) { + code = ((Number) codeObj).intValue(); + } else { + code = Integer.parseInt(codeObj.toString()); + } + + if (code != 200) { + String msg = (String) responseMap.get("msg"); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, + "code: " + code + ", msg: " + msg); + } + } + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + // 如果解析失败,说明可能不是标准格式,继续处理 + log.debug("无法解析响应码格式: {}", e.getMessage()); + } + } + + /** + * 解析响应 + */ + @SuppressWarnings("unchecked") + private T parseResponse(String responseJson, Class responseType) throws Exception { + if (responseType == String.class) { + return (T) responseJson; + } + + // 解析为通用响应格式 + Map responseMap = objectMapper.readValue(responseJson, + new TypeReference>() {}); + + + + // 如果返回类型是Map,直接返回 + if (responseType == Map.class) { + return (T) responseMap; + } + + // 提取data字段 + Object data = responseMap.get("data"); + if (data != null && responseType != Object.class) { + return objectMapper.convertValue(data, responseType); + } + + return objectMapper.convertValue(responseMap, responseType); + } + + /** + * 解析响应并验证签名 + */ + @SuppressWarnings("unchecked") + private T parseAndVerifyResponse(String responseJson, Class responseType) throws Exception { + // 解析为Map来验证签名 + Map responseMap = objectMapper.readValue(responseJson, + new TypeReference>() {}); + + // 验证响应签名 + String responseSign = (String) responseMap.get("sign"); + if (responseSign != null) { + // 移除sign字段后进行验签 + Map verifyParams = new HashMap<>(responseMap); + + boolean isValid = RsaSignUtil.verifySign(verifyParams, walletPublicKey); + if (!isValid) { + throw new SecurityException("响应签名验证失败"); + } + log.debug("响应签名验证成功"); + } + + // 返回指定类型的数据 + return parseResponse(responseJson, responseType); + } + + /** + * 转换为Map + */ + @SuppressWarnings("unchecked") + private Map convertToMap(Object obj) { + if (obj instanceof Map) { + return (Map) obj; + } + return objectMapper.convertValue(obj, new TypeReference>() {}); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java new file mode 100644 index 000000000..45990e0bd --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -0,0 +1,116 @@ +package com.cool.store.service.wallet; + +import com.cool.store.dto.wallet.*; +import com.cool.store.http.WalletHttpClientRest; +import com.cool.store.request.wallet.*; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/11/13 10:51 + * @Version 1.0 + */ +@Service +public class WalletApiService { + + @Resource + WalletHttpClientRest walletHttpClientRest; + + /** + * 在平安扫呗系统中,创建签约人账户 + * @param request + * @return + */ + public StoreAccountDTO createStoreAndAccount(CreateStoreAndAccountRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/createStoreAndAccount", request, StoreAccountDTO.class); + } + + /** + * 开通失败 开通 + * @param request + * @return + */ + public StoreAccountDTO updateStoreAccount(UpdateStoreAccountRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/updateStoreAccount", request, StoreAccountDTO.class); + } + + /** + * 创建门店接口 + * @param request + * @return + */ + public AccountNoDTO createStore(CreateStoreRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/v1/createStoreAndAccount", request, AccountNoDTO.class); + } + + /** + * 银行发送短信接口 + * @param request + * @return + */ + public AccountAuthenticationDTO authentication(OutStoreIdRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/authentication", request, AccountAuthenticationDTO.class); + } + + /** + * 门店开通平安银行接口 + * @param request + * @return + */ + public AccountVerifyDTO openAccount(AccountVerifyRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/openAccount", request, AccountVerifyDTO.class); + } + + /** + * 签约人账户打标升级 + * @param request + * @return + */ + public AddTagDTO addTag(AccountAddTagRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/addTag", request, AddTagDTO.class); + } + + /** + * 获取账户信息 + * @param request + * @return + */ + public AccountInfoDTO getAccountInfo(OutStoreIdRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/getAccountInfo", request, AccountInfoDTO.class); + } + + /** + * 大额预支付接口 + * @param request + * @return + */ + public LargePaymentDTO largePayment(LargePaymentRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/payment/v1/largePayment", request, LargePaymentDTO.class); + } + + /** + * 大额预支付查询接口 + * @param request + * @return + */ + public PaymentDTO largePaymentQuery(PaymentDetailRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/largePaymentQuery", request, PaymentDTO.class); + } + + /** + * 获取支行信息 + * @param request + * @return + */ + public BankListDTO getBankList(GetBankRequest request) { + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/base/v1/findPageBank", request, BankListDTO.class); + } + + + + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index ce2e5c02e..0818faab5 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -2,15 +2,13 @@ package com.cool.store.controller.webb; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; -import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; import com.cool.store.dto.FoodTokenDTO; import com.cool.store.dto.GetAccessTokenDTO; import com.cool.store.dto.HqtTokenDTO; import com.cool.store.dto.ModifyPasswordDTO; import com.cool.store.dto.huoma.*; -import com.cool.store.dto.wechat.CallbackMessageDTO; -import com.cool.store.dto.wechat.WechatTemplateMessageDTO; +import com.cool.store.dto.wallet.*; import com.cool.store.entity.*; import com.cool.store.enums.DownSystemTypeEnum; import com.cool.store.enums.MessageEnum; @@ -20,13 +18,13 @@ import com.cool.store.enums.wechat.WechatTemplateEnum; import com.cool.store.handler.WeChatHandler; import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.FranchiseFeeMapper; -import com.cool.store.mapper.LineInfoMapper; import com.cool.store.mapper.ShopInfoMapper; import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.request.*; import com.cool.store.request.bigdata.ProfitDataRequest; import com.cool.store.request.huoma.ShopBasicInfoRequest; import com.cool.store.request.oppty.*; +import com.cool.store.request.wallet.*; import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.response.ResponseResult; import com.cool.store.response.bigdata.ActDataResponse; @@ -39,16 +37,12 @@ import com.cool.store.response.oppty.OpportunityDetailResponse; import com.cool.store.response.oppty.OpportunityInfoPageResponse; import com.cool.store.service.*; import com.cool.store.service.impl.CommonService; -import com.cool.store.service.impl.OrderSysInfoServiceImpl; import com.cool.store.service.impl.UserAuthMappingServiceImpl; +import com.cool.store.service.wallet.WalletApiService; import com.cool.store.service.wechat.WechatTemplateService; import com.cool.store.service.xinfa.XinFaBusinessService; -import com.cool.store.service.xinfa.XinFaDeviceService; -import com.cool.store.utils.CoolDateUtils; -import com.cool.store.utils.RedisConstantUtil; -import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.RsaSignUtil; import com.cool.store.utils.poi.StringUtils; -import com.fasterxml.jackson.core.JsonProcessingException; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -58,7 +52,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; -import java.util.stream.Collectors; @Slf4j @RestController @@ -638,4 +631,159 @@ public class PCTestController { return ResponseResult.success(publishStatus); } + + public static void main(String[] args) { + // 测试数据 + Map params = new HashMap<>(); + params.put("name", "张三"); + params.put("age", 25); + params.put("amount", 100.50); + params.put("timestamp", System.currentTimeMillis()); + + List> items = new ArrayList<>(); + Map item1 = new HashMap<>(); + item1.put("id", 1); + item1.put("name", "商品A"); + item1.put("price", 29.99); + items.add(item1); + + Map item2 = new HashMap<>(); + item2.put("id", 2); + item2.put("name", "商品B"); + item2.put("price", 39.99); + items.add(item2); + + params.put("items", items); + + String privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" + + "MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtK\n" + + "uokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf\n" + + "3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE\n" + + "5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxS\n" + + "Tfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl\n" + + "42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+1\n" + + "3wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28\n" + + "ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy\n" + + "6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAj\n" + + "WIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqE\n" + + "hFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2\n" + + "vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9\n" + + "p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2\n" + + "EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFW\n" + + "OrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x\n" + + "98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/Xh\n" + + "YRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2A\n" + + "D+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJz\n" + + "NtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL\n" + + "2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIca\n" + + "PrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMP\n" + + "n2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP\n" + + "/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywd\n" + + "zyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvN\n" + + "bs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=\n" + + "-----END RSA PRIVATE KEY-----"; + + String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCy\n" + + "qKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9e\n" + + "g6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYz\n" + + "j9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzr\n" + + "tDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQ\n" + + "COa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo\n" + + "/QIDAQAB"; + + try { + // 1. 加签 + String sign = RsaSignUtil.generateSign(new HashMap<>(params), privateKey); + System.out.println("生成的签名: " + sign); + + // 2. 将签名放入参数中 + params.put("sign", sign); + + // 3. 验签 + boolean isValid = RsaSignUtil.verifySign(new HashMap<>(params), publicKey); + System.out.println("验签结果: " + isValid); + + // 4. 测试排序字符串生成 + String sortedString = RsaSignUtil.objectToSortedString(params); + System.out.println("排序后的字符串: " + sortedString); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + @Resource + WalletApiService walletApiService; + + @ApiOperation("获取银行信息") + @PostMapping("/getBankList") + public ResponseResult getBankList(@RequestBody GetBankRequest request) { + BankListDTO bankList = walletApiService.getBankList(request); + return ResponseResult.success(bankList); + } + + @ApiOperation("签约人开通信息") + @PostMapping("/createStoreAndAccount") + public ResponseResult createStoreAndAccount(@RequestBody CreateStoreAndAccountRequest request) { + StoreAccountDTO dto = walletApiService.createStoreAndAccount(request); + return ResponseResult.success(dto); + } + + @ApiOperation("创建门店接口") + @PostMapping("/createStore") + public ResponseResult createStore(@RequestBody CreateStoreRequest request) { + AccountNoDTO accountNoDTO = walletApiService.createStore(request); + return ResponseResult.success(accountNoDTO); + } + + + @ApiOperation("打标接口") + @PostMapping("/addTag") + public ResponseResult addTag(@RequestBody AccountAddTagRequest request) { + AddTagDTO addTag = walletApiService.addTag(request); + return ResponseResult.success(addTag); + } + + @ApiOperation("门店签约人账户鉴权申请接口") + @PostMapping("/authentication") + public ResponseResult authentication(@RequestBody OutStoreIdRequest request) { + AccountAuthenticationDTO accountAuthenticationDTO = walletApiService.authentication(request); + return ResponseResult.success(accountAuthenticationDTO); + } + + + @ApiOperation("门店签约人账户开通接口") + @PostMapping("/openAccount") + public ResponseResult openAccount(@RequestBody AccountVerifyRequest request) { + AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(request); + return ResponseResult.success(accountVerifyDTO); + } + + @ApiOperation("获取账户信息") + @PostMapping("/getAccountInfo") + public ResponseResult getAccountInfo(@RequestBody OutStoreIdRequest request) { + AccountInfoDTO accountInfo = walletApiService.getAccountInfo(request); + return ResponseResult.success(accountInfo); + } + + + @ApiOperation("大额预支付接口") + @PostMapping("/largePayment") + public ResponseResult largePayment(@RequestBody LargePaymentRequest request) { + LargePaymentDTO largePayment = walletApiService.largePayment(request); + return ResponseResult.success(largePayment); + } + + @ApiOperation("大额预支付查询接口") + @PostMapping("/largePaymentQuery") + public ResponseResult largePaymentQuery(@RequestBody PaymentDetailRequest request) { + PaymentDTO PaymentDTO = walletApiService.largePaymentQuery(request); + return ResponseResult.success(PaymentDTO); + } + + + + + } diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index 02d7bbe98..e14312016 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -156,3 +156,8 @@ huoMa.franchise.stores.account = 13563273279 huoMa.franchise.stores.password = Zx@123456. huoMa.restaurant.stores.account = 18656552865 huoMa.restaurant.stores.password = ZX123456 + +cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB +wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB + diff --git a/coolstore-partner-web/src/main/resources/application-local.properties b/coolstore-partner-web/src/main/resources/application-local.properties index 087420e81..61008e74f 100644 --- a/coolstore-partner-web/src/main/resources/application-local.properties +++ b/coolstore-partner-web/src/main/resources/application-local.properties @@ -141,4 +141,8 @@ hqt.token.url=https://tc.cloud.hecom.cn hqt.token.username=18161486722 hqt.token.grant_type=client_credentials hqt.token.client.id=WrPffdGpcWkcPsbN -hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD \ No newline at end of file +hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD + +cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB +wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index b9182bd10..3792da08d 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -169,3 +169,8 @@ huoMa.franchise.stores.account = 13563273279 huoMa.franchise.stores.password = Zx@123456. huoMa.restaurant.stores.account = 18656552865 huoMa.restaurant.stores.password = ZX123456 + + +cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= +cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB +wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB diff --git a/pom.xml b/pom.xml index f3901d5b8..7ee22a7a9 100644 --- a/pom.xml +++ b/pom.xml @@ -232,6 +232,11 @@ alibabacloud-dysmsapi20170525 2.0.24 + + org.bouncycastle + bcprov-jdk15on + 1.70 + From 7d810b2a0d202e4a4a4e6964c45a3ce2905c56f1 Mon Sep 17 00:00:00 2001 From: wangff Date: Fri, 14 Nov 2025 17:02:11 +0800 Subject: [PATCH 032/109] =?UTF-8?q?fix:=E6=96=B0=E5=A2=9E=E9=92=B1?= =?UTF-8?q?=E5=8C=85=E5=BC=80=E9=80=9A=E6=B5=81=E7=A8=8B=E5=8F=8A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../store/enums/point/ShopSubStageEnum.java | 4 +- .../enums/point/ShopSubStageStatusEnum.java | 4 + .../enums/wallet/BankAccountTypeEnum.java | 26 +++ .../enums/wallet/BankBusinessTypeEnum.java | 28 +++ .../enums/wallet/PingAnAccountStatusEnum.java | 27 +++ .../request/wallet/AccountAddTagRequest.java | 8 +- .../request/wallet/AccountCreateRequest.java | 50 +++++ .../request/wallet/AccountOpenRequest.java | 21 ++ .../request/wallet/AccountVerifyRequest.java | 4 + .../store/request/wallet/BankListRequest.java | 22 +++ .../wallet/CreateStoreAndAccountRequest.java | 6 + .../request/wallet/OutStoreIdRequest.java | 4 + .../request/wallet/WalletShopRequest.java | 21 ++ .../vo/wallet/AccountAuthenticationVO.java | 23 +++ .../java/com/cool/store/vo/wallet/BankVO.java | 24 +++ .../service/impl/ApplyLicenseServiceImpl.java | 10 + .../store/service/wallet/WalletService.java | 52 +++++ .../wallet/impl/WalletServiceImpl.java | 180 ++++++++++++++++++ .../controller/webc/MiniWalletController.java | 56 ++++++ 20 files changed, 569 insertions(+), 2 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index f98a853da..b2b5ee840 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -315,6 +315,7 @@ public enum ErrorCodeEnum { JOIN_MODE_NOT_ALLOW_OPERATE(1610012,"加盟部人员只能新建加盟店或联营店,请确认!",null), STORE_NOT_FIND(1610013,"门店不存在",null), + WALLET_OPEN_ACCOUNT_FAIL(1620001,"钱包开通失败",null), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java index 6f5da97fb..7e6a2a370 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java @@ -18,6 +18,7 @@ public enum ShopSubStageEnum { SHOP_STAGE_3(ShopStageEnum.SHOP_STAGE_2, 30, "营业执照办理", 23), SHOP_STAGE_4(ShopStageEnum.SHOP_STAGE_2, 40, "食安许可证", 55), SHOP_STAGE_5(ShopStageEnum.SHOP_STAGE_2, 50, "员工招聘", 23), + SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 60, "开通门店平安钱包", 1), SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1), SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4), SHOP_STAGE_8_5(ShopStageEnum.SHOP_STAGE_2, 85, "发票回传", 5), @@ -110,8 +111,9 @@ public enum ShopSubStageEnum { return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_10; case SHOP_STAGE_5: return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_50; + case SHOP_STAGE_6: + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60; case SHOP_STAGE_7: - return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70; case SHOP_STAGE_2: case SHOP_STAGE_3: case SHOP_STAGE_4: diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java index 75f06fbe0..f65932386 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java @@ -36,6 +36,10 @@ public enum ShopSubStageStatusEnum { SHOP_SUB_STAGE_STATUS_50(ShopSubStageEnum.SHOP_STAGE_5, 500, "登记中", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_51(ShopSubStageEnum.SHOP_STAGE_5, 510, "已完成", Boolean.TRUE), + //开通门店平安钱包 + SHOP_SUB_STAGE_STATUS_60(ShopSubStageEnum.SHOP_STAGE_6, 600, "未开通", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_61(ShopSubStageEnum.SHOP_STAGE_6, 610, "已完成", Boolean.TRUE), + //缴纳加盟费/保证金 SHOP_SUB_STAGE_STATUS_70(ShopSubStageEnum.SHOP_STAGE_7, 700, "待内勤发布账单", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_71(ShopSubStageEnum.SHOP_STAGE_7, 710, "待加盟商缴费", Boolean.FALSE), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java new file mode 100644 index 000000000..5b97d20f1 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankAccountTypeEnum.java @@ -0,0 +1,26 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 银行卡业务类型 枚举类 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Getter +@AllArgsConstructor +public enum BankAccountTypeEnum { + + PUBLIC(1, "对公"), + + PRIVATE(2, "对私"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java new file mode 100644 index 000000000..d3678ee12 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/BankBusinessTypeEnum.java @@ -0,0 +1,28 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 银行开户类型 枚举类 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Getter +@AllArgsConstructor +public enum BankBusinessTypeEnum { + + ENTERPRISE(1, "企业"), + + INDIVIDUAL(2, "个体工商户"), + + PERSONAL(3, "个人(小微商户)"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java new file mode 100644 index 000000000..e11760ae6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java @@ -0,0 +1,27 @@ +package com.cool.store.enums.wallet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 平安钱包账户开通状态 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Getter +@AllArgsConstructor +public enum PingAnAccountStatusEnum { + + UNCOMMITTED(1, "待提交"), + UNAUTHORIZED(2, "带鉴权"), + AUTHENTICATING(3, "鉴权中"), + OPEN(4, "开通"), + ; + + private final Integer status; + + private final String desc; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java index 0e5db1110..684fe142d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java @@ -2,9 +2,12 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Pattern; /** @@ -14,6 +17,9 @@ import javax.validation.constraints.Pattern; */ @Data @ApiModel(description = "营业执照信息请求参数") +@AllArgsConstructor +@NoArgsConstructor +@Builder public class AccountAddTagRequest { @ApiModelProperty(value = "外部门店唯一标识", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java new file mode 100644 index 000000000..d4756a6d7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountCreateRequest.java @@ -0,0 +1,50 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + *

+ * 平安钱包账户创建Request + *

+ * + * @author wangff + * @since 2025/11/13 + */ +@Data +public class AccountCreateRequest { + @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") + private Long shopId; + + @ApiModelProperty("签约人姓名") + @NotBlank(message = "签约人姓名不能为空") + private String userName; + + @ApiModelProperty("签约人手机号") + @NotBlank(message = "签约人手机号不能为空") + private String mobile; + + @ApiModelProperty("签约人身份证号") + @NotBlank(message = "签约人身份证号不能为空") + private String idCardNo; + + @ApiModelProperty("银行卡号") + @NotBlank(message = "银行卡号不能为空") + private String bankNumber; + + @ApiModelProperty("银行开户支行") + @NotBlank(message = "银行开户行不能为空") + private String bankName; + + @ApiModelProperty("银行开户支行编号") + @NotBlank(message = "银行开户行编号不能为空") + private String bankNo; + + @ApiModelProperty("银行卡预留手机号") + @NotBlank(message = "银行卡预留手机号不能为空") + private String bankMobile; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java new file mode 100644 index 000000000..aa92f07fb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountOpenRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 平安钱包账户开通Request + *

+ * + * @author wangff + * @since 2025/11/13 + */ +@Data +public class AccountOpenRequest { + @ApiModelProperty("shopId") + private Long shopId; + + @ApiModelProperty("短信验证码") + private String code; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java index bc0f40c47..0933e027d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountVerifyRequest.java @@ -1,6 +1,8 @@ package com.cool.store.request.wallet; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @Author suzhuhong @@ -8,6 +10,8 @@ import lombok.Data; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class AccountVerifyRequest { private String outStoreId; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java new file mode 100644 index 000000000..947f8e3cb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BankListRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 支行信息查询Request + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +public class BankListRequest extends PageBasicInfo { + @ApiModelProperty("银行名称") + private String headName; + + @ApiModelProperty("关键字查询") + private String keyword; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java index 21148fae1..a399d395b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java @@ -1,7 +1,10 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * @Author suzhuhong @@ -9,6 +12,9 @@ import lombok.Data; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class CreateStoreAndAccountRequest { @ApiModelProperty(name = "CRM门店编号", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java index 67126ef08..9082f7418 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OutStoreIdRequest.java @@ -1,6 +1,8 @@ package com.cool.store.request.wallet; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @Author suzhuhong @@ -8,6 +10,8 @@ import lombok.Data; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class OutStoreIdRequest { private String outStoreId; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java new file mode 100644 index 000000000..b6b75ba29 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletShopRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 钱包门店Request + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +public class WalletShopRequest { + @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") + private Long shopId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java new file mode 100644 index 000000000..25272050d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountAuthenticationVO.java @@ -0,0 +1,23 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * 钱包账户鉴权VO + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountAuthenticationVO { + + @ApiModelProperty("1 待提交 2 待鉴权 3 鉴权中 4开通") + private Integer accountStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java new file mode 100644 index 000000000..93288bba2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/BankVO.java @@ -0,0 +1,24 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 银行VO + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Data +public class BankVO { + @ApiModelProperty("银行编号") + private String headCode; + @ApiModelProperty("银行名称") + private String headName; + @ApiModelProperty("支行号") + private String branchCode; + @ApiModelProperty("支行名称") + private String branchName; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java index 885c089d6..81ea4203d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java @@ -19,6 +19,7 @@ import com.cool.store.response.GetStoreInfoByCodeResponse; import com.cool.store.response.LicenseListResponse; import com.cool.store.response.SubmitLicenseResponse; import com.cool.store.service.*; +import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.StringUtil; import com.cool.store.utils.poi.StringUtils; @@ -98,6 +99,9 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { @Resource UserAuthMappingService userAuthMappingService; + @Resource + WalletService walletService; + @Override public Boolean submitBusinessLicense(BusinessLicenseRequest request, PartnerUserInfoVO user) { @@ -144,9 +148,15 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { preparationService.buildStoreAndDecorationComplete(request.getShopId()); preparationService.selectSiteAndBuildStoreComplete(request.getShopId()); } + addTagIfUploadLicense(request.getShopId()); return Boolean.TRUE; } + private void addTagIfUploadLicense(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + walletService.addTagIfUploadLicense(shopId, shopInfo.getStoreId()); + } + @Override public Boolean submitFoodLicense(FoodLicenseRequest request, PartnerUserInfoVO user) { log.info("submitBusinessLicense request:{}", JSONObject.toJSONString(request)); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java new file mode 100644 index 000000000..de942f04d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -0,0 +1,52 @@ +package com.cool.store.service.wallet; + +import com.cool.store.request.wallet.*; +import com.cool.store.vo.wallet.AccountAuthenticationVO; +import com.cool.store.vo.wallet.BankVO; +import com.github.pagehelper.PageInfo; + +/** + *

+ * 钱包 服务类 + *

+ * + * @author wangff + * @since 2025/11/13 + */ +public interface WalletService { + + /** + * 平安银行钱包账号创建 + * @param request 平安钱包账户创建Request + * @return 是否成功 + */ + Boolean accountCreate(AccountCreateRequest request); + + /** + * 鉴权申请 + * @param request 门店id + * @return 是否成功 + */ + AccountAuthenticationVO authentication(WalletShopRequest request); + + /** + * 账号开通 + * @param request 平安钱包账户开通Request + * @return 是否成功 + */ + Boolean openAccount(AccountOpenRequest request); + + /** + * 银行支行列表查询 + * @param request 支行信息查询Request + * @return 银行支行信息列表 + */ + PageInfo getBankList(BankListRequest request); + + /** + * 判断营业执照是否已经上传,已上传则调用打标接口 + * @param shopId 门店shopId + * @param storeId 主数据门店id + */ + void addTagIfUploadLicense(Long shopId, String storeId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java new file mode 100644 index 000000000..092049b48 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -0,0 +1,180 @@ +package com.cool.store.service.wallet.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.RegionDao; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dto.wallet.*; +import com.cool.store.entity.LicenseTransactDO; +import com.cool.store.entity.RegionDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.wallet.BankAccountTypeEnum; +import com.cool.store.enums.wallet.BankBusinessTypeEnum; +import com.cool.store.enums.wallet.PingAnAccountStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.ApplyLicenseMapper; +import com.cool.store.request.wallet.*; +import com.cool.store.service.wallet.WalletApiService; +import com.cool.store.service.wallet.WalletService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.vo.wallet.AccountAuthenticationVO; +import com.cool.store.vo.wallet.BankVO; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + *

+ * 钱包 服务实现类 + *

+ * + * @author wangff + * @since 2025/11/13 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class WalletServiceImpl implements WalletService { + private final ShopInfoDAO shopInfoDAO; + private final ShopStageInfoDAO shopStageInfoDAO; + private final ApplyLicenseMapper applyLicenseMapper; + private final WalletApiService walletApiService; + private final RegionDao regionDao; + + @Override + public Boolean accountCreate(AccountCreateRequest request) { + ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); + // 调用 创建门店签约人账户接口 + RegionDO regionDO = regionDao.getRegionById(shopInfo.getRegionId()); + if (Objects.isNull(regionDO)) { + throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); + } + CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder() + .outStoreId(shopInfo.getStoreId()) + .orgCode(String.valueOf(regionDO.getId())) + .orgName(regionDO.getName()) + .phoneNumber(request.getMobile()) + .accountType(BankAccountTypeEnum.PRIVATE.getType()) + .businessType(BankBusinessTypeEnum.PERSONAL.getType()) + .legalName(request.getUserName()) + .legalNo(request.getIdCardNo()) + .accountAliasName(request.getUserName() + "_" + shopInfo.getStoreId()) + .accountCardno(request.getBankNumber()) + .accountPhone(request.getBankMobile()) + .bankNo(request.getBankNo()) + .bankName(request.getBankName()) + .build(); + StoreAccountDTO storeAndAccount = walletApiService.createStoreAndAccount(accountRequest); + return StringUtils.isNotBlank(storeAndAccount.getAccountId()); + } + + @Override + public AccountAuthenticationVO authentication(WalletShopRequest request) { + ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); + // 调用 门店签约人账户鉴权申请接口 + AccountAuthenticationDTO authentication = walletApiService.authentication(new OutStoreIdRequest(shopInfo.getStoreId())); + if (Objects.nonNull(authentication)) { + return new AccountAuthenticationVO(authentication.getAccountStatus()); + } + throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL); + } + + @Override + public Boolean openAccount(AccountOpenRequest request) { + // 校验阶段是否合法 + ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); + + // 调用 门店签约人账户开通接口 + log.info("开通账户"); + AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(new AccountVerifyRequest(shopInfo.getStoreId(), request.getCode())); + if (!PingAnAccountStatusEnum.OPEN.getStatus().equals(accountVerifyDTO.getAccountStatus())) { + throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL); + } + + // 更新钱包开通阶段状态 + List updateSubStageList = new ArrayList<>(); + updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_61); + // 判断一下缴费阶段是否开启,未开启则开启缴费阶段 + ShopStageInfoDO payStage = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(payStage.getShopSubStageStatus())) { + updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70); + } + shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), updateSubStageList); + + // 判断营业执照是否已经上传,已上传则调用打标接口 + addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId()); + return true; + } + + @Override + public PageInfo getBankList(BankListRequest request) { + GetBankRequest getBankRequest = new GetBankRequest(); + WalletBasicPageInfo pageParam = new WalletBasicPageInfo(); + pageParam.setCurrentPage(request.getPageNum()); + pageParam.setPageSize(request.getPageSize()); + getBankRequest.setPage(pageParam); + getBankRequest.setHeadName(request.getHeadName()); + getBankRequest.setKeyword(request.getKeyword()); + BankListDTO bankListDTO = walletApiService.getBankList(getBankRequest); + PageInfo result = new PageInfo<>(); + result.setPageNum(request.getPageNum()); + result.setPageSize(request.getPageSize()); + if (Objects.nonNull(bankListDTO)) { + WalletBasicPageInfo pageInfo = bankListDTO.getPage(); + result.setTotal(pageInfo.getTotal()); + result.setPages(pageInfo.getCount()); + result.setList(BeanUtil.toList(bankListDTO.getPageData(), BankVO.class)); + } + return result; + } + + @Override + public void addTagIfUploadLicense(Long shopId, String storeId) { + LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId); + // 营业执照已上传,调用打标接口 + if (Objects.nonNull(licenseTransactDO) && StringUtils.isNotBlank(licenseTransactDO.getCreditUrl())) { + try { + // 调用 签约人账户打标(升级)接口 + log.info("营业执照已上传,账户打标"); + AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() + .outStoreId(storeId) + .licenseNo(licenseTransactDO.getCreditCode()) + .licenseName(licenseTransactDO.getBusinessLicense()) +// .licenseExpire(Objects.nonNull(licenseTransactDO.getValidity()) ? CoolDateUtils.DateFormat(licenseTransactDO.getValidity(), "yyyy-MM-dd") : "2999-12-31") + .legalName(licenseTransactDO.getLicenseLegalPerson()) + .legalNo(licenseTransactDO.getLicenseLegalIdCardNo()) + .legalPhone(licenseTransactDO.getLicenseLegalMobile()) + .build(); + AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); + log.info("打标接口调用成功,response:{}", JSONObject.toJSONString(addTagDTO)); + } catch (Exception e) { + log.error("营业执照已上传,打标失败", e); + } + } + } + + /** + * 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态 + */ + private ShopInfoDO getAndVerifyShopAndStage(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + ShopStageInfoDO stageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_6); + if (!ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60.getShopSubStageStatus().equals(stageInfo.getShopSubStageStatus())) { + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE); + } + return shopInfo; + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java new file mode 100644 index 000000000..b0e18f71a --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -0,0 +1,56 @@ +package com.cool.store.controller.webc; + +import com.cool.store.request.wallet.AccountCreateRequest; +import com.cool.store.request.wallet.AccountOpenRequest; +import com.cool.store.request.wallet.BankListRequest; +import com.cool.store.request.wallet.WalletShopRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.wallet.WalletService; +import com.cool.store.vo.wallet.AccountAuthenticationVO; +import com.cool.store.vo.wallet.BankVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + *

+ * Mini钱包 前端控制器 + *

+ * + * @author wangff + * @since 2025/11/14 + */ +@Api(tags = "Mini钱包") +@RestController +@RequestMapping("/mini/wallet") +@RequiredArgsConstructor +public class MiniWalletController { + private final WalletService walletService; + + @ApiOperation("步骤1:平安银行钱包账号创建") + @PostMapping("/accountCreate") + public ResponseResult accountCreate(@RequestBody @Validated AccountCreateRequest request) { + return ResponseResult.success(walletService.accountCreate(request)); + } + + @ApiOperation("步骤2:鉴权申请") + @PostMapping("/authentication") + public ResponseResult authentication(@RequestBody @Validated WalletShopRequest request) { + return ResponseResult.success(walletService.authentication(request)); + } + + @ApiOperation("步骤3:账号开通(步骤2接口返回4时无需调用)") + @PostMapping("/openAccount") + public ResponseResult openAccount(@RequestBody @Validated AccountOpenRequest request) { + return ResponseResult.success(walletService.openAccount(request)); + } + + @ApiOperation("支行信息查询") + @GetMapping("/bankList") + public ResponseResult> getBankList(@RequestBody BankListRequest request) { + return ResponseResult.success(walletService.getBankList(request)); + } +} From 0646022baf27bd6d480e60e042576f78c3142fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Sat, 15 Nov 2025 15:11:14 +0800 Subject: [PATCH 033/109] =?UTF-8?q?feat:=E9=92=B1=E5=8C=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/utils/RsaSignUtil.java | 38 +++++++++ .../cool/store/dto/wallet/AccountInfoDTO.java | 6 ++ .../cool/store/dto/wallet/BillDetailDTO.java | 78 +++++++++++++++++++ .../cool/store/dto/wallet/BillPageDTO.java | 74 ++++++++++++++++++ .../com/cool/store/dto/wallet/CompanyDTO.java | 23 ++++++ .../cool/store/dto/wallet/CompanyListDTO.java | 21 +++++ .../store/dto/wallet/StoreAccountDTO.java | 2 +- .../cool/store/dto/wallet/TransferDTO.java | 23 ++++++ .../cool/store/dto/wallet/WithDrawerDTO.java | 29 +++++++ .../request/wallet/BillDetailRequest.java | 18 +++++ .../store/request/wallet/BillPageRequest.java | 32 ++++++++ .../wallet/FindPageCompanyRequest.java | 22 ++++++ .../request/wallet/LargePaymentRequest.java | 8 +- .../store/request/wallet/TransferRequest.java | 31 ++++++++ .../request/wallet/WalletBasicPageInfo.java | 4 +- .../request/wallet/WithDrawerRequest.java | 25 ++++++ .../cool/store/http/WalletHttpClientRest.java | 11 +-- .../service/wallet/WalletApiService.java | 59 +++++++++++++- .../store/config/OpenApiValidateFilter.java | 1 + .../controller/webb/PCTestController.java | 45 +++++++++-- 20 files changed, 530 insertions(+), 20 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java index 49c44b360..b958388a4 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java @@ -306,4 +306,42 @@ public class RsaSignUtil { return null; } } + + + /** + * 针对 /zxjp/open/v1/wallet/** 接口的专用验签方法 + * @param params 包含签名参数的Map + * @param privateKeyPEM 用于生成签名的私钥 + * @return 验签是否通过 + */ + public static boolean verifyWalletSign(Map params, String privateKeyPEM) { + try { + // 1. 获取请求中的签名 + String requestSign = String.valueOf(params.get("sign")); + if (requestSign == null || requestSign.isEmpty()) { + log.warn("请求中缺少签名参数"); + return false; + } + + // 2. 移除签名参数,生成待签名字符串 + Map paramsToSign = new HashMap<>(params); + paramsToSign.remove("sign"); + + // 3. 使用相同的私钥生成签名 + String generatedSign = generateSign(paramsToSign, privateKeyPEM); + + // 4. 对比签名 + boolean isVerified = Objects.equals(requestSign, generatedSign); + + if (!isVerified) { + log.warn("签名验证失败,请求签名: {}, 生成签名: {}", requestSign, generatedSign); + } + + return isVerified; + } catch (Exception e) { + log.error("验签过程中发生异常", e); + return false; + } + } + } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index 323cd9ae9..11154caa5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -61,4 +61,10 @@ public class AccountInfoDTO { @ApiModelProperty(value = "账户余额", required = true) private String totalAmount; + @ApiModelProperty(value = "打标状态 0 未打标 1 已打标", required = true) + private Integer labelingStatus; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是", required = true) + private Integer isLegal; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java new file mode 100644 index 000000000..645437024 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java @@ -0,0 +1,78 @@ +package com.cool.store.dto.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:09 + * @Version 1.0 + */ +@Data +public class BillDetailDTO { + + /** + * 外部门店唯一标识 + */ + private String outStoreId; + + /** + * 业务系统付款单号(如 CRM 单号) + */ + private String reqNo; + + /** + * 交易Id(营帐通) + */ + private Long tradeId; + + /** + * 交易编号(扫呗) + */ + private String outTradeNo; + + /** + * 交易科目 + */ + private Integer feeItemId; + + /** + * 门店账户编号 + */ + private String storeAccountNo; + + /** + * 公司编号 + */ + private String companyCode; + + /** + * 公司账户编号 + */ + private String companyAccountNo; + + /** + * 提现银行卡 + */ + private String withdrawalBankCardNo; + + /** + * 提现银行卡户名 + */ + private String withdrawalBankCardName; + + /** + * 金额(元) + */ + private String amount; + + /** + * 交易状态 1.成功 2.失败 3.处理中 + */ + private Integer tradeStatus; + + /** + * 交易类型 1.转账 2.提现 + */ + private Integer tradeType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java new file mode 100644 index 000000000..e1e6a6e92 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java @@ -0,0 +1,74 @@ +package com.cool.store.dto.wallet; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:31 + * @Version 1.0 + */ +@Data +public class BillPageDTO { + + /** + * 业务系统付款单号(如 CRM 单号) + */ + private String reqNo; + + /** + * 交易Id(营帐通) + */ + private Long tradeId; + + /** + * 交易编号(扫呗) + */ + private String outTradeNo; + + /** + * 交易科目 + */ + private Integer feeItemId; + + /** + * 门店账户编号 + */ + private String storeAccountNo; + + /** + * 公司编号 + */ + private String companyCode; + + /** + * 公司账户编号 + */ + private String companyAccountNo; + + /** + * 提现银行卡 + */ + private String withdrawalBankCradNo; + + /** + * 提现银行卡户名 + */ + private String withdrawalBankCradName; + + /** + * 金额(元) + */ + private String amount; + + /** + * 交易状态 1.成功 2.失败 3.处理中 + */ + private Integer tradeStatus; + + /** + * 交易类型 1.转账 2.提现 + */ + private Integer tradeType; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java new file mode 100644 index 000000000..42bc48c7b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java @@ -0,0 +1,23 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:34 + * @Version 1.0 + */ +@Data +public class CompanyDTO { + + @ApiModelProperty(value = "公司编号") + private String companyCode; + + @ApiModelProperty(value = "公司名称") + private String companyName; + + @ApiModelProperty(value = "公司账户") + private String companyAccountNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java new file mode 100644 index 000000000..073944367 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:57 + * @Version 1.0 + */ +@Data +public class CompanyListDTO { + + private List pageData; + + private WalletBasicPageInfo page; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java index d3f88e374..f35ac842b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java @@ -14,6 +14,6 @@ public class StoreAccountDTO { /** * 营帐通的账户ID */ - private String accountId; + private String accountNo; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java new file mode 100644 index 000000000..61c649aac --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java @@ -0,0 +1,23 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:49 + * @Version 1.0 + */ +@Data +public class TransferDTO { + + @ApiModelProperty(value="业务系统付款单号(如 CRM 单号)",required = true) + private String reqNo; + @ApiModelProperty(value="转账交易Id",required = true) + private Long tradeId; + @ApiModelProperty(value="金额(元)",required = true) + private String amount; + @ApiModelProperty(value="交易状态1.成功 2.失败 3.处理中",required = true) + private Integer tradeStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java new file mode 100644 index 000000000..bdbeabb3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java @@ -0,0 +1,29 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:59 + * @Version 1.0 + */ +@Data +public class WithDrawerDTO { + + @ApiModelProperty(value = "门店ID",required = true) + private String outStoreId; + @ApiModelProperty(value = "业务系统付款单号(如 CRM 单号)",required = true) + private String reqNo; + @ApiModelProperty(value = "转账交易Id(营帐通系统)",required = true) + private String tradeId; + @ApiModelProperty(value = "提现科目",required = true) + private Long feeItemId; + @ApiModelProperty(value = "提现账户编号",required = true) + private String accountNo; + @ApiModelProperty(value = "金额(元)",required = true) + private String amount; + @ApiModelProperty(value = "交易状态1.成功 2.失败 3.处理中",required = true) + private String tradeStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java new file mode 100644 index 000000000..fbff673cd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description 门店签约账户转账提现查询接口 + * @Author suzhuhong + * @Date 2025/11/14 10:05 + * @Version 1.0 + */ +public class BillDetailRequest { + + @ApiModelProperty(value = "转账交易Id(转账交易编号二选一)") + private Long tradeId; + @ApiModelProperty(value = "转账交易编号(转账交易Id二选一)") + private String outTradeNo; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java new file mode 100644 index 000000000..82e310576 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:17 + * @Version 1.0 + */ +@Data +public class BillPageRequest { + + @ApiModelProperty(value = "门店ID", required = true) + private String outStoreId; + @ApiModelProperty(value = "交易开始时间YYYY-MM-DD HH:MM:SS", required = true) + private String beginDate; + @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS", required = true) + private String endDate; + @ApiModelProperty(value = "钱包类型 1.门店钱包(平安) 2.签约人钱包(平安) 3.返利钱包(网商)", required = true) + private Integer walletType; + @ApiModelProperty(value = "交易类型: 0.全部,1.支出 2.收入", required = false) + private Integer recordType; + @ApiModelProperty(value = "费用类型ID", required = true) + private Long feeItemId; + @ApiModelProperty(value = "当前页码", required = true) + private Integer currentPage; + @ApiModelProperty(value = "每页数量", required = true) + private Integer pageSize; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java new file mode 100644 index 000000000..d6e605eb1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/FindPageCompanyRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:32 + * @Version 1.0 + */ +@Data +public class FindPageCompanyRequest { + + @ApiModelProperty(value = "公司编码") + private String companyCode; + + @ApiModelProperty(value = "公司名称") + private String companyName; + + private WalletBasicPageInfo page; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java index a7e1b9521..6038e7964 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java @@ -11,16 +11,16 @@ import lombok.Data; @Data public class LargePaymentRequest { - @ApiModelProperty(name = "商户门店编号",required = true) + @ApiModelProperty(value = "商户门店编号",required = true) private String outStoreId; - @ApiModelProperty(name = "请求预支付Id",required = true) + @ApiModelProperty(value = "请求预支付Id",required = true) private String paymentId; - @ApiModelProperty(name = "签约人名称",required = true) + @ApiModelProperty(value = "签约人名称",required = true) private String payerAccName; - @ApiModelProperty(name = "支付金额",required = true) + @ApiModelProperty(value = "支付金额",required = true) private String amt; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java new file mode 100644 index 000000000..8a74c09a7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TransferRequest.java @@ -0,0 +1,31 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:40 + * @Version 1.0 + */ +@Data +public class TransferRequest { + + @ApiModelProperty(name = "门店唯一标识",required = true) + private String outStoreId; + @ApiModelProperty(name = "支付密码(sm3加密后字符串)",required = true) + private String payPwd; + @ApiModelProperty(name = "业务系统付款单号(如 CRM 单号),业务系统唯一",required = true) + private String reqNo; + @ApiModelProperty(name = "付款科目",required = true) + private Integer feeItemId; + @ApiModelProperty(name = "公司编号",required = true) + private String companyCode; + @ApiModelProperty(name = "公司编号绑定多个账户时,必传",required = false) + private String companyAccountCode; + @ApiModelProperty(name = "金额(元)",required = true) + private String amount; + @ApiModelProperty(name = "备注 ,交易摘要",required = true) + private String remark; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java index 4a1cde0a2..c2fba1f17 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletBasicPageInfo.java @@ -17,10 +17,10 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class WalletBasicPageInfo { - @ApiModelProperty(name = "当前页码",required = true) + @ApiModelProperty(value = "当前页码",required = true) private Integer currentPage; - @ApiModelProperty(name = "每页数量",required = true) + @ApiModelProperty(value = "每页数量",required = true) private Integer pageSize; private Integer total; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java new file mode 100644 index 000000000..ef0f65ace --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 9:56 + * @Version 1.0 + */ +@Data +public class WithDrawerRequest { + + @ApiModelProperty(value = "门店ID") + private String outStoreId; + @ApiModelProperty(value = "支付密码(sm3加密后字符串)") + private String payPwd; + @ApiModelProperty(value = "业务系统付款单号(如 CRM 单号)") + private String reqNo; + @ApiModelProperty(value = "提现金额") + private String amount; + @ApiModelProperty(value = "提现备注") + private String remark; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java index aeb5cf88f..4ac01676d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java @@ -1,5 +1,6 @@ package com.cool.store.http; +import com.alibaba.fastjson.JSONObject; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.utils.RsaSignUtil; @@ -14,6 +15,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -167,16 +169,11 @@ public class WalletHttpClientRest { */ @SuppressWarnings("unchecked") private T parseResponse(String responseJson, Class responseType) throws Exception { - if (responseType == String.class) { - return (T) responseJson; - } - // 解析为通用响应格式 Map responseMap = objectMapper.readValue(responseJson, new TypeReference>() {}); - // 如果返回类型是Map,直接返回 if (responseType == Map.class) { return (T) responseMap; @@ -185,6 +182,10 @@ public class WalletHttpClientRest { // 提取data字段 Object data = responseMap.get("data"); if (data != null && responseType != Object.class) { + if (data instanceof List) { + // 保持List结构,让调用方处理具体类型转换 + return (T)JSONObject.toJSONString(data); + } return objectMapper.convertValue(data, responseType); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index 45990e0bd..4b77cea30 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -1,11 +1,14 @@ package com.cool.store.service.wallet; +import com.alibaba.fastjson.JSONObject; import com.cool.store.dto.wallet.*; import com.cool.store.http.WalletHttpClientRest; import com.cool.store.request.wallet.*; +import com.cool.store.utils.StringUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; /** * @Author suzhuhong @@ -77,8 +80,12 @@ public class WalletApiService { * @param request * @return */ - public AccountInfoDTO getAccountInfo(OutStoreIdRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/getAccountInfo", request, AccountInfoDTO.class); + public List getAccountInfo(OutStoreIdRequest request){ + String accountInfoStr = walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/queryAccountInfo", request, String.class); + if (StringUtil.isNotEmpty(accountInfoStr)){ + return JSONObject.parseArray(accountInfoStr, AccountInfoDTO.class); + } + return null; } /** @@ -87,7 +94,7 @@ public class WalletApiService { * @return */ public LargePaymentDTO largePayment(LargePaymentRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/payment/v1/largePayment", request, LargePaymentDTO.class); + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/largePayment", request, LargePaymentDTO.class); } /** @@ -99,6 +106,52 @@ public class WalletApiService { return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/largePaymentQuery", request, PaymentDTO.class); } + /** + * 门店账户向公司分账转账接口 + * @param request + * @return + */ + public TransferDTO transfer(TransferRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/transfer", request, TransferDTO.class); + } + + + /** + * 门店签约账户,退款提现至提现卡 + * @param request + * @return + */ + public WithDrawerDTO withdraw(WithDrawerRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/withdraw", request, WithDrawerDTO.class); + } + + /** + * 账单详情 + * @param request + * @return + */ + public BillDetailDTO getBillDetail(BillDetailRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/billDetail", request, BillDetailDTO.class); + } + + /** + * 获取门店账户流水 + * @param request + * @return + */ + public BillPageDTO getBillPage(BillPageRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/billPage", request, BillPageDTO.class); + } + + /** + * 获取门店账户信息 + * @param request + * @return + */ + public CompanyListDTO getCompanyInfo(FindPageCompanyRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/base/v1/findPageCompany", request, CompanyListDTO.class); + } + /** * 获取支行信息 * @param request diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java index 682af5c52..624d2a602 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java @@ -70,6 +70,7 @@ public class OpenApiValidateFilter implements Filter { filterChain.doFilter(servletRequest, response); return; } + HttpServletResponse res = (HttpServletResponse) response; // 1. 验证时间戳 try { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index 0818faab5..5e54d41f3 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -752,7 +752,6 @@ public class PCTestController { return ResponseResult.success(accountAuthenticationDTO); } - @ApiOperation("门店签约人账户开通接口") @PostMapping("/openAccount") public ResponseResult openAccount(@RequestBody AccountVerifyRequest request) { @@ -762,12 +761,11 @@ public class PCTestController { @ApiOperation("获取账户信息") @PostMapping("/getAccountInfo") - public ResponseResult getAccountInfo(@RequestBody OutStoreIdRequest request) { - AccountInfoDTO accountInfo = walletApiService.getAccountInfo(request); - return ResponseResult.success(accountInfo); + public ResponseResult> getAccountInfo(@RequestBody OutStoreIdRequest request) { + List accountInfoList = walletApiService.getAccountInfo(request); + return ResponseResult.success(accountInfoList); } - @ApiOperation("大额预支付接口") @PostMapping("/largePayment") public ResponseResult largePayment(@RequestBody LargePaymentRequest request) { @@ -782,6 +780,43 @@ public class PCTestController { return ResponseResult.success(PaymentDTO); } + @ApiOperation("门店账户向公司分账转账接口") + @PostMapping("/transfer") + public ResponseResult transfer(@RequestBody TransferRequest request) { + TransferDTO transfer = walletApiService.transfer(request); + return ResponseResult.success(transfer); + } + + @ApiOperation("门店签约账户,退款提现至提现卡") + @PostMapping("/withdraw") + public ResponseResult withdraw(@RequestBody WithDrawerRequest request) { + WithDrawerDTO withdraw = walletApiService.withdraw(request); + return ResponseResult.success(withdraw); + } + + @ApiOperation(" 获取账单详情") + @PostMapping("/getBillDetail") + public ResponseResult getBillDetail(@RequestBody BillDetailRequest request) { + BillDetailDTO billDetail = walletApiService.getBillDetail(request); + return ResponseResult.success(billDetail); + } + + @ApiOperation("获取账单列表") + @PostMapping("/getBillPage") + public ResponseResult getBillPage(@RequestBody BillPageRequest request) { + BillPageDTO billPage = walletApiService.getBillPage(request); + return ResponseResult.success(billPage); + } + + @ApiOperation("获取银行信息") + @PostMapping("/getCompanyInfo") + public ResponseResult getCompanyInfo(@RequestBody FindPageCompanyRequest request) { + CompanyListDTO companyDTO = walletApiService.getCompanyInfo(request); + return ResponseResult.success(companyDTO); + } + + + From aedea2dc59b7ecd88247258f5c82353ba9a4c2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 17 Nov 2025 09:40:57 +0800 Subject: [PATCH 034/109] =?UTF-8?q?feat:=E9=92=B1=E5=8C=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/dto/wallet/AccountAuthenticationDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/AccountInfoDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/AddTagDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/BankDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/BankListDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/BillDetailDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/BillPageDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/CompanyDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/CompanyListDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/LargePaymentDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/PaymentDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/StoreAccountDTO.java | 2 ++ .../src/main/java/com/cool/store/dto/wallet/TransferDTO.java | 2 ++ .../main/java/com/cool/store/dto/wallet/WithDrawerDTO.java | 2 ++ .../java/com/cool/store/request/wallet/BillDetailRequest.java | 2 ++ .../store/request/wallet/CreateStoreAndAccountRequest.java | 2 +- .../cool/store/request/wallet/UpdateStoreAccountRequest.java | 2 +- .../com/cool/store/service/wallet/impl/WalletServiceImpl.java | 4 ++-- 21 files changed, 40 insertions(+), 4 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java index e5de9cf48..bde8f4c5a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountAuthenticationDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** @@ -8,6 +9,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class AccountAuthenticationDTO { private Integer accountStatus; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index 11154caa5..b43e4babd 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,6 +12,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class AccountInfoDTO { @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java index c78f890d7..2dec0858a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountNoDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** @@ -8,6 +9,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class AccountNoDTO { private String accountNo; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java index d8a8c78aa..3cddbc142 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** @@ -8,6 +9,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class AccountVerifyDTO { private String outStoreId; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java index 0408d50d8..7bc352de4 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AddTagDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** @@ -8,6 +9,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class AddTagDTO { private Integer status; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java index 9375c398f..221953dfa 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class BankDTO { @ApiModelProperty("银行编号") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java index a7441adf3..f6ffec419 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BankListDTO.java @@ -1,6 +1,7 @@ package com.cool.store.dto.wallet; import com.cool.store.request.wallet.WalletBasicPageInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import java.util.List; @@ -11,6 +12,7 @@ import java.util.List; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class BankListDTO { WalletBasicPageInfo page; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java index 645437024..7462678d6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDetailDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** @@ -8,6 +9,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class BillDetailDTO { /** diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java index e1e6a6e92..d438734ef 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** @@ -8,6 +9,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class BillPageDTO { /** diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java index 42bc48c7b..18aa95d27 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class CompanyDTO { @ApiModelProperty(value = "公司编号") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java index 073944367..26dba0dd6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/CompanyListDTO.java @@ -1,6 +1,7 @@ package com.cool.store.dto.wallet; import com.cool.store.request.wallet.WalletBasicPageInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import java.util.List; @@ -11,6 +12,7 @@ import java.util.List; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class CompanyListDTO { private List pageData; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java index f95e440cf..48cf39f83 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/LargePaymentDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class LargePaymentDTO { @ApiModelProperty(value = "外部门店唯一标识", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java index aac3aa8bd..acc9b5a14 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,6 +13,7 @@ import java.util.List; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class PaymentDTO { @ApiModelProperty(name = "外部门店唯一标识", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java index c20e7492a..4cd9c03d8 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/PaymentDetailDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class PaymentDetailDTO { @ApiModelProperty(value = "打款金额", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java index f35ac842b..7f3fd0dbb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreAccountDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class StoreAccountDTO { /** diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java index 61c649aac..563a2aea2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TransferDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class TransferDTO { @ApiModelProperty(value="业务系统付款单号(如 CRM 单号)",required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java index bdbeabb3b..820d2b696 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/WithDrawerDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.wallet; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class WithDrawerDTO { @ApiModelProperty(value = "门店ID",required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java index fbff673cd..6eaa89cf4 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillDetailRequest.java @@ -1,6 +1,7 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; /** * @Description 门店签约账户转账提现查询接口 @@ -8,6 +9,7 @@ import io.swagger.annotations.ApiModelProperty; * @Date 2025/11/14 10:05 * @Version 1.0 */ +@Data public class BillDetailRequest { @ApiModelProperty(value = "转账交易Id(转账交易编号二选一)") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java index a399d395b..231f74b78 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java @@ -36,7 +36,7 @@ public class CreateStoreAndAccountRequest { @ApiModelProperty(name = "账户简称", required = true) private String accountAliasName; @ApiModelProperty(name = "结算银行卡号", required = true) - private String accountCardno; + private String accountCardNo; @ApiModelProperty(name = "结算卡银行预留手机号", required = true) private String accountPhone; @ApiModelProperty(name = "支行编号", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java index ed37eef29..5f6d41169 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdateStoreAccountRequest.java @@ -18,7 +18,7 @@ public class UpdateStoreAccountRequest { @ApiModelProperty(name = "签约人姓名(对私结算卡必传)以上二选一",required = true) private String accountName; @ApiModelProperty(name = "结算银行卡号",required = true) - private String accountCardno; + private String accountCardNo; @ApiModelProperty(name = "结算卡银行预留手机号。",required = true) private String accountPhone; @ApiModelProperty(name = "支行编号",required = true) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 092049b48..4fbb87a53 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -69,13 +69,13 @@ public class WalletServiceImpl implements WalletService { .legalName(request.getUserName()) .legalNo(request.getIdCardNo()) .accountAliasName(request.getUserName() + "_" + shopInfo.getStoreId()) - .accountCardno(request.getBankNumber()) + .accountCardNo(request.getBankNumber()) .accountPhone(request.getBankMobile()) .bankNo(request.getBankNo()) .bankName(request.getBankName()) .build(); StoreAccountDTO storeAndAccount = walletApiService.createStoreAndAccount(accountRequest); - return StringUtils.isNotBlank(storeAndAccount.getAccountId()); + return StringUtils.isNotBlank(storeAndAccount.getAccountNo()); } @Override From 026dab78ff5b37f8a27ff287dfe58f26492fdc99 Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 17 Nov 2025 10:06:36 +0800 Subject: [PATCH 035/109] fix --- .../java/com/cool/store/dto/wallet/AccountVerifyDTO.java | 2 +- .../store/service/wallet/impl/WalletServiceImpl.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java index d8a8c78aa..9e61a1786 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountVerifyDTO.java @@ -12,6 +12,6 @@ public class AccountVerifyDTO { private String outStoreId; - private Integer accountStatus; + private Integer openStatus; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 092049b48..2043004da 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -1,6 +1,7 @@ package com.cool.store.service.wallet.impl; import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; import com.cool.store.dao.RegionDao; import com.cool.store.dao.ShopInfoDAO; import com.cool.store.dao.ShopStageInfoDAO; @@ -75,7 +76,7 @@ public class WalletServiceImpl implements WalletService { .bankName(request.getBankName()) .build(); StoreAccountDTO storeAndAccount = walletApiService.createStoreAndAccount(accountRequest); - return StringUtils.isNotBlank(storeAndAccount.getAccountId()); + return StringUtils.isNotBlank(storeAndAccount.getAccountNo()); } @Override @@ -84,6 +85,10 @@ public class WalletServiceImpl implements WalletService { // 调用 门店签约人账户鉴权申请接口 AccountAuthenticationDTO authentication = walletApiService.authentication(new OutStoreIdRequest(shopInfo.getStoreId())); if (Objects.nonNull(authentication)) { + if (authentication.getAccountStatus().equals(4)) { + // 判断营业执照是否已经上传,已上传则调用打标接口 + addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId()); + } return new AccountAuthenticationVO(authentication.getAccountStatus()); } throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL); @@ -97,7 +102,7 @@ public class WalletServiceImpl implements WalletService { // 调用 门店签约人账户开通接口 log.info("开通账户"); AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(new AccountVerifyRequest(shopInfo.getStoreId(), request.getCode())); - if (!PingAnAccountStatusEnum.OPEN.getStatus().equals(accountVerifyDTO.getAccountStatus())) { + if (!CommonConstants.INDEX_ONE.equals(accountVerifyDTO.getOpenStatus())) { throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL); } From 35a1e1292add98ef031a744a79a3b6e0b3b1432e Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 17 Nov 2025 10:18:32 +0800 Subject: [PATCH 036/109] =?UTF-8?q?fix:=E5=8C=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/cool/store/utils/RsaSignUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java index b958388a4..180cda228 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RsaSignUtil.java @@ -1,6 +1,6 @@ package com.cool.store.utils; -import com.sun.deploy.net.URLEncoder; +import java.net.URLEncoder; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.asn1.pkcs.RSAPrivateKey; import sun.security.util.DerInputStream; From fcef86762dbd8d83f3033cc48861e3eb9641e5b8 Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 17 Nov 2025 11:12:11 +0800 Subject: [PATCH 037/109] =?UTF-8?q?fix:=E6=89=93=E6=A0=87=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E7=94=A8=E6=96=B0=E5=A2=9E=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/wallet/PingAnAccountStatusEnum.java | 2 +- .../java/com/cool/store/dao/ShopInfoDAO.java | 2 +- .../wallet/impl/WalletServiceImpl.java | 36 ++++++++++++------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java index e11760ae6..7d0203753 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/PingAnAccountStatusEnum.java @@ -16,7 +16,7 @@ import lombok.Getter; public enum PingAnAccountStatusEnum { UNCOMMITTED(1, "待提交"), - UNAUTHORIZED(2, "带鉴权"), + UNAUTHORIZED(2, "待鉴权"), AUTHENTICATING(3, "鉴权中"), OPEN(4, "开通"), ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java index 37d13e74f..c10400783 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -97,8 +97,8 @@ public class ShopInfoDAO { * @return */ public Long addShopInfo(ShopInfoDO shopInfo){ - shopInfoMapper.insertSelective(shopInfo); shopInfo.setStoreId(UUIDUtils.get32UUID()); + shopInfoMapper.insertSelective(shopInfo); return shopInfo.getId(); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 94d69fedc..c642f5db8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -27,6 +27,7 @@ import com.cool.store.vo.wallet.BankVO; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -149,25 +150,36 @@ public class WalletServiceImpl implements WalletService { // 营业执照已上传,调用打标接口 if (Objects.nonNull(licenseTransactDO) && StringUtils.isNotBlank(licenseTransactDO.getCreditUrl())) { try { - // 调用 签约人账户打标(升级)接口 - log.info("营业执照已上传,账户打标"); - AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() - .outStoreId(storeId) - .licenseNo(licenseTransactDO.getCreditCode()) - .licenseName(licenseTransactDO.getBusinessLicense()) + // 判断一下账户的开通状态 + if (enableAddTag(storeId)) { + // 调用 签约人账户打标(升级)接口 + log.info("营业执照已上传,账户打标"); + AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() + .outStoreId(storeId) + .licenseNo(licenseTransactDO.getCreditCode()) + .licenseName(licenseTransactDO.getBusinessLicense()) // .licenseExpire(Objects.nonNull(licenseTransactDO.getValidity()) ? CoolDateUtils.DateFormat(licenseTransactDO.getValidity(), "yyyy-MM-dd") : "2999-12-31") - .legalName(licenseTransactDO.getLicenseLegalPerson()) - .legalNo(licenseTransactDO.getLicenseLegalIdCardNo()) - .legalPhone(licenseTransactDO.getLicenseLegalMobile()) - .build(); - AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); - log.info("打标接口调用成功,response:{}", JSONObject.toJSONString(addTagDTO)); + .legalName(licenseTransactDO.getLicenseLegalPerson()) + .legalNo(licenseTransactDO.getLicenseLegalIdCardNo()) + .legalPhone(licenseTransactDO.getLicenseLegalMobile()) + .build(); + AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); + log.info("打标接口调用成功,response:{}", JSONObject.toJSONString(addTagDTO)); + } } catch (Exception e) { log.error("营业执照已上传,打标失败", e); } } } + /** + * 账户存在且未打标 + */ + private boolean enableAddTag(String storeId) { + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); + return CollectionUtils.isNotEmpty(accountInfo) && accountInfo.size() == 1 && accountInfo.get(0).getLabelingStatus().equals(0); + } + /** * 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态 */ From 04b5a4e7bc1ec92c8ab6508ea8c5141910c1edcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 17 Nov 2025 14:14:47 +0800 Subject: [PATCH 038/109] =?UTF-8?q?feat:=E6=89=93=E6=A0=87=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E9=80=9A=E7=9F=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/enums/ResponseCodeEnum.java | 3 +- .../wallet/AddTagCallbackNoticeRequest.java | 21 ++++ .../request/wallet/UpdatePasswordRequest.java | 27 ++++++ .../store/response/bigdata/ApiResponse.java | 19 +++- .../service/wallet/WalletApiService.java | 8 ++ .../store/service/wallet/WalletService.java | 7 ++ .../wallet/impl/WalletServiceImpl.java | 5 + .../store/config/OpenApiValidateFilter.java | 97 +++++++++++++++++++ .../controller/webb/OpenApiController.java | 10 ++ 9 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java index 3305b8d0d..8ef4d447e 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java @@ -10,7 +10,8 @@ public enum ResponseCodeEnum { /** * 成功返回 */ - SUCCESS(200000, "SUCCESS"); + SUCCESS(200000, "SUCCESS"), + SUCCESS_WALLET(200, "SUCCESS"); /** * 返回码 diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java new file mode 100644 index 000000000..4d5a495b0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/17 13:49 + * @Version 1.0 + */ +@Data +public class AddTagCallbackNoticeRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "状态1.打标成功 2.打标失败 3.处理中(打标状态)", required = true) + private Integer status; + @ApiModelProperty(name = "1.法人 2.非法人", required = true) + private Integer addTagType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java new file mode 100644 index 000000000..a9e89b9b4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/UpdatePasswordRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/17 11:20 + * @Version 1.0 + */ +@Data +public class UpdatePasswordRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "维护类型 1.设置密码 2.修改密码", required = true) + private Integer upholdType; + @ApiModelProperty(name = "新支付密码(sm3加密后字符串)", required = true) + private String newPayPwd; + @ApiModelProperty(name = "确认新支付密码(sm3加密后字符串)", required = true) + private String confirmPayPwd; + @ApiModelProperty(name = "当前使用的支付密码(sm3加密后字符串),维护类型为修改密码时必填", required = false) + private String currentPayPwd; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java index 96e2f49ff..a822375d2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java @@ -3,9 +3,12 @@ package com.cool.store.response.bigdata; import com.cool.store.constants.CommonConstants; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.ResponseCodeEnum; +import com.cool.store.response.ResponseResult; import lombok.Data; import org.slf4j.MDC; +import java.text.MessageFormat; + /** * @Author suzhuhong * @Date 2025/4/1 10:49 @@ -31,7 +34,19 @@ public class ApiResponse { return new ApiResponse(ResponseCodeEnum.SUCCESS.getCode(), "ok", data); } - public static ApiResponse error(ErrorCodeEnum errorCodeEnum) { - return new ApiResponse(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), null); + /** + * 钱包系统 响应用200 + * @param data + * @param + * @return + */ + public static ApiResponse successByWallet(T data) { + return new ApiResponse(ResponseCodeEnum.SUCCESS_WALLET.getCode(), "ok", data); + } + + + public static ApiResponse fail(ErrorCodeEnum responseEnum, Object... objects){ + String message = MessageFormat.format(responseEnum.getMessage(), objects); + return new ApiResponse(responseEnum.getCode(), message, false); } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index 4b77cea30..edbc36273 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -161,6 +161,14 @@ public class WalletApiService { return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/base/v1/findPageBank", request, BankListDTO.class); } + /** + * 修改密码 + * @param request + * @return + */ + public String upholdPwd(UpdatePasswordRequest request){ + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/upholdPwd", request, String.class); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index de942f04d..33ea362d2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -49,4 +49,11 @@ public interface WalletService { * @param storeId 主数据门店id */ void addTagIfUploadLicense(Long shopId, String storeId); + + /** + * 打标成功回调通知 + * @param request + * @return + */ + Boolean addTagCallback(AddTagCallbackNoticeRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index c642f5db8..eb793d1ae 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -180,6 +180,11 @@ public class WalletServiceImpl implements WalletService { return CollectionUtils.isNotEmpty(accountInfo) && accountInfo.size() == 1 && accountInfo.get(0).getLabelingStatus().equals(0); } + @Override + public Boolean addTagCallback(AddTagCallbackNoticeRequest request) { + return Boolean.TRUE; + } + /** * 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态 */ diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java index 624d2a602..8f660d4a4 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java @@ -5,7 +5,9 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.response.ResponseResult; +import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.utils.OpenSignatureUtil; +import com.cool.store.utils.RsaSignUtil; import com.cool.store.utils.UUIDUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -42,6 +44,8 @@ public class OpenApiValidateFilter implements Filter { private String coolAppKey; @Value("${cool.api.secret}") private String coolAppSecret; + @Value("${cool.api.rsa.private.key}") + private String coolPrivateKey; private static final Set WHITELIST_URIS = new HashSet<>(Arrays.asList( "/zxjp/open/v1/statusRefresh", "/zxjp/open/v1/getStoreUser", @@ -52,6 +56,8 @@ public class OpenApiValidateFilter implements Filter { "/zxjp/open/v1/getYlsToken", "/zxjp/open/v1/getStoreList", "/zxjp/open/v1/changeReceiptStatus", "/zxjp/open/v1/getStoreUser")); + // 添加钱包接口路径前缀常量 + private static final String WALLET_API_PATTERN = "^/zxjp/open/v\\d+/wallet/.*$"; @Override public void init(FilterConfig filterConfig) throws ServletException { } @@ -70,6 +76,11 @@ public class OpenApiValidateFilter implements Filter { filterChain.doFilter(servletRequest, response); return; } + // 针对钱包接口的专用验签处理 所有符合 /zxjp/open/v{版本号}/wallet/ 格式的接口都会走钱包专用的验签流程。 + if (uri.matches(WALLET_API_PATTERN)) { + handleWalletApiValidation(request, response, filterChain); + return; + } HttpServletResponse res = (HttpServletResponse) response; // 1. 验证时间戳 @@ -186,4 +197,90 @@ public class OpenApiValidateFilter implements Filter { @Override public void destroy() { } + + + private void handleWalletApiValidation(HttpServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { + HttpServletResponse res = (HttpServletResponse) response; + + try { + // 读取请求体 + StringBuilder requestBody = new StringBuilder(); + try (BufferedReader reader = request.getReader()) { + String line; + while ((line = reader.readLine()) != null) { + requestBody.append(line); + } + } + + String jsonBody = requestBody.toString(); + + // 1. 验证时间戳 + String timestampStr = extractTimestampFromJson(jsonBody); + if (timestampStr == null) { + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "缺少timestamp参数"); + return; + } + + long timestamp = Long.parseLong(timestampStr) / 1000; + long currentTime = System.currentTimeMillis() / 1000; + long timeDiff = Math.abs(currentTime - timestamp); + + if (timeDiff > 600) { + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "请求已过期,请保证timestamp时间在10分钟之内"); + return; + } + + // 2. 钱包接口专用验签逻辑 + if (!verifyWalletSignatureFromBody(jsonBody)) { + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "签名校验失败"); + return; + } + + filterChain.doFilter(request, response); + } catch (Exception e) { + log.error("钱包接口验签异常: ", e); + writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "验签异常"); + } + } + + /** + * 从JSON中提取timestamp字段 + */ + private String extractTimestampFromJson(String jsonBody) { + try { + ObjectMapper objectMapper = new ObjectMapper(); + Map params = objectMapper.readValue(jsonBody, new TypeReference>() {}); + Object timestamp = params.get("timestamp"); + return timestamp != null ? timestamp.toString() : null; + } catch (Exception e) { + log.error("提取timestamp失败: ", e); + return null; + } + } + + /** + * 钱包接口签名验证方法 - 签名在请求体中 + */ + private boolean verifyWalletSignatureFromBody(String jsonBody) { + try { + // 解析请求参数 + ObjectMapper objectMapper = new ObjectMapper(); + Map params = objectMapper.readValue(jsonBody, new TypeReference>() {}); + + // 使用RsaSignUtil.verifyWalletSign进行验签 + return RsaSignUtil.verifyWalletSign(params, coolPrivateKey); + } catch (Exception e) { + log.error("钱包接口签名验证失败: ", e); + return false; + } + } + + /** + * 写入错误响应 + */ + private void writeErrorResponse(HttpServletResponse response, ErrorCodeEnum errorCode, String message) throws IOException { + response.setStatus(HttpStatus.OK.value()); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(JSON.toJSONString(ApiResponse.fail(errorCode, message))); + } } \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java index c44825039..67d6493c0 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java @@ -11,11 +11,13 @@ import com.cool.store.request.StoreCodeDTO; import com.cool.store.request.*; import com.cool.store.request.notice.ThirdHandleMessageRequest; import com.cool.store.request.notice.ThirdMatterRequest; +import com.cool.store.request.wallet.AddTagCallbackNoticeRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.ReceiptCallBackRequest; import com.cool.store.response.ResponseResult; import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.*; +import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.poi.StringUtils; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; @@ -57,6 +59,8 @@ public class OpenApiController { WechatMiniAppService wechatMiniAppService; @Autowired WeChatHandler weChatHandler; + @Resource + WalletService walletService; @PostMapping("/statusRefresh") public ApiResponse statusRefresh(@RequestBody StatusRefreshDTO statusRefreshDTO){ @@ -214,4 +218,10 @@ public class OpenApiController { } return echostr; } + + @ApiOperation("打标回调通知接口") + @PostMapping("/wallet/addTagCallback") + public ApiResponse addTagCallback(@RequestBody @Validated AddTagCallbackNoticeRequest request) { + return ApiResponse.successByWallet(walletService.addTagCallback(request)); + } } From b2bd17e07573c4af18feac2d2a3cff736d924d7a Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 17 Nov 2025 15:51:54 +0800 Subject: [PATCH 039/109] =?UTF-8?q?fix:=E9=98=B6=E6=AE=B5=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=8F=8A=E7=8A=B6=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/enums/point/ShopSubStageEnum.java | 2 +- .../com/cool/store/enums/point/ShopSubStageStatusEnum.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java index 7e6a2a370..fdd49a0a2 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java @@ -18,7 +18,7 @@ public enum ShopSubStageEnum { SHOP_STAGE_3(ShopStageEnum.SHOP_STAGE_2, 30, "营业执照办理", 23), SHOP_STAGE_4(ShopStageEnum.SHOP_STAGE_2, 40, "食安许可证", 55), SHOP_STAGE_5(ShopStageEnum.SHOP_STAGE_2, 50, "员工招聘", 23), - SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 60, "开通门店平安钱包", 1), + SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 260, "开通门店平安钱包", 1), SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1), SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4), SHOP_STAGE_8_5(ShopStageEnum.SHOP_STAGE_2, 85, "发票回传", 5), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java index f65932386..462f2d14a 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java @@ -37,8 +37,8 @@ public enum ShopSubStageStatusEnum { SHOP_SUB_STAGE_STATUS_51(ShopSubStageEnum.SHOP_STAGE_5, 510, "已完成", Boolean.TRUE), //开通门店平安钱包 - SHOP_SUB_STAGE_STATUS_60(ShopSubStageEnum.SHOP_STAGE_6, 600, "未开通", Boolean.FALSE), - SHOP_SUB_STAGE_STATUS_61(ShopSubStageEnum.SHOP_STAGE_6, 610, "已完成", Boolean.TRUE), + SHOP_SUB_STAGE_STATUS_60(ShopSubStageEnum.SHOP_STAGE_6, 2600, "未开通", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_61(ShopSubStageEnum.SHOP_STAGE_6, 2610, "已完成", Boolean.TRUE), //缴纳加盟费/保证金 SHOP_SUB_STAGE_STATUS_70(ShopSubStageEnum.SHOP_STAGE_7, 700, "待内勤发布账单", Boolean.FALSE), From 0e1955a5ed958ddba36657b067654d17552d0119 Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 17 Nov 2025 15:53:06 +0800 Subject: [PATCH 040/109] fix --- .../java/com/cool/store/response/bigdata/ApiResponse.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java index a822375d2..cf391c02c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/bigdata/ApiResponse.java @@ -49,4 +49,8 @@ public class ApiResponse { String message = MessageFormat.format(responseEnum.getMessage(), objects); return new ApiResponse(responseEnum.getCode(), message, false); } + + public static ApiResponse error(ErrorCodeEnum errorCodeEnum) { + return new ApiResponse(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), null); + } } From f5283b783ce9259ed5feadfd56dc37b0a33108ed Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 17 Nov 2025 18:01:01 +0800 Subject: [PATCH 041/109] =?UTF-8?q?fix:=E6=96=B0=E5=A2=9E=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E8=B4=A6=E6=88=B7=E5=88=97=E8=A1=A8=E5=8F=8A?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/dto/wallet/BillDTO.java | 84 +++++++++++++++++++ .../cool/store/dto/wallet/BillPageDTO.java | 75 +++-------------- .../wallet/AccountBillQueryRequest.java | 36 ++++++++ .../store/request/wallet/BillPageRequest.java | 6 ++ .../store/vo/wallet/AccountBillListVO.java | 40 +++++++++ .../cool/store/vo/wallet/AccountInfoVO.java | 36 ++++++++ .../service/wallet/WalletApiService.java | 2 +- .../store/service/wallet/WalletService.java | 18 ++++ .../wallet/impl/WalletServiceImpl.java | 61 +++++++++++--- .../controller/webc/MiniWalletController.java | 21 ++++- 10 files changed, 300 insertions(+), 79 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java new file mode 100644 index 000000000..a175c4bae --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillDTO.java @@ -0,0 +1,84 @@ +package com.cool.store.dto.wallet; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/14 10:31 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BillDTO { + + /** + * 业务系统付款单号(如 CRM 单号) + */ + private String reqNo; + + /** + * 交易Id(营帐通) + */ + private Long tradeId; + + /** + * 交易编号(扫呗) + */ + private String outTradeNo; + + /** + * 费用科目 + */ + private Integer feeItemId; + + /** + * 费用科目名称 + */ + private String feeItemName; + + /** + * 门店账户编号 + */ + private String storeAccountNo; + + /** + * 公司编号 + */ + private String companyCode; + + /** + * 公司账户编号 + */ + private String companyAccountNo; + + /** + * 提现银行卡 + */ + private String withdrawalBankCradNo; + + /** + * 提现银行卡户名 + */ + private String withdrawalBankCradName; + + /** + * 金额(元) + */ + private String amount; + + /** + * 交易状态 1.成功 2.失败 3.处理中 + */ + private Integer tradeStatus; + + /** + * 交易类型 1.转账 2.提现 + */ + private Integer tradeType; + + /** + * 交易发起时间 + */ + private String createTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java index d438734ef..88ad0fc8a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java @@ -1,76 +1,23 @@ package com.cool.store.dto.wallet; +import com.cool.store.request.wallet.WalletBasicPageInfo; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; +import java.util.List; + /** - * @Author suzhuhong - * @Date 2025/11/14 10:31 - * @Version 1.0 + *

+ * 交易列表DTO + *

+ * + * @author wangff + * @since 2025/11/17 */ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class BillPageDTO { + private List data; - /** - * 业务系统付款单号(如 CRM 单号) - */ - private String reqNo; - - /** - * 交易Id(营帐通) - */ - private Long tradeId; - - /** - * 交易编号(扫呗) - */ - private String outTradeNo; - - /** - * 交易科目 - */ - private Integer feeItemId; - - /** - * 门店账户编号 - */ - private String storeAccountNo; - - /** - * 公司编号 - */ - private String companyCode; - - /** - * 公司账户编号 - */ - private String companyAccountNo; - - /** - * 提现银行卡 - */ - private String withdrawalBankCradNo; - - /** - * 提现银行卡户名 - */ - private String withdrawalBankCradName; - - /** - * 金额(元) - */ - private String amount; - - /** - * 交易状态 1.成功 2.失败 3.处理中 - */ - private Integer tradeStatus; - - /** - * 交易类型 1.转账 2.提现 - */ - private Integer tradeType; - - + private WalletBasicPageInfo page; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java new file mode 100644 index 000000000..2e4146b51 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java @@ -0,0 +1,36 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * 交易流水查询Request + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountBillQueryRequest extends PageBasicInfo { + @ApiModelProperty("门店id") + private Long shopId; + + @ApiModelProperty("交易开始时间,不传查当月") + private Date beginDate; + + @ApiModelProperty("交易结束时间") + private Date endDate; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是") + private Integer isLegal; + + @ApiModelProperty(value = "交易类型: 0.全部,1.支出 2.收入") + private Integer recordType; + + @ApiModelProperty(value = "费用类型ID", required = true) + private Long feeItemId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java index 82e310576..faefbde98 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java @@ -1,7 +1,10 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * @Author suzhuhong @@ -9,6 +12,9 @@ import lombok.Data; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class BillPageRequest { @ApiModelProperty(value = "门店ID", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java new file mode 100644 index 000000000..836758bf9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillListVO.java @@ -0,0 +1,40 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户交易列表VO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountBillListVO { + + @ApiModelProperty("交易Id(营帐通)") + private Long tradeId; + + @ApiModelProperty("交易编号(扫呗)") + private String outTradeNo; + + @ApiModelProperty("费用科目") + private Integer feeItemId; + + @ApiModelProperty("费用科目名称") + private String feeItemName; + + @ApiModelProperty("金额(元)") + private String amount; + + @ApiModelProperty("交易发起时间") + private String createTime; + + @ApiModelProperty("交易状态 1.成功 2.失败 3.处理中") + private Integer tradeStatus; + + @ApiModelProperty("交易类型 1.转账 2.提现") + private Integer tradeType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java new file mode 100644 index 000000000..c36bee76a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java @@ -0,0 +1,36 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户信息VO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountInfoVO { + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通") + private Integer accountStatus; + + @ApiModelProperty(value = "是否签约人账户 0 否 1 是") + private Integer isLegal; + + @ApiModelProperty(value = "账户编号") + private String accountNo; + + @ApiModelProperty(value = "账户名称") + private String accountName; + + @ApiModelProperty(value = "结算银行卡号") + private String accountCardNo; + + @ApiModelProperty(value = "开户支行名称") + private String bankName; + + @ApiModelProperty(value = "账户余额") + private String totalAmount; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index edbc36273..044604757 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -122,7 +122,7 @@ public class WalletApiService { * @return */ public WithDrawerDTO withdraw(WithDrawerRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/withdraw", request, WithDrawerDTO.class); + return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/withdrawer", request, WithDrawerDTO.class); } /** diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 33ea362d2..ac697fb22 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -2,9 +2,13 @@ package com.cool.store.service.wallet; import com.cool.store.request.wallet.*; import com.cool.store.vo.wallet.AccountAuthenticationVO; +import com.cool.store.vo.wallet.AccountBillListVO; +import com.cool.store.vo.wallet.AccountInfoVO; import com.cool.store.vo.wallet.BankVO; import com.github.pagehelper.PageInfo; +import java.util.List; + /** *

* 钱包 服务类 @@ -56,4 +60,18 @@ public interface WalletService { * @return */ Boolean addTagCallback(AddTagCallbackNoticeRequest request); + + /** + * 查询账户列表 + * @param request 钱包门店Request + * @return 账户信息VO列表 + */ + List getAccountList(WalletShopRequest request); + + /** + * 交易流水 + * @param request 交易流水查询Request + * @return 账户交易列表VO列表 + */ + PageInfo getBillPage(AccountBillQueryRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index eb793d1ae..05c158a11 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -1,5 +1,6 @@ package com.cool.store.service.wallet.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.RegionDao; @@ -15,7 +16,6 @@ import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.enums.wallet.BankAccountTypeEnum; import com.cool.store.enums.wallet.BankBusinessTypeEnum; -import com.cool.store.enums.wallet.PingAnAccountStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.ApplyLicenseMapper; import com.cool.store.request.wallet.*; @@ -23,6 +23,8 @@ import com.cool.store.service.wallet.WalletApiService; import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.BeanUtil; import com.cool.store.vo.wallet.AccountAuthenticationVO; +import com.cool.store.vo.wallet.AccountBillListVO; +import com.cool.store.vo.wallet.AccountInfoVO; import com.cool.store.vo.wallet.BankVO; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; @@ -31,7 +33,10 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.sql.Date; +import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -132,15 +137,16 @@ public class WalletServiceImpl implements WalletService { getBankRequest.setHeadName(request.getHeadName()); getBankRequest.setKeyword(request.getKeyword()); BankListDTO bankListDTO = walletApiService.getBankList(getBankRequest); - PageInfo result = new PageInfo<>(); - result.setPageNum(request.getPageNum()); - result.setPageSize(request.getPageSize()); - if (Objects.nonNull(bankListDTO)) { - WalletBasicPageInfo pageInfo = bankListDTO.getPage(); - result.setTotal(pageInfo.getTotal()); - result.setPages(pageInfo.getCount()); - result.setList(BeanUtil.toList(bankListDTO.getPageData(), BankVO.class)); - } + return toPageInfo(bankListDTO.getPageData(), BankVO.class, bankListDTO.getPage()); + } + + public static PageInfo toPageInfo(List list, Class clazz, WalletBasicPageInfo page) { + PageInfo result = new PageInfo<>(); + result.setPageNum(page.getCurrentPage()); + result.setPageSize(page.getPageSize()); + result.setPages(page.getCount()); + result.setTotal(page.getTotal()); + result.setList(CollectionUtils.isNotEmpty(list) ? BeanUtil.toList(list, clazz) : Collections.emptyList()); return result; } @@ -185,6 +191,41 @@ public class WalletServiceImpl implements WalletService { return Boolean.TRUE; } + @Override + public List getAccountList(WalletShopRequest request) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(shopInfo.getStoreId())); + return BeanUtil.toList(accountInfo, AccountInfoVO.class); + } + + @Override + public PageInfo getBillPage(AccountBillQueryRequest request) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + LocalDate now = LocalDate.now(); + if (Objects.isNull(request.getBeginDate()) || Objects.isNull(request.getEndDate())) { + request.setBeginDate(Date.valueOf(now.withDayOfMonth(1))); + request.setEndDate(Date.valueOf(now)); + } + BillPageRequest billPageRequest = BillPageRequest.builder() + .outStoreId(shopInfo.getStoreId()) + .beginDate(DateUtil.format(request.getBeginDate(), "yyyy-MM-dd HH:mm:ss")) + .endDate(DateUtil.format(request.getEndDate(), "yyyy-MM-dd HH:mm:ss")) + .walletType(CommonConstants.INDEX_ONE.equals(request.getIsLegal()) ? 2 : 1) + .recordType(request.getRecordType()) + .feeItemId(request.getFeeItemId()) + .currentPage(request.getPageNum()) + .pageSize(request.getPageSize()) + .build(); + BillPageDTO billPage = walletApiService.getBillPage(billPageRequest); + return toPageInfo(billPage.getData(), AccountBillListVO.class, billPage.getPage()); + } + /** * 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态 */ diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index b0e18f71a..2b57ceb68 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -1,12 +1,11 @@ package com.cool.store.controller.webc; -import com.cool.store.request.wallet.AccountCreateRequest; -import com.cool.store.request.wallet.AccountOpenRequest; -import com.cool.store.request.wallet.BankListRequest; -import com.cool.store.request.wallet.WalletShopRequest; +import com.cool.store.request.wallet.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; import com.cool.store.vo.wallet.AccountAuthenticationVO; +import com.cool.store.vo.wallet.AccountBillListVO; +import com.cool.store.vo.wallet.AccountInfoVO; import com.cool.store.vo.wallet.BankVO; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; @@ -15,6 +14,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** *

* Mini钱包 前端控制器 @@ -53,4 +54,16 @@ public class MiniWalletController { public ResponseResult> getBankList(@RequestBody BankListRequest request) { return ResponseResult.success(walletService.getBankList(request)); } + + @ApiOperation("账户列表") + @GetMapping("/accountList") + public ResponseResult> getAccountList(@RequestBody WalletShopRequest request) { + return ResponseResult.success(walletService.getAccountList(request)); + } + + @ApiOperation("账户流水") + @GetMapping("/billPage") + public ResponseResult> getBillPage(@RequestBody AccountBillQueryRequest request) { + return ResponseResult.success(walletService.getBillPage(request)); + } } From 0d882ff79ae5432be857319f3d676e2b14ba1d5e Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 09:17:45 +0800 Subject: [PATCH 042/109] =?UTF-8?q?fix:=E8=B4=A6=E6=88=B7=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E3=80=81=E5=AF=86=E7=A0=81=E6=9B=B4=E6=96=B0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/wallet/WalletLargePaymentDAO.java | 21 +++++++++ .../cool/store/dto/wallet/AccountInfoDTO.java | 2 +- .../wallet/AccountPasswordRequest.java | 34 ++++++++++++++ .../request/wallet/AccountPaymentRequest.java | 21 +++++++++ .../request/wallet/LargePaymentRequest.java | 4 ++ .../request/wallet/StoreShopRequest.java | 21 +++++++++ .../store/vo/wallet/AccountPaymentVO.java | 31 ++++++++++++ .../store/service/wallet/WalletService.java | 23 ++++++--- .../wallet/impl/WalletServiceImpl.java | 47 +++++++++++++++---- .../controller/webc/MiniWalletController.java | 2 +- 10 files changed, 188 insertions(+), 18 deletions(-) create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java new file mode 100644 index 000000000..b6a7b8b22 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java @@ -0,0 +1,21 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.mapper.wallet.WalletLargePaymentMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + *

+ * 钱包大额支付DAO + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Repository +@RequiredArgsConstructor +public class WalletLargePaymentDAO { + private final WalletLargePaymentMapper walletLargePaymentMapper; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index b43e4babd..1d554a9c3 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -16,7 +16,7 @@ import lombok.Data; public class AccountInfoDTO { @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) - private String accountType; + private Integer accountType; @ApiModelProperty(value = "营业执照号码") private String licenseNo; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java new file mode 100644 index 000000000..ad069da88 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java @@ -0,0 +1,34 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 账户密码维护Request + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountPasswordRequest extends StoreShopRequest { + + @ApiModelProperty("维护类型 1.设置密码 2.修改密码") + @NotNull(message = "维护类型不能为空") + private Integer upholdType; + + @ApiModelProperty("新支付密码(sm3加密后字符串)") + @NotNull(message = "新支付密码不能为空") + private String newPayPwd; + + @ApiModelProperty("确认新支付密码(sm3加密后字符串)") + @NotNull(message = "确认新支付密码不能为空") + private String confirmPayPwd; + + @ApiModelProperty("当前使用的支付密码(sm3加密后字符串),维护类型为修改密码时必填") + @NotNull(message = "当前使用的支付密码不能为空") + private String currentPayPwd; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java new file mode 100644 index 000000000..e8ab99b32 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Pattern; + +/** + *

+ * 账户充值Request + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountPaymentRequest extends StoreShopRequest { + @ApiModelProperty(value = "支付金额") + @Pattern(regexp = "^\\d+(\\.\\d{1,2})?$", message = "金额格式不正确") + private String amount; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java index 6038e7964..344d60c6f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentRequest.java @@ -1,7 +1,9 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @Author suzhuhong @@ -9,6 +11,8 @@ import lombok.Data; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class LargePaymentRequest { @ApiModelProperty(value = "商户门店编号",required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java new file mode 100644 index 000000000..ef7450aa2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 门店idRequest + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class StoreShopRequest { + @ApiModelProperty("门店id") + private Long shopId; + + @ApiModelProperty("门店id,两者取一") + private String storeId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java new file mode 100644 index 000000000..9991399b6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java @@ -0,0 +1,31 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户充值VO + *

+ * + * @author wangff + * @since 2025/11/17 + */ +@Data +public class AccountPaymentVO { + + @ApiModelProperty(value = "收款账号", required = true) + private String payeeAccNo; + + @ApiModelProperty(value = "收款账户名称", required = true) + private String payeeAccName; + + @ApiModelProperty(value = "收款银行名称", required = true) + private String payeeBankName; + + @ApiModelProperty(value = "账号过期时间") + private String expireTime; + + @ApiModelProperty("过期倒计时(秒)") + private Long expiryCountdown; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index ac697fb22..0593bcd66 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -1,10 +1,7 @@ package com.cool.store.service.wallet; import com.cool.store.request.wallet.*; -import com.cool.store.vo.wallet.AccountAuthenticationVO; -import com.cool.store.vo.wallet.AccountBillListVO; -import com.cool.store.vo.wallet.AccountInfoVO; -import com.cool.store.vo.wallet.BankVO; +import com.cool.store.vo.wallet.*; import com.github.pagehelper.PageInfo; import java.util.List; @@ -63,10 +60,10 @@ public interface WalletService { /** * 查询账户列表 - * @param request 钱包门店Request + * @param request 门店idRequest * @return 账户信息VO列表 */ - List getAccountList(WalletShopRequest request); + List getAccountList(StoreShopRequest request); /** * 交易流水 @@ -74,4 +71,18 @@ public interface WalletService { * @return 账户交易列表VO列表 */ PageInfo getBillPage(AccountBillQueryRequest request); + + /** + * 密码维护 + * @param request 账户密码维护Request + * @return 是否成功 + */ + Boolean passwordUpdate(AccountPasswordRequest request); + + /** + * 账户充值 + * @param request 账户充值Request + * @return 账户充值VO + */ + AccountPaymentVO payment(AccountPaymentRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 05c158a11..fefd0cde8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -6,6 +6,7 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.dao.RegionDao; import com.cool.store.dao.ShopInfoDAO; import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dao.wallet.WalletLargePaymentDAO; import com.cool.store.dto.wallet.*; import com.cool.store.entity.LicenseTransactDO; import com.cool.store.entity.RegionDO; @@ -22,10 +23,8 @@ import com.cool.store.request.wallet.*; import com.cool.store.service.wallet.WalletApiService; import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.BeanUtil; -import com.cool.store.vo.wallet.AccountAuthenticationVO; -import com.cool.store.vo.wallet.AccountBillListVO; -import com.cool.store.vo.wallet.AccountInfoVO; -import com.cool.store.vo.wallet.BankVO; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.wallet.*; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -57,6 +56,7 @@ public class WalletServiceImpl implements WalletService { private final ApplyLicenseMapper applyLicenseMapper; private final WalletApiService walletApiService; private final RegionDao regionDao; + private final WalletLargePaymentDAO walletLargePaymentDAO; @Override public Boolean accountCreate(AccountCreateRequest request) { @@ -192,12 +192,9 @@ public class WalletServiceImpl implements WalletService { } @Override - public List getAccountList(WalletShopRequest request) { - ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); - if (Objects.isNull(shopInfo)) { - throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); - } - List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(shopInfo.getStoreId())); + public List getAccountList(StoreShopRequest request) { + String storeId = getStoreId(request); + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); return BeanUtil.toList(accountInfo, AccountInfoVO.class); } @@ -226,6 +223,36 @@ public class WalletServiceImpl implements WalletService { return toPageInfo(billPage.getData(), AccountBillListVO.class, billPage.getPage()); } + @Override + public Boolean passwordUpdate(AccountPasswordRequest request) { + String storeId = getStoreId(request); + UpdatePasswordRequest passwordRequest = BeanUtil.toBean(request, UpdatePasswordRequest.class); + passwordRequest.setOutStoreId(storeId); + walletApiService.upholdPwd(passwordRequest); + return true; + } + + @Override + public AccountPaymentVO payment(AccountPaymentRequest request) { + String storeId = getStoreId(request); + String paymentId = UUIDUtils.get32UUID(); +// new LargePaymentRequest(storeId, paymentId, "", request.getAmount()); + + return null; + } + + public String getStoreId(StoreShopRequest request) { + String storeId = request.getStoreId(); + if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + storeId = Objects.nonNull(shopInfo) ? shopInfo.getStoreId() : null; + } + if (StringUtils.isBlank(storeId)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + return storeId; + } + /** * 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态 */ diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 2b57ceb68..8fa1d89d8 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -57,7 +57,7 @@ public class MiniWalletController { @ApiOperation("账户列表") @GetMapping("/accountList") - public ResponseResult> getAccountList(@RequestBody WalletShopRequest request) { + public ResponseResult> getAccountList(@RequestBody StoreShopRequest request) { return ResponseResult.success(walletService.getAccountList(request)); } From d1e045a72f21be1f6db1595e5f450f22928a41b8 Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 09:18:41 +0800 Subject: [PATCH 043/109] =?UTF-8?q?fix:=E5=A4=A7=E9=A2=9D=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=AE=A2=E5=8D=95=E6=B5=81=E6=B0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallet/WalletLargePaymentMapper.java | 7 +++ .../wallet/WalletLargePaymentMapper.xml | 17 +++++ .../entity/wallet/WalletLargePaymentDO.java | 62 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java new file mode 100644 index 000000000..2ba9bcb02 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.WalletLargePaymentDO; +import tk.mybatis.mapper.common.Mapper; + +public interface WalletLargePaymentMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml new file mode 100644 index 000000000..8da4bac12 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java new file mode 100644 index 000000000..ef0c535fa --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java @@ -0,0 +1,62 @@ +package com.cool.store.entity.wallet; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.*; + +/** + * 钱包大额支付订单 + */ +@Table(name = "zxjp_wallet_large_payment") +@Data +public class WalletLargePaymentDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 门店id + */ + @Column(name = "store_id") + private String storeId; + + /** + * 预支付id + */ + @Column(name = "payment_id") + private String paymentId; + + /** + * 金额 + */ + private BigDecimal amount; + + /** + * 过期时间 + */ + @Column(name = "expire_time") + private String expireTime; + + /** + * 订单状态:1-成功 2-失败 3-支付中 4-撤销 + */ + @Column(name = "order_status") + private Boolean orderStatus; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; +} \ No newline at end of file From 579bef59cdd24f1cafa2a98f94704b5d09d26c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Tue, 18 Nov 2025 10:28:47 +0800 Subject: [PATCH 044/109] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/dto/wallet/AccountPageDTO.java | 20 ++++++++ .../wallet/AccountBatchQueryRequest.java | 27 +++++++++++ .../wallet/AccountTradeCallbackRequest.java | 29 ++++++++++++ .../service/wallet/WalletApiService.java | 46 ++++++++++++------- .../store/service/wallet/WalletService.java | 15 ++++++ .../wallet/impl/WalletServiceImpl.java | 10 ++++ .../controller/webb/OpenApiController.java | 15 ++++++ .../controller/webb/PCTestController.java | 7 ++- .../main/resources/application-ab.properties | 2 +- .../resources/application-local.properties | 1 + .../resources/application-test.properties | 2 +- 11 files changed, 154 insertions(+), 20 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java new file mode 100644 index 000000000..36239e94d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountPageDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/18 10:12 + * @Version 1.0 + */ +@Data +public class AccountPageDTO { + + private List pageData; + + private WalletBasicPageInfo page; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java new file mode 100644 index 000000000..2a9709444 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 10:02 + * @Version 1.0 + */ +@Data +public class AccountBatchQueryRequest { + + @ApiModelProperty(value = "关键字(门店编号、门店名称、账户名称、账户别名)") + private String keyword; + + @ApiModelProperty(value = "账户状态 1 待提交 2 待鉴权 3 鉴权中 4开通 账户状态") + private Integer accountStatus; + + @ApiModelProperty(value = "工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty(value = "分页信息",required = true) + private WalletBasicPageInfo page; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java new file mode 100644 index 000000000..fc96b9683 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountTradeCallbackRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 9:36 + * @Version 1.0 + */ +@Data +public class AccountTradeCallbackRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "业务系统付款单号(如 CRM 单号)", required = true) + private String reqNo; + @ApiModelProperty(name = "交易Id", required = true) + private Long tradeId; + @ApiModelProperty(name = "交易编号", required = true) + private String outTTradeNo; + @ApiModelProperty(name = "金额(元)", required = true) + private String amount; + @ApiModelProperty(name = "交易状态1.成功 2.失败 3.处理中", required = true) + private Integer tradeStatus; + @ApiModelProperty(name = "1.转账2.提现", required = true) + private Integer tradeType; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index 044604757..3d9a298b6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -5,6 +5,7 @@ import com.cool.store.dto.wallet.*; import com.cool.store.http.WalletHttpClientRest; import com.cool.store.request.wallet.*; import com.cool.store.utils.StringUtil; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -21,13 +22,16 @@ public class WalletApiService { @Resource WalletHttpClientRest walletHttpClientRest; + @Value("${wallet.url}") + private String walletBaseUrl; + /** * 在平安扫呗系统中,创建签约人账户 * @param request * @return */ public StoreAccountDTO createStoreAndAccount(CreateStoreAndAccountRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/createStoreAndAccount", request, StoreAccountDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/createStoreAndAccount", request, StoreAccountDTO.class); } /** @@ -36,7 +40,7 @@ public class WalletApiService { * @return */ public StoreAccountDTO updateStoreAccount(UpdateStoreAccountRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/updateStoreAccount", request, StoreAccountDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/updateStoreAccount", request, StoreAccountDTO.class); } /** @@ -45,7 +49,7 @@ public class WalletApiService { * @return */ public AccountNoDTO createStore(CreateStoreRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/v1/createStoreAndAccount", request, AccountNoDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/v1/createStoreAndAccount", request, AccountNoDTO.class); } /** @@ -54,7 +58,7 @@ public class WalletApiService { * @return */ public AccountAuthenticationDTO authentication(OutStoreIdRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/authentication", request, AccountAuthenticationDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/authentication", request, AccountAuthenticationDTO.class); } /** @@ -63,7 +67,7 @@ public class WalletApiService { * @return */ public AccountVerifyDTO openAccount(AccountVerifyRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/openAccount", request, AccountVerifyDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/openAccount", request, AccountVerifyDTO.class); } /** @@ -72,7 +76,7 @@ public class WalletApiService { * @return */ public AddTagDTO addTag(AccountAddTagRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/addTag", request, AddTagDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/addTag", request, AddTagDTO.class); } /** @@ -81,7 +85,7 @@ public class WalletApiService { * @return */ public List getAccountInfo(OutStoreIdRequest request){ - String accountInfoStr = walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/queryAccountInfo", request, String.class); + String accountInfoStr = walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/queryAccountInfo", request, String.class); if (StringUtil.isNotEmpty(accountInfoStr)){ return JSONObject.parseArray(accountInfoStr, AccountInfoDTO.class); } @@ -94,7 +98,7 @@ public class WalletApiService { * @return */ public LargePaymentDTO largePayment(LargePaymentRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/largePayment", request, LargePaymentDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/largePayment", request, LargePaymentDTO.class); } /** @@ -103,7 +107,7 @@ public class WalletApiService { * @return */ public PaymentDTO largePaymentQuery(PaymentDetailRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/largePaymentQuery", request, PaymentDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/largePaymentQuery", request, PaymentDTO.class); } /** @@ -112,7 +116,7 @@ public class WalletApiService { * @return */ public TransferDTO transfer(TransferRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/transfer", request, TransferDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/transfer", request, TransferDTO.class); } @@ -122,7 +126,7 @@ public class WalletApiService { * @return */ public WithDrawerDTO withdraw(WithDrawerRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/withdrawer", request, WithDrawerDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/withdrawer", request, WithDrawerDTO.class); } /** @@ -131,7 +135,7 @@ public class WalletApiService { * @return */ public BillDetailDTO getBillDetail(BillDetailRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/billDetail", request, BillDetailDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/billDetail", request, BillDetailDTO.class); } /** @@ -140,7 +144,7 @@ public class WalletApiService { * @return */ public BillPageDTO getBillPage(BillPageRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/trans/v1/billPage", request, BillPageDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/billPage", request, BillPageDTO.class); } /** @@ -149,7 +153,7 @@ public class WalletApiService { * @return */ public CompanyListDTO getCompanyInfo(FindPageCompanyRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/base/v1/findPageCompany", request, CompanyListDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/base/v1/findPageCompany", request, CompanyListDTO.class); } /** @@ -158,7 +162,7 @@ public class WalletApiService { * @return */ public BankListDTO getBankList(GetBankRequest request) { - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/base/v1/findPageBank", request, BankListDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/base/v1/findPageBank", request, BankListDTO.class); } /** @@ -167,11 +171,19 @@ public class WalletApiService { * @return */ public String upholdPwd(UpdatePasswordRequest request){ - return walletHttpClientRest.postWithSign("https://api.dev.wenmatech.com:443/open/crm/account/v1/upholdPwd", request, String.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/upholdPwd", request, String.class); + } + + /** + * 获取账户列表信息 + * @param request + * @return + */ + public AccountPageDTO getAccountList(AccountBatchQueryRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/findAccountPage", request, AccountPageDTO.class); } - } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 0593bcd66..3133fd01a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -1,5 +1,6 @@ package com.cool.store.service.wallet; +import com.cool.store.dto.wallet.PaymentDTO; import com.cool.store.request.wallet.*; import com.cool.store.vo.wallet.*; import com.github.pagehelper.PageInfo; @@ -58,6 +59,20 @@ public interface WalletService { */ Boolean addTagCallback(AddTagCallbackNoticeRequest request); + /** + * 大额充值 回调接口 + * @param request + * @return + */ + Boolean largePaymentCallback(PaymentDTO request); + + /** + * 账户交易回调 + * @param request + * @return + */ + Boolean accountTradeCallback(AccountTradeCallbackRequest request); + /** * 查询账户列表 * @param request 门店idRequest diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index fefd0cde8..edb46b312 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -191,6 +191,16 @@ public class WalletServiceImpl implements WalletService { return Boolean.TRUE; } + @Override + public Boolean largePaymentCallback(PaymentDTO request) { + return Boolean.TRUE; + } + + @Override + public Boolean accountTradeCallback(AccountTradeCallbackRequest request) { + return Boolean.TRUE; + } + @Override public List getAccountList(StoreShopRequest request) { String storeId = getStoreId(request); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java index 67d6493c0..8df5ffb08 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.context.PartnerUserHolder; import com.cool.store.dto.*; import com.cool.store.dto.store.StoreUserPositionDTO; +import com.cool.store.dto.wallet.PaymentDTO; import com.cool.store.dto.wx.MiniProgramFreeLoginDTO; import com.cool.store.handler.WeChatHandler; import com.cool.store.request.OpenApiStoreRequest; @@ -11,6 +12,7 @@ import com.cool.store.request.StoreCodeDTO; import com.cool.store.request.*; import com.cool.store.request.notice.ThirdHandleMessageRequest; import com.cool.store.request.notice.ThirdMatterRequest; +import com.cool.store.request.wallet.AccountTradeCallbackRequest; import com.cool.store.request.wallet.AddTagCallbackNoticeRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.ReceiptCallBackRequest; @@ -224,4 +226,17 @@ public class OpenApiController { public ApiResponse addTagCallback(@RequestBody @Validated AddTagCallbackNoticeRequest request) { return ApiResponse.successByWallet(walletService.addTagCallback(request)); } + + @ApiOperation("大额充值通知接口") + @PostMapping("/wallet/largePaymentCallback") + public ApiResponse largePaymentCallback(@RequestBody @Validated PaymentDTO request) { + return ApiResponse.successByWallet(walletService.largePaymentCallback(request)); + } + + @ApiOperation("大额充值通知接口") + @PostMapping("/wallet/accountTradeCallback") + public ApiResponse accountTradeCallback(@RequestBody @Validated AccountTradeCallbackRequest request) { + return ApiResponse.successByWallet(walletService.accountTradeCallback(request)); + } + } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index 5e54d41f3..33eeab3b1 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -816,7 +816,12 @@ public class PCTestController { } - + @ApiOperation("获取账户列表信息") + @PostMapping("/getAccountList") + public ResponseResult getAccountList(@RequestBody AccountBatchQueryRequest request) { + AccountPageDTO accountList = walletApiService.getAccountList(request); + return ResponseResult.success(accountList); + } diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index 8822f629d..50d0d4588 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -157,7 +157,7 @@ huoMa.franchise.stores.password = Huoma@123456. huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. - +wallet.url=https://api.dev.wenmatech.com:443 cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-local.properties b/coolstore-partner-web/src/main/resources/application-local.properties index 61008e74f..1aee75427 100644 --- a/coolstore-partner-web/src/main/resources/application-local.properties +++ b/coolstore-partner-web/src/main/resources/application-local.properties @@ -143,6 +143,7 @@ hqt.token.grant_type=client_credentials hqt.token.client.id=WrPffdGpcWkcPsbN hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD +wallet.url=https://api.dev.wenmatech.com:443 cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index f44ebe092..58c29ec48 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -170,7 +170,7 @@ huoMa.franchise.stores.password = Huoma@123456. huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. - +wallet.url=https://api.dev.wenmatech.com:443 cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB From f983c8a92d8fc0c1e05e0358305aae2b633dae86 Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 11:29:42 +0800 Subject: [PATCH 045/109] =?UTF-8?q?fix:=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AF=86=E7=A0=81=E4=BF=AE=E6=94=B9=E3=80=81?= =?UTF-8?q?=E5=85=85=E5=80=BC=E3=80=81=E5=85=85=E5=80=BC=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E3=80=81=E6=8F=90=E7=8E=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../java/com/cool/store/dao/ShopInfoDAO.java | 7 ++ .../dao/wallet/WalletLargePaymentDAO.java | 21 ---- .../dao/wallet/WalletPaymentOrderDAO.java | 40 ++++++++ .../wallet/WalletLargePaymentMapper.java | 7 -- .../wallet/WalletPaymentOrderMapper.java | 7 ++ ...apper.xml => WalletPaymentOrderMapper.xml} | 5 +- ...ymentDO.java => WalletPaymentOrderDO.java} | 20 +++- .../wallet/AccountPasswordRequest.java | 1 - .../request/wallet/AccountPaymentRequest.java | 8 +- .../wallet/LargePaymentQueryRequest.java | 21 ++++ .../wallet/WalletWithDrawerRequest.java | 30 ++++++ .../request/wallet/WithDrawerRequest.java | 4 + .../store/vo/wallet/AccountPaymentVO.java | 3 - .../store/vo/wallet/WalletPaymentOrderVO.java | 30 ++++++ .../store/service/wallet/WalletService.java | 21 ++++ .../wallet/impl/WalletServiceImpl.java | 98 +++++++++++++++++-- .../controller/webc/MiniWalletController.java | 36 ++++++- 18 files changed, 306 insertions(+), 54 deletions(-) delete mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java delete mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java rename coolstore-partner-dao/src/main/resources/mapper/wallet/{WalletLargePaymentMapper.xml => WalletPaymentOrderMapper.xml} (83%) rename coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/{WalletLargePaymentDO.java => WalletPaymentOrderDO.java} (71%) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index b2b5ee840..5068cb4b2 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -316,6 +316,7 @@ public enum ErrorCodeEnum { STORE_NOT_FIND(1610013,"门店不存在",null), WALLET_OPEN_ACCOUNT_FAIL(1620001,"钱包开通失败",null), + WALLET_WITH_DRAWER_FAIL(1620002,"提现失败",null), ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java index c10400783..e3c9bff3a 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -72,6 +72,13 @@ public class ShopInfoDAO { return shopInfo; } + public ShopInfoDO getShopInfoByStoreId(String storeId) { + ShopInfoDO shopInfoDO = new ShopInfoDO(); + shopInfoDO.setStoreId(storeId); + shopInfoDO.setDeleted(false); + return shopInfoMapper.selectOne(shopInfoDO); + } + public List getShopList(Long lineId){ if(Objects.isNull(lineId)){ return new ArrayList<>(); diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java deleted file mode 100644 index b6a7b8b22..000000000 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletLargePaymentDAO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.cool.store.dao.wallet; - -import com.cool.store.mapper.wallet.WalletLargePaymentMapper; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -/** - *

- * 钱包大额支付DAO - *

- * - * @author wangff - * @since 2025/11/18 - */ -@Repository -@RequiredArgsConstructor -public class WalletLargePaymentDAO { - private final WalletLargePaymentMapper walletLargePaymentMapper; - - -} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java new file mode 100644 index 000000000..603714210 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java @@ -0,0 +1,40 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.WalletPaymentOrderDO; +import com.cool.store.mapper.wallet.WalletPaymentOrderMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.List; + +/** + *

+ * 钱包大额支付DAO + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Repository +@RequiredArgsConstructor +public class WalletPaymentOrderDAO { + private final WalletPaymentOrderMapper walletPaymentOrderMapper; + + public void insertSelective(WalletPaymentOrderDO walletPaymentOrderDO) { + walletPaymentOrderMapper.insertSelective(walletPaymentOrderDO); + } + + /** + * 查询未支付的充值订单 + */ + public List getNonPaymentList(String storeId) { + Example example = new Example(WalletPaymentOrderDO.class); + example.createCriteria() + .andEqualTo("storeId", storeId) + .andEqualTo("orderStatus", 3) + .andEqualTo("type", 0); + example.setOrderByClause("create_time DESC"); + return walletPaymentOrderMapper.selectByExample(example); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java deleted file mode 100644 index 2ba9bcb02..000000000 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletLargePaymentMapper.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.cool.store.mapper.wallet; - -import com.cool.store.entity.wallet.WalletLargePaymentDO; -import tk.mybatis.mapper.common.Mapper; - -public interface WalletLargePaymentMapper extends Mapper { -} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java new file mode 100644 index 000000000..774abb085 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/WalletPaymentOrderMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.WalletPaymentOrderDO; +import tk.mybatis.mapper.common.Mapper; + +public interface WalletPaymentOrderMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletPaymentOrderMapper.xml similarity index 83% rename from coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml rename to coolstore-partner-dao/src/main/resources/mapper/wallet/WalletPaymentOrderMapper.xml index 8da4bac12..ea5ed9ece 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletLargePaymentMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/WalletPaymentOrderMapper.xml @@ -1,13 +1,14 @@ - - + + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletPaymentOrderDO.java similarity index 71% rename from coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java rename to coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletPaymentOrderDO.java index ef0c535fa..11f192489 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletLargePaymentDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/WalletPaymentOrderDO.java @@ -1,17 +1,23 @@ package com.cool.store.entity.wallet; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.Date; import javax.persistence.*; /** - * 钱包大额支付订单 + * 钱包支付订单 */ -@Table(name = "zxjp_wallet_large_payment") +@Table(name = "zxjp_wallet_payment_order") @Data -public class WalletLargePaymentDO { +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class WalletPaymentOrderDO { /** * id */ @@ -31,6 +37,12 @@ public class WalletLargePaymentDO { @Column(name = "payment_id") private String paymentId; + /** + * 订单类型,0充值 1提现 + */ + @Column(name = "type") + private Integer type; + /** * 金额 */ @@ -46,7 +58,7 @@ public class WalletLargePaymentDO { * 订单状态:1-成功 2-失败 3-支付中 4-撤销 */ @Column(name = "order_status") - private Boolean orderStatus; + private Integer orderStatus; /** * 创建时间 diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java index ad069da88..42ac0fe68 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPasswordRequest.java @@ -29,6 +29,5 @@ public class AccountPasswordRequest extends StoreShopRequest { private String confirmPayPwd; @ApiModelProperty("当前使用的支付密码(sm3加密后字符串),维护类型为修改密码时必填") - @NotNull(message = "当前使用的支付密码不能为空") private String currentPayPwd; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java index e8ab99b32..76fb33d0c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountPaymentRequest.java @@ -3,7 +3,8 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.Pattern; +import javax.validation.constraints.Digits; +import java.math.BigDecimal; /** *

@@ -16,6 +17,7 @@ import javax.validation.constraints.Pattern; @Data public class AccountPaymentRequest extends StoreShopRequest { @ApiModelProperty(value = "支付金额") - @Pattern(regexp = "^\\d+(\\.\\d{1,2})?$", message = "金额格式不正确") - private String amount; + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + private BigDecimal amount; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java new file mode 100644 index 000000000..182e297f4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/LargePaymentQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 大额支付订单查询Request + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Data +public class LargePaymentQueryRequest extends StoreShopRequest { + @ApiModelProperty("页码") + private Integer pageNum = 1; + + @ApiModelProperty("页数量") + private Integer pageSize = 10; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java new file mode 100644 index 000000000..509dec55f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Digits; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + *

+ * 钱包提现Request + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Data +public class WalletWithDrawerRequest extends StoreShopRequest { + @ApiModelProperty("提现金额") + @Digits(integer = 10, fraction = 2, message = "金额整数位最多10位,小数位最多2位") + @NotNull(message = "提现金额不能为空") + private BigDecimal amount; + + @ApiModelProperty("支付密码(sm3加密后字符串)") + @NotBlank(message = "支付密码不能为空") + private String payPwd; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java index ef0f65ace..97786ec27 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java @@ -1,7 +1,9 @@ package com.cool.store.request.wallet; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @Author suzhuhong @@ -9,6 +11,8 @@ import lombok.Data; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class WithDrawerRequest { @ApiModelProperty(value = "门店ID") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java index 9991399b6..519046904 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountPaymentVO.java @@ -22,9 +22,6 @@ public class AccountPaymentVO { @ApiModelProperty(value = "收款银行名称", required = true) private String payeeBankName; - - @ApiModelProperty(value = "账号过期时间") - private String expireTime; @ApiModelProperty("过期倒计时(秒)") private Long expiryCountdown; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java new file mode 100644 index 000000000..cc03ef2cf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/WalletPaymentOrderVO.java @@ -0,0 +1,30 @@ +package com.cool.store.vo.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 钱包支付订单VO + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Data +public class WalletPaymentOrderVO { + @ApiModelProperty("预支付id") + private String paymentId; + + @ApiModelProperty("金额") + private BigDecimal amount; + + @ApiModelProperty("订单状态:1-成功 2-失败 3-支付中 4-撤销") + private Integer orderStatus; + + @ApiModelProperty("创建时间") + private Date createTime; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 0593bcd66..776dc7397 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -85,4 +85,25 @@ public interface WalletService { * @return 账户充值VO */ AccountPaymentVO payment(AccountPaymentRequest request); + + /** + * 未完成充值订单查询 + * @param request 查询request + * @return 钱包支付订单VO列表 + */ + PageInfo nonPaymentOrderPage(LargePaymentQueryRequest request); + + /** + * 根据预支付id查询收款账户详情 + * @param paymentId 预支付id + * @return 账户充值VO + */ + AccountPaymentVO paymentDetail(String paymentId); + + /** + * 提现 + * @param request 钱包提现Request + * @return 是否成功 + */ + Boolean withDrawer(WalletWithDrawerRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index fefd0cde8..3c0cd0de8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -3,15 +3,14 @@ package com.cool.store.service.wallet.impl; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.LineInfoDAO; import com.cool.store.dao.RegionDao; import com.cool.store.dao.ShopInfoDAO; import com.cool.store.dao.ShopStageInfoDAO; -import com.cool.store.dao.wallet.WalletLargePaymentDAO; +import com.cool.store.dao.wallet.WalletPaymentOrderDAO; import com.cool.store.dto.wallet.*; -import com.cool.store.entity.LicenseTransactDO; -import com.cool.store.entity.RegionDO; -import com.cool.store.entity.ShopInfoDO; -import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.entity.*; +import com.cool.store.entity.wallet.WalletPaymentOrderDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; @@ -25,6 +24,7 @@ import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.BeanUtil; import com.cool.store.utils.UUIDUtils; import com.cool.store.vo.wallet.*; +import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,8 +32,12 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.sql.Date; +import java.time.Duration; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -56,7 +60,10 @@ public class WalletServiceImpl implements WalletService { private final ApplyLicenseMapper applyLicenseMapper; private final WalletApiService walletApiService; private final RegionDao regionDao; - private final WalletLargePaymentDAO walletLargePaymentDAO; + private final WalletPaymentOrderDAO walletPaymentOrderDAO; + private final LineInfoDAO lineInfoDAO; + + private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Override public Boolean accountCreate(AccountCreateRequest request) { @@ -234,11 +241,84 @@ public class WalletServiceImpl implements WalletService { @Override public AccountPaymentVO payment(AccountPaymentRequest request) { - String storeId = getStoreId(request); + ShopInfoDO shopInfo = null; + if (Objects.nonNull(request.getShopId())) { + shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + } else if (StringUtils.isNotBlank(request.getStoreId())) { + shopInfo = shopInfoDAO.getShopInfoByStoreId(request.getStoreId()); + } + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + String storeId = shopInfo.getStoreId(); + LineInfoDO lineInfo = lineInfoDAO.getByPartnerId(shopInfo.getPartnerId()); + if (Objects.isNull(lineInfo)) { + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } String paymentId = UUIDUtils.get32UUID(); -// new LargePaymentRequest(storeId, paymentId, "", request.getAmount()); + LargePaymentRequest paymentRequest = new LargePaymentRequest(storeId, paymentId, lineInfo.getUsername(), request.getAmount().toString()); + LargePaymentDTO resultDTO = walletApiService.largePayment(paymentRequest); - return null; + long expiryCountdown = 0; + if (StringUtils.isNotBlank(resultDTO.getExpireTime())) { + expiryCountdown = Math.max(0, Duration.between(LocalDateTime.now(), LocalDateTime.parse(resultDTO.getExpireTime(), formatter)).getSeconds()); + } + WalletPaymentOrderDO orderDO = WalletPaymentOrderDO.builder() + .storeId(storeId) + .paymentId(paymentId) + .type(0) + .amount(request.getAmount()) + .expireTime(resultDTO.getExpireTime()) + .orderStatus(3) + .build(); + walletPaymentOrderDAO.insertSelective(orderDO); + AccountPaymentVO result = BeanUtil.toBean(resultDTO, AccountPaymentVO.class); + result.setExpiryCountdown(expiryCountdown); + return result; + } + + @Override + public PageInfo nonPaymentOrderPage(LargePaymentQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + String storeId = getStoreId(request); + List list = walletPaymentOrderDAO.getNonPaymentList(storeId); + PageInfo page = new PageInfo<>(list); + return BeanUtil.toPage(page, WalletPaymentOrderVO.class); + } + + @Override + public AccountPaymentVO paymentDetail(String paymentId) { + PaymentDetailRequest request = new PaymentDetailRequest(); + request.setPaymentId(paymentId); + PaymentDTO resultDTO = walletApiService.largePaymentQuery(request); + + long expiryCountdown = 0; + if (StringUtils.isNotBlank(resultDTO.getExpireTime())) { + expiryCountdown = Math.max(0, Duration.between(LocalDateTime.now(), LocalDateTime.parse(resultDTO.getExpireTime(), formatter)).getSeconds()); + } + AccountPaymentVO result = BeanUtil.toBean(resultDTO, AccountPaymentVO.class); + result.setExpiryCountdown(expiryCountdown); + return result; + } + + @Override + public Boolean withDrawer(WalletWithDrawerRequest request) { + String storeId = getStoreId(request); + String reqNo = UUIDUtils.get32UUID(); + WithDrawerRequest withDrawerRequest = new WithDrawerRequest(storeId, request.getPayPwd(), reqNo, request.getAmount().toString(), "提现"); + WithDrawerDTO withdraw = walletApiService.withdraw(withDrawerRequest); + if ("2".equals(withdraw.getTradeStatus())) { + throw new ServiceException(ErrorCodeEnum.WALLET_WITH_DRAWER_FAIL); + } + WalletPaymentOrderDO orderDO = WalletPaymentOrderDO.builder() + .storeId(storeId) + .paymentId(reqNo) + .type(1) + .amount(request.getAmount()) + .orderStatus(1) + .build(); + walletPaymentOrderDAO.insertSelective(orderDO); + return true; } public String getStoreId(StoreShopRequest request) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 8fa1d89d8..c9eebc6d1 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -3,10 +3,7 @@ package com.cool.store.controller.webc; import com.cool.store.request.wallet.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; -import com.cool.store.vo.wallet.AccountAuthenticationVO; -import com.cool.store.vo.wallet.AccountBillListVO; -import com.cool.store.vo.wallet.AccountInfoVO; -import com.cool.store.vo.wallet.BankVO; +import com.cool.store.vo.wallet.*; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -14,6 +11,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.validation.constraints.NotBlank; import java.util.List; /** @@ -66,4 +64,34 @@ public class MiniWalletController { public ResponseResult> getBillPage(@RequestBody AccountBillQueryRequest request) { return ResponseResult.success(walletService.getBillPage(request)); } + + @ApiOperation("密码维护") + @PostMapping("/passwordUpdate") + public ResponseResult passwordUpdate(@RequestBody @Validated AccountPasswordRequest request) { + return ResponseResult.success(walletService.passwordUpdate(request)); + } + + @ApiOperation("账户充值") + @PostMapping("/payment") + public ResponseResult payment(@RequestBody @Validated AccountPaymentRequest request) { + return ResponseResult.success(walletService.payment(request)); + } + + @ApiOperation("未支付充值订单分页查询") + @GetMapping("/nonPaymentPage") + public ResponseResult> nonPaymentPage(LargePaymentQueryRequest request) { + return ResponseResult.success(walletService.nonPaymentOrderPage(request)); + } + + @ApiOperation("根据预支付id查询收款账户详情") + @GetMapping("/paymentDetail") + public ResponseResult paymentDetail(@NotBlank(message = "预支付id不能为空") String paymentId) { + return ResponseResult.success(walletService.paymentDetail(paymentId)); + } + + @ApiOperation("提现") + @PostMapping("/withDrawer") + public ResponseResult withDrawer(@RequestBody @Validated WalletWithDrawerRequest request) { + return ResponseResult.success(walletService.withDrawer(request)); + } } From 6d6f72dbc99b2dc46ef5d8fe6982541ec92e120c Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 14:23:32 +0800 Subject: [PATCH 046/109] =?UTF-8?q?fix:pc=E8=B4=A6=E6=88=B7=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/vo/wallet/AccountInfoVO.java | 3 ++ .../controller/webb/WalletController.java | 37 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java index c36bee76a..ef3488f88 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java @@ -33,4 +33,7 @@ public class AccountInfoVO { @ApiModelProperty(value = "账户余额") private String totalAmount; + + @ApiModelProperty(value = "打标状态 0 未打标 1 已打标") + private Integer labelingStatus; } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java new file mode 100644 index 000000000..fb582a4bf --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java @@ -0,0 +1,37 @@ +package com.cool.store.controller.webb; + +import com.cool.store.request.wallet.StoreShopRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.wallet.WalletService; +import com.cool.store.vo.wallet.AccountInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 钱包 前端控制器 + *

+ * + * @author wangff + * @since 2025/11/18 + */ +@Api(tags = "钱包") +@RestController +@RequestMapping("/pc/wallet") +@RequiredArgsConstructor +public class WalletController { + private final WalletService walletService; + + @ApiOperation("账户列表") + @GetMapping("/accountList") + public ResponseResult> getAccountList(@RequestBody StoreShopRequest request) { + return ResponseResult.success(walletService.getAccountList(request)); + } +} From 7703e4ef09a6bda8e77bddb397e1a8feeff66b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Tue, 18 Nov 2025 15:08:35 +0800 Subject: [PATCH 047/109] =?UTF-8?q?feat:=E8=90=A5=E8=B4=A6=E9=80=9Akey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cool/store/http/WalletHttpClientRest.java | 4 +++- .../src/main/resources/application-ab.properties | 1 + .../src/main/resources/application-local.properties | 1 + .../src/main/resources/application-test.properties | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java index 4ac01676d..5d717f3b6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java @@ -37,6 +37,8 @@ public class WalletHttpClientRest { private String coolPrivateKey; @Value("${wallet.api.rsa.public.key}") private String walletPublicKey; + @Value("${wallet.api.yzt.key}") + private String yztKey; /** @@ -47,7 +49,7 @@ public class WalletHttpClientRest { // 1. 准备请求参数 Map requestParams = convertToMap(request); requestParams.put("timestamp", System.currentTimeMillis()); - requestParams.put("key", "360155690205317"); + requestParams.put("key", yztKey); // 2. 生成签名 String signature = RsaSignUtil.generateSign(requestParams,coolPrivateKey); requestParams.put("sign", signature); diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index 50d0d4588..0d96502aa 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -158,6 +158,7 @@ huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. wallet.url=https://api.dev.wenmatech.com:443 +wallet.api.yzt.key=360155690205317 cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-local.properties b/coolstore-partner-web/src/main/resources/application-local.properties index 1aee75427..b8496b6ee 100644 --- a/coolstore-partner-web/src/main/resources/application-local.properties +++ b/coolstore-partner-web/src/main/resources/application-local.properties @@ -144,6 +144,7 @@ hqt.token.client.id=WrPffdGpcWkcPsbN hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD wallet.url=https://api.dev.wenmatech.com:443 +wallet.api.yzt.key=360155690205317 cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index 58c29ec48..2a18cbd11 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -171,6 +171,7 @@ huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. wallet.url=https://api.dev.wenmatech.com:443 +wallet.api.yzt.key=360155690205317 cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM= cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB wallet.api.rsa.public.key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOmsrFtFPTnEzfpJ/hDl5RODBxw4i9Ex3NmmG/N7A1+by032zZZgLLpdNh8y5otjFY07Nyr4FGKFRSSuDiTk8vfx3pv6ImS1Rxjjg4qdVHIfqhCeB0Z2ZPuBD3Gbj8hHFEtXZq8+msAFu/5ZQjiVhgs5WWBjh54LYWSum+d9+wIDAQAB From 9ae993c248d5d419b964b3bf42995f11d31a38ce Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 16:59:10 +0800 Subject: [PATCH 048/109] =?UTF-8?q?fix:rest=E6=8E=A5=E5=8F=A3=E8=A7=84?= =?UTF-8?q?=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/dto/wallet/AccountInfoDTO.java | 2 ++ .../com/cool/store/controller/webb/WalletController.java | 2 +- .../cool/store/controller/webc/MiniWalletController.java | 7 ++++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index 1d554a9c3..fc2f06a47 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -69,4 +69,6 @@ public class AccountInfoDTO { @ApiModelProperty(value = "是否签约人账户 0 否 1 是", required = true) private Integer isLegal; + @ApiModelProperty("工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java index fb582a4bf..22ec9e549 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java @@ -31,7 +31,7 @@ public class WalletController { @ApiOperation("账户列表") @GetMapping("/accountList") - public ResponseResult> getAccountList(@RequestBody StoreShopRequest request) { + public ResponseResult> getAccountList(StoreShopRequest request) { return ResponseResult.success(walletService.getAccountList(request)); } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index c9eebc6d1..7b04411c6 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -26,6 +26,7 @@ import java.util.List; @RestController @RequestMapping("/mini/wallet") @RequiredArgsConstructor +@Validated public class MiniWalletController { private final WalletService walletService; @@ -49,19 +50,19 @@ public class MiniWalletController { @ApiOperation("支行信息查询") @GetMapping("/bankList") - public ResponseResult> getBankList(@RequestBody BankListRequest request) { + public ResponseResult> getBankList(BankListRequest request) { return ResponseResult.success(walletService.getBankList(request)); } @ApiOperation("账户列表") @GetMapping("/accountList") - public ResponseResult> getAccountList(@RequestBody StoreShopRequest request) { + public ResponseResult> getAccountList(StoreShopRequest request) { return ResponseResult.success(walletService.getAccountList(request)); } @ApiOperation("账户流水") @GetMapping("/billPage") - public ResponseResult> getBillPage(@RequestBody AccountBillQueryRequest request) { + public ResponseResult> getBillPage(AccountBillQueryRequest request) { return ResponseResult.success(walletService.getBillPage(request)); } From f40cfb5c92bcbfcca866e1021128070e00e36779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Tue, 18 Nov 2025 18:22:50 +0800 Subject: [PATCH 049/109] =?UTF-8?q?feat:=E7=BD=91=E5=95=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/dto/wallet/AccountActiveUrlDTO.java | 20 +++++ .../com/cool/store/dto/wallet/StoreIdDTO.java | 16 ++++ .../request/wallet/AccountAddTagRequest.java | 28 +++++++ .../wallet/AddTagCallbackNoticeRequest.java | 3 + .../wallet/CreateStoreAndAccountRequest.java | 4 - .../wallet/OldStoreAccountCreateRequest.java | 83 +++++++++++++++++++ .../OnlineCommercialBankCallbackRequest.java | 25 ++++++ .../service/wallet/WalletApiService.java | 19 +++++ .../store/service/wallet/WalletService.java | 7 ++ .../wallet/impl/WalletServiceImpl.java | 7 +- .../controller/webb/OpenApiController.java | 7 ++ 11 files changed, 213 insertions(+), 6 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java new file mode 100644 index 000000000..aef265344 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountActiveUrlDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 17:55 + * @Version 1.0 + */ +@Data +public class AccountActiveUrlDTO { + @ApiModelProperty(value = "商户门店编号",required = true) + private String outStoreId; + @ApiModelProperty(value = "H5 激活页短链(商户需访问此链接完成操作,非公网可直接访问需确认权限)",required = true) + private String activateUrl; + @ApiModelProperty(value = "短链失效时间(格式:YYYY-MM-DD HH:mm:ss,过期后需重新调用接口生成)",required = true) + private String expireTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java new file mode 100644 index 000000000..116d2df3a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/StoreIdDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 18:20 + * @Version 1.0 + */ +@Data +public class StoreIdDTO { + @ApiModelProperty(value = "商户门店编号",required = true) + private String outStoreId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java index 684fe142d..975d45314 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountAddTagRequest.java @@ -54,4 +54,32 @@ public class AccountAddTagRequest { @ApiModelProperty(value = "法人联系电话", required = true) @NotBlank(message = "法人联系电话不能为空") private String legalPhone; + + @ApiModelProperty(value = "开户许可证图片链接,企业必选", required = true) + private String industryLicensePhoto; + + @ApiModelProperty(value = "法人代表证件人像面图片链接", required = true) + private String certPhotoA; + + @ApiModelProperty(value = "法人代表证件国徽面 / 签证面图片链接", required = true) + private String certPhotoB; + + @ApiModelProperty(value = "营业执照图片链接", required = true) + private String licensePhoto; + + @ApiModelProperty(value = "签约人姓名", required = true) + private String signatoryName; + + @ApiModelProperty(value = "签约人身份证", required = true) + private String signatoryNo; + + @ApiModelProperty(value = "签约人联系电话", required = true) + private String signatoryPhone; + + @ApiModelProperty(value = "签约人证件人像面图片链接", required = true) + private String signatoryPhotoA; + + @ApiModelProperty(value = "签约人证件国徽面图片链接", required = true) + private String signatoryPhotoB; + } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java index 4d5a495b0..858c7e99b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java @@ -17,5 +17,8 @@ public class AddTagCallbackNoticeRequest { private Integer status; @ApiModelProperty(name = "1.法人 2.非法人", required = true) private Integer addTagType; + @ApiModelProperty(name = "失败原因", required = false) + private Integer errorMsg; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java index 231f74b78..e8218cdf0 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreAndAccountRequest.java @@ -19,10 +19,6 @@ public class CreateStoreAndAccountRequest { @ApiModelProperty(name = "CRM门店编号", required = true) private String outStoreId; - @ApiModelProperty(name = "组织编号", required = true) - private String orgCode; - @ApiModelProperty(name = "组织名称", required = true) - private String orgName; @ApiModelProperty(name = "联系电话", required = true) private String phoneNumber; @ApiModelProperty(name = "结算卡业务类型 枚举值:1:对公 2:对私", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java new file mode 100644 index 000000000..4a7e5af72 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java @@ -0,0 +1,83 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 18:16 + * @Version 1.0 + */ +@Data +public class OldStoreAccountCreateRequest { + + @ApiModelProperty(value = "CRM门店编号", required = true) + private String outStoreId; + + @ApiModelProperty(value = "联系电话", required = true) + private String phoneNumber; + + @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私(结算类型)", required = true, example = "1") + private Integer accountType; + + @ApiModelProperty(value = "开户类型:1企业 2个体工商户 3个人(小微商户)", required = true, example = "1") + private Integer businessType; + + @ApiModelProperty(value = "营业执照号码,与企业证件类型对应的企业注册号(企业与个体户必传)") + private String licenseNo; + + @ApiModelProperty(value = "工商注册名称(与注册工商信息时一致)(企业与个体户必传)") + private String licenseName; + + @ApiModelProperty(value = "法人姓名", required = true) + private String legalName; + + @ApiModelProperty(value = "法人证件号码", required = true) + private String legalNo; + + @ApiModelProperty(value = "法人联系电话(企业与个体户必传)") + private String legalPhone; + + @ApiModelProperty(value = "账户简称", required = true) + private String accountAliasName; + + @ApiModelProperty(value = "结算银行卡号", required = true) + private String accountCardNo; + + @ApiModelProperty(value = "结算卡银行预留手机号(存量门店可能没有)", required = true) + private String accountPhone; + + @ApiModelProperty(value = "开户支行", required = true) + private String bankNo; + + @ApiModelProperty(value = "开户支行名称", required = true) + private String bankName; + + @ApiModelProperty(value = "开户许可证图片链接,企业必选") + private String industryLicensePhoto; + + @ApiModelProperty(value = "法人代表证件人像面图片链接", required = true) + private String certPhotoA; + + @ApiModelProperty(value = "法人代表证件国徽面图片链接", required = true) + private String certPhotoB; + + @ApiModelProperty(value = "营业执照图片链接", required = true) + private String licensePhoto; + + @ApiModelProperty(value = "签约人姓名", required = true) + private String signatoryName; + + @ApiModelProperty(value = "签约人身份证", required = true) + private String signatoryNo; + + @ApiModelProperty(value = "签约人联系电话", required = true) + private String signatoryPhone; + + @ApiModelProperty(value = "签约人证件人像面图片链接", required = true) + private String signatoryPhotoA; + + @ApiModelProperty(value = "签约人证件国徽面图片链接", required = true) + private String signatoryPhotoB; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java new file mode 100644 index 000000000..64539e56b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OnlineCommercialBankCallbackRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/18 18:00 + * @Version 1.0 + */ +@Data +public class OnlineCommercialBankCallbackRequest { + + @ApiModelProperty(name = "CRM门店编号", required = true) + private String outStoreId; + @ApiModelProperty(name = "网商账户编号", required = true) + private String accountNo; + @ApiModelProperty(name = "4.已开通 5.开通失败", required = true) + private Integer accountStatus; + @ApiModelProperty(name = "开户失败原因", required = true) + private String failReason; + @ApiModelProperty(name = "钱包类型 1.平安 2.网商 目前只有网商是创建账户异步的 预留字段", required = true) + private int walletType; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index 3d9a298b6..32e4f0538 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -183,6 +183,25 @@ public class WalletApiService { return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/findAccountPage", request, AccountPageDTO.class); } + /** + * 获取账户激活链接 + * @param request + * @return + */ + public AccountActiveUrlDTO pushAccountActiveUrl(OutStoreIdRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/create", request, AccountActiveUrlDTO.class); + } + + /** + * 老店创建门店网商账户 + * @param request + * @return + */ + public StoreIdDTO oldStoreOpenAccount(OldStoreAccountCreateRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/create", request, StoreIdDTO.class); + } + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 36a10081d..ad2d84896 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -66,6 +66,13 @@ public interface WalletService { */ Boolean largePaymentCallback(PaymentDTO request); + /** + * 网商银行 回调接口 + * @param request + * @return + */ + Boolean onlineCommercialBankCallback(OnlineCommercialBankCallbackRequest request); + /** * 账户交易回调 * @param request diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 0ad7bb644..b5e182451 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -75,8 +75,6 @@ public class WalletServiceImpl implements WalletService { } CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder() .outStoreId(shopInfo.getStoreId()) - .orgCode(String.valueOf(regionDO.getId())) - .orgName(regionDO.getName()) .phoneNumber(request.getMobile()) .accountType(BankAccountTypeEnum.PRIVATE.getType()) .businessType(BankBusinessTypeEnum.PERSONAL.getType()) @@ -203,6 +201,11 @@ public class WalletServiceImpl implements WalletService { return Boolean.TRUE; } + @Override + public Boolean onlineCommercialBankCallback(OnlineCommercialBankCallbackRequest request) { + return Boolean.TRUE; + } + @Override public Boolean accountTradeCallback(AccountTradeCallbackRequest request) { return Boolean.TRUE; diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java index 8df5ffb08..a7ec6c637 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java @@ -14,6 +14,7 @@ import com.cool.store.request.notice.ThirdHandleMessageRequest; import com.cool.store.request.notice.ThirdMatterRequest; import com.cool.store.request.wallet.AccountTradeCallbackRequest; import com.cool.store.request.wallet.AddTagCallbackNoticeRequest; +import com.cool.store.request.wallet.OnlineCommercialBankCallbackRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.ReceiptCallBackRequest; import com.cool.store.response.ResponseResult; @@ -239,4 +240,10 @@ public class OpenApiController { return ApiResponse.successByWallet(walletService.accountTradeCallback(request)); } + @ApiOperation("网商银行通知接口") + @PostMapping("/wallet/onlineCommercialBankCallback") + public ApiResponse accountTradeCallback(@RequestBody @Validated OnlineCommercialBankCallbackRequest request) { + return ApiResponse.successByWallet(walletService.onlineCommercialBankCallback(request)); + } + } From ac5a06bdad777c68fa6b688894afecfa992ba26b Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 18:44:10 +0800 Subject: [PATCH 050/109] =?UTF-8?q?fix:=E6=89=93=E6=A0=87=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/constants/RedisConstant.java | 5 ++++ .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../cool/store/dto/wallet/AccountInfoDTO.java | 3 ++ .../wallet/AddTagCallbackNoticeRequest.java | 3 +- .../request/wallet/StoreShopRequest.java | 3 ++ .../cool/store/vo/wallet/AccountInfoVO.java | 3 ++ .../cool/store/http/WalletHttpClientRest.java | 9 ++++-- .../wallet/impl/WalletServiceImpl.java | 30 +++++++++++++++++-- 8 files changed, 52 insertions(+), 5 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java index 7dbe943e4..1c6dfb955 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java @@ -289,4 +289,9 @@ public class RedisConstant { public static final String HUO_MA_STORE_ID = "huo_ma_store_id"; public static final String HUO_MA_TOKEN= "huo_ma_token:{0}"; + + /** + * 钱包开通失败原因 wallet_open_fail:storeId:1/2 1平安/2网商 + */ + public static final String WALLET_OPEN_FAIL = "wallet_open_fail:{0}:{1}"; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 5068cb4b2..7f31d46e2 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -317,6 +317,7 @@ public enum ErrorCodeEnum { WALLET_OPEN_ACCOUNT_FAIL(1620001,"钱包开通失败",null), WALLET_WITH_DRAWER_FAIL(1620002,"提现失败",null), + WALLET_API_ERROR(1620003,"{0}",null), ; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index fc2f06a47..de91aa1db 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -71,4 +71,7 @@ public class AccountInfoDTO { @ApiModelProperty("工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") private Integer businessType; + + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java index 4d5a495b0..3d6c20df3 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java @@ -17,5 +17,6 @@ public class AddTagCallbackNoticeRequest { private Integer status; @ApiModelProperty(name = "1.法人 2.非法人", required = true) private Integer addTagType; - + @ApiModelProperty(name = "失败原因") + private String errorMsg; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java index ef7450aa2..c33527642 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java @@ -18,4 +18,7 @@ public class StoreShopRequest { @ApiModelProperty("门店id,两者取一") private String storeId; + + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java index ef3488f88..a7ef81fcc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java @@ -36,4 +36,7 @@ public class AccountInfoVO { @ApiModelProperty(value = "打标状态 0 未打标 1 已打标") private Integer labelingStatus; + + @ApiModelProperty("账户升级失败原因") + private String failReason; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java index 5d717f3b6..9e785cf2e 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WalletHttpClientRest.java @@ -154,8 +154,13 @@ public class WalletHttpClientRest { if (code != 200) { String msg = (String) responseMap.get("msg"); - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, - "code: " + code + ", msg: " + msg); + // TODO: 等营帐通确认错误码 + if (code == 400) { + throw new ServiceException(ErrorCodeEnum.WALLET_API_ERROR, msg); + } else { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, + "code: " + code + ", msg: " + msg); + } } } } catch (ServiceException e) { diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 0ad7bb644..b5d7bb84b 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -3,6 +3,7 @@ package com.cool.store.service.wallet.impl; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.RedisConstant; import com.cool.store.dao.LineInfoDAO; import com.cool.store.dao.RegionDao; import com.cool.store.dao.ShopInfoDAO; @@ -22,6 +23,7 @@ import com.cool.store.request.wallet.*; import com.cool.store.service.wallet.WalletApiService; import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.BeanUtil; +import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.UUIDUtils; import com.cool.store.vo.wallet.*; import com.github.pagehelper.PageHelper; @@ -32,8 +34,8 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.math.BigDecimal; import java.sql.Date; +import java.text.MessageFormat; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; @@ -42,6 +44,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -62,6 +65,7 @@ public class WalletServiceImpl implements WalletService { private final RegionDao regionDao; private final WalletPaymentOrderDAO walletPaymentOrderDAO; private final LineInfoDAO lineInfoDAO; + private final RedisUtilPool redisUtilPool; private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @@ -179,6 +183,11 @@ public class WalletServiceImpl implements WalletService { AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); log.info("打标接口调用成功,response:{}", JSONObject.toJSONString(addTagDTO)); } + } catch (ServiceException e) { + // 平安打标 签约人和法人一致时,同步返回,失败原因从msg中取 + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, storeId, "1"); + redisUtilPool.setString(key, e.getErrorCode().equals(1620003) ? e.getMessage() : "系统异常"); + log.info("营业执照已上传,接口异常", e); } catch (Exception e) { log.error("营业执照已上传,打标失败", e); } @@ -195,6 +204,16 @@ public class WalletServiceImpl implements WalletService { @Override public Boolean addTagCallback(AddTagCallbackNoticeRequest request) { + try { + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, request.getOutStoreId(), "1"); + if (Integer.valueOf(2).equals(request.getStatus())) { + redisUtilPool.setString(key, request.getErrorMsg()); + } else { + redisUtilPool.delKey(key); + } + } catch (Exception e) { + log.info("回调失败", e); + } return Boolean.TRUE; } @@ -212,7 +231,14 @@ public class WalletServiceImpl implements WalletService { public List getAccountList(StoreShopRequest request) { String storeId = getStoreId(request); List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); - return BeanUtil.toList(accountInfo, AccountInfoVO.class); + return accountInfo.stream() + .filter(v -> Objects.isNull(request.getWalletType()) || request.getWalletType().equals(v.getWalletType())) + .map(v -> { + AccountInfoVO vo = BeanUtil.toBean(v, AccountInfoVO.class); + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, storeId, String.valueOf(v.getWalletType())); + vo.setFailReason(redisUtilPool.getString(key)); + return vo; + }).collect(Collectors.toList()); } @Override From af52a60e50652e66495026bf59e79459af8e4c59 Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 18:47:17 +0800 Subject: [PATCH 051/109] =?UTF-8?q?fix:=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82=E7=B1=BB=E5=9E=8B=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/controller/webc/MiniWalletController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 7b04411c6..01832c40f 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -49,8 +49,8 @@ public class MiniWalletController { } @ApiOperation("支行信息查询") - @GetMapping("/bankList") - public ResponseResult> getBankList(BankListRequest request) { + @PostMapping("/bankList") + public ResponseResult> getBankList(@RequestBody BankListRequest request) { return ResponseResult.success(walletService.getBankList(request)); } From 3ddf965a6c36f08bd0d073f629d4c8053fd275d8 Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 18 Nov 2025 18:52:21 +0800 Subject: [PATCH 052/109] fix --- .../cool/store/request/wallet/AddTagCallbackNoticeRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java index 858c7e99b..b73530828 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AddTagCallbackNoticeRequest.java @@ -18,7 +18,7 @@ public class AddTagCallbackNoticeRequest { @ApiModelProperty(name = "1.法人 2.非法人", required = true) private Integer addTagType; @ApiModelProperty(name = "失败原因", required = false) - private Integer errorMsg; + private String errorMsg; } From 088ee0a0e51f0ba3a41bdf62e14f2a1b2aa43cce Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 19 Nov 2025 14:41:40 +0800 Subject: [PATCH 053/109] =?UTF-8?q?fix:=E6=89=93=E6=A0=87=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E9=92=88=E5=AF=B9=E7=BD=91=E5=95=86=E6=94=B9=E5=8A=A8?= =?UTF-8?q?=EF=BC=9B=E5=AD=97=E6=AE=B5=E5=90=8D=E4=BF=AE=E6=94=B9=EF=BC=9B?= =?UTF-8?q?=E7=BD=91=E5=95=86=E5=BC=80=E9=80=9A=E5=9B=9E=E8=B0=83=EF=BC=9B?= =?UTF-8?q?=E5=A4=A7=E9=A2=9D=E5=85=85=E5=80=BC=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/wallet/WalletPaymentOrderDAO.java | 11 ++++ .../cool/store/dto/wallet/AccountInfoDTO.java | 2 +- .../cool/store/dto/wallet/BillPageDTO.java | 2 +- .../wallet/AccountBatchQueryRequest.java | 3 +- .../wallet/AccountBillQueryRequest.java | 12 +++- .../store/request/wallet/BillPageRequest.java | 4 +- .../request/wallet/CreateStoreRequest.java | 6 ++ .../wallet/WalletWithDrawerRequest.java | 3 + .../request/wallet/WithDrawerRequest.java | 2 + .../cool/store/vo/wallet/AccountInfoVO.java | 2 +- .../service/impl/ApplyLicenseServiceImpl.java | 2 +- .../service/wallet/WalletApiService.java | 2 +- .../store/service/wallet/WalletService.java | 3 +- .../wallet/impl/WalletServiceImpl.java | 64 ++++++++++++------- .../controller/webb/OpenApiController.java | 2 +- .../controller/webc/MiniWalletController.java | 4 +- 16 files changed, 88 insertions(+), 36 deletions(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java index 603714210..2610acaa7 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/WalletPaymentOrderDAO.java @@ -25,6 +25,17 @@ public class WalletPaymentOrderDAO { walletPaymentOrderMapper.insertSelective(walletPaymentOrderDO); } + /** + * 更新订单状态 + */ + public void updateOrderByPaymentId(String storeId, String paymentId, Integer orderStatus) { + Example example = new Example(WalletPaymentOrderDO.class); + example.createCriteria() + .andEqualTo("storeId", storeId) + .andEqualTo("paymentId", paymentId); + walletPaymentOrderMapper.updateByExampleSelective(WalletPaymentOrderDO.builder().orderStatus(orderStatus).build(), example); + } + /** * 查询未支付的充值订单 */ diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index de91aa1db..d972edfa0 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -57,7 +57,7 @@ public class AccountInfoDTO { @ApiModelProperty(value = "支行编号", required = true) private String bankNo; - @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通", required = true) + @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通 5:开通失败", required = true) private Integer accountStatus; @ApiModelProperty(value = "账户余额", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java index 88ad0fc8a..162fd905d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java @@ -17,7 +17,7 @@ import java.util.List; @Data @JsonIgnoreProperties(ignoreUnknown = true) public class BillPageDTO { - private List data; + private List pageData; private WalletBasicPageInfo page; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java index 2a9709444..f94504ab8 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java @@ -23,5 +23,6 @@ public class AccountBatchQueryRequest { @ApiModelProperty(value = "分页信息",required = true) private WalletBasicPageInfo page; - + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + private Integer walletType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java index 2e4146b51..faeb2f7ce 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBillQueryRequest.java @@ -4,6 +4,7 @@ import com.cool.store.common.PageBasicInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotNull; import java.util.Date; /** @@ -17,6 +18,7 @@ import java.util.Date; @Data public class AccountBillQueryRequest extends PageBasicInfo { @ApiModelProperty("门店id") + @NotNull(message = "门店id不能为空") private Long shopId; @ApiModelProperty("交易开始时间,不传查当月") @@ -25,12 +27,16 @@ public class AccountBillQueryRequest extends PageBasicInfo { @ApiModelProperty("交易结束时间") private Date endDate; - @ApiModelProperty(value = "是否签约人账户 0 否 1 是") + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + @NotNull(message = "钱包类型不能为空") + private Integer walletType; + + @ApiModelProperty("是否签约人账户 0 否 1 是") private Integer isLegal; - @ApiModelProperty(value = "交易类型: 0.全部,1.支出 2.收入") + @ApiModelProperty("交易类型: 0.全部,1.支出 2.收入") private Integer recordType; - @ApiModelProperty(value = "费用类型ID", required = true) + @ApiModelProperty("费用类型ID") private Long feeItemId; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java index faefbde98..8122794e7 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/BillPageRequest.java @@ -23,8 +23,10 @@ public class BillPageRequest { private String beginDate; @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS", required = true) private String endDate; - @ApiModelProperty(value = "钱包类型 1.门店钱包(平安) 2.签约人钱包(平安) 3.返利钱包(网商)", required = true) + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) private Integer walletType; + @ApiModelProperty(value = "是否签约人钱包", required = false) + private Integer isLegal; @ApiModelProperty(value = "交易类型: 0.全部,1.支出 2.收入", required = false) private Integer recordType; @ApiModelProperty(value = "费用类型ID", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java index 295493fe8..21f5930c6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CreateStoreRequest.java @@ -2,7 +2,10 @@ package com.cool.store.request.wallet; import com.sun.istack.NotNull; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; @@ -12,6 +15,9 @@ import javax.validation.constraints.NotBlank; * @Version 1.0 */ @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class CreateStoreRequest { @ApiModelProperty(value = "CRM门店编号", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java index 509dec55f..80459c74f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WalletWithDrawerRequest.java @@ -27,4 +27,7 @@ public class WalletWithDrawerRequest extends StoreShopRequest { @NotBlank(message = "支付密码不能为空") private String payPwd; + @ApiModelProperty("钱包类型 1.平安 2.网商") + @NotNull(message = "钱包类型不能为空") + private Integer walletType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java index 97786ec27..32cef81e6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/WithDrawerRequest.java @@ -25,5 +25,7 @@ public class WithDrawerRequest { private String amount; @ApiModelProperty(value = "提现备注") private String remark; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商", required = true) + private Integer walletType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java index a7ef81fcc..f0b1cd03c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java @@ -37,6 +37,6 @@ public class AccountInfoVO { @ApiModelProperty(value = "打标状态 0 未打标 1 已打标") private Integer labelingStatus; - @ApiModelProperty("账户升级失败原因") + @ApiModelProperty("平安账户升级/网商开通失败原因") private String failReason; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java index 81ea4203d..119c63028 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java @@ -154,7 +154,7 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { private void addTagIfUploadLicense(Long shopId) { ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); - walletService.addTagIfUploadLicense(shopId, shopInfo.getStoreId()); + walletService.addTagIfUploadLicense(shopId, shopInfo.getStoreId(), shopInfo.getLineId()); } @Override diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index 32e4f0538..8e51dc7eb 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -49,7 +49,7 @@ public class WalletApiService { * @return */ public AccountNoDTO createStore(CreateStoreRequest request){ - return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/v1/createStoreAndAccount", request, AccountNoDTO.class); + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/v1/createStore", request, AccountNoDTO.class); } /** diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index ad2d84896..3a55d2c89 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -49,8 +49,9 @@ public interface WalletService { * 判断营业执照是否已经上传,已上传则调用打标接口 * @param shopId 门店shopId * @param storeId 主数据门店id + * @param lineId 线索id */ - void addTagIfUploadLicense(Long shopId, String storeId); + void addTagIfUploadLicense(Long shopId, String storeId, Long lineId); /** * 打标成功回调通知 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 5253b85e7..c7686208a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -4,10 +4,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.constants.RedisConstant; -import com.cool.store.dao.LineInfoDAO; -import com.cool.store.dao.RegionDao; -import com.cool.store.dao.ShopInfoDAO; -import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dao.*; import com.cool.store.dao.wallet.WalletPaymentOrderDAO; import com.cool.store.dto.wallet.*; import com.cool.store.entity.*; @@ -66,6 +63,7 @@ public class WalletServiceImpl implements WalletService { private final WalletPaymentOrderDAO walletPaymentOrderDAO; private final LineInfoDAO lineInfoDAO; private final RedisUtilPool redisUtilPool; + private final QualificationsInfoDAO qualificationsInfoDAO; private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @@ -73,10 +71,6 @@ public class WalletServiceImpl implements WalletService { public Boolean accountCreate(AccountCreateRequest request) { ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); // 调用 创建门店签约人账户接口 - RegionDO regionDO = regionDao.getRegionById(shopInfo.getRegionId()); - if (Objects.isNull(regionDO)) { - throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); - } CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder() .outStoreId(shopInfo.getStoreId()) .phoneNumber(request.getMobile()) @@ -102,7 +96,7 @@ public class WalletServiceImpl implements WalletService { if (Objects.nonNull(authentication)) { if (authentication.getAccountStatus().equals(4)) { // 判断营业执照是否已经上传,已上传则调用打标接口 - addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId()); + addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId(), shopInfo.getLineId()); } return new AccountAuthenticationVO(authentication.getAccountStatus()); } @@ -132,7 +126,7 @@ public class WalletServiceImpl implements WalletService { shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), updateSubStageList); // 判断营业执照是否已经上传,已上传则调用打标接口 - addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId()); + addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId(), shopInfo.getLineId()); return true; } @@ -160,23 +154,33 @@ public class WalletServiceImpl implements WalletService { } @Override - public void addTagIfUploadLicense(Long shopId, String storeId) { - LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId); + public void addTagIfUploadLicense(Long shopId, String storeId, Long lineId) { + LicenseTransactDO license = applyLicenseMapper.selectByShopId(shopId); // 营业执照已上传,调用打标接口 - if (Objects.nonNull(licenseTransactDO) && StringUtils.isNotBlank(licenseTransactDO.getCreditUrl())) { + if (Objects.nonNull(license) && StringUtils.isNotBlank(license.getCreditUrl())) { try { // 判断一下账户的开通状态 if (enableAddTag(storeId)) { + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(lineId); + QualificationsInfoDO qualificationsInfoDO = qualificationsInfoDAO.getByLineId(lineId); // 调用 签约人账户打标(升级)接口 log.info("营业执照已上传,账户打标"); AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() .outStoreId(storeId) - .licenseNo(licenseTransactDO.getCreditCode()) - .licenseName(licenseTransactDO.getBusinessLicense()) + .licenseNo(license.getCreditCode()) + .licenseName(license.getBusinessLicense()) // .licenseExpire(Objects.nonNull(licenseTransactDO.getValidity()) ? CoolDateUtils.DateFormat(licenseTransactDO.getValidity(), "yyyy-MM-dd") : "2999-12-31") - .legalName(licenseTransactDO.getLicenseLegalPerson()) - .legalNo(licenseTransactDO.getLicenseLegalIdCardNo()) - .legalPhone(licenseTransactDO.getLicenseLegalMobile()) + .legalName(license.getLicenseLegalPerson()) + .legalNo(license.getLicenseLegalIdCardNo()) + .legalPhone(license.getLicenseLegalMobile()) + .certPhotoA(license.getLicenseLegalIdCardFront()) + .certPhotoB(license.getLicenseLegalIdCardBack()) + .licensePhoto(license.getCreditUrl()) + .signatoryName(lineInfoDO.getUsername()) + .signatoryNo(qualificationsInfoDO.getIdCardNo()) + .signatoryPhone(lineInfoDO.getMobile()) + .signatoryPhotoA(qualificationsInfoDO.getFrontOfIdCard()) + .signatoryPhotoB(qualificationsInfoDO.getBackOfIdCard()) .build(); AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); log.info("打标接口调用成功,response:{}", JSONObject.toJSONString(addTagDTO)); @@ -210,18 +214,33 @@ public class WalletServiceImpl implements WalletService { redisUtilPool.delKey(key); } } catch (Exception e) { - log.info("回调失败", e); + log.info("平安打标回调失败", e); } return Boolean.TRUE; } @Override public Boolean largePaymentCallback(PaymentDTO request) { + try { + walletPaymentOrderDAO.updateOrderByPaymentId(request.getOutStoreId(), request.getPaymentId(), request.getOrderStatus()); + } catch (Exception e) { + log.error("大额充值回调失败", e); + } return Boolean.TRUE; } @Override public Boolean onlineCommercialBankCallback(OnlineCommercialBankCallbackRequest request) { + try { + String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, request.getOutStoreId(), "1"); + if (Integer.valueOf(5).equals(request.getAccountStatus())) { + redisUtilPool.setString(key, request.getFailReason()); + } else { + redisUtilPool.delKey(key); + } + } catch (Exception e) { + log.info("平安打标回调失败", e); + } return Boolean.TRUE; } @@ -259,14 +278,15 @@ public class WalletServiceImpl implements WalletService { .outStoreId(shopInfo.getStoreId()) .beginDate(DateUtil.format(request.getBeginDate(), "yyyy-MM-dd HH:mm:ss")) .endDate(DateUtil.format(request.getEndDate(), "yyyy-MM-dd HH:mm:ss")) - .walletType(CommonConstants.INDEX_ONE.equals(request.getIsLegal()) ? 2 : 1) + .walletType(request.getWalletType()) + .isLegal(request.getIsLegal()) .recordType(request.getRecordType()) .feeItemId(request.getFeeItemId()) .currentPage(request.getPageNum()) .pageSize(request.getPageSize()) .build(); BillPageDTO billPage = walletApiService.getBillPage(billPageRequest); - return toPageInfo(billPage.getData(), AccountBillListVO.class, billPage.getPage()); + return toPageInfo(billPage.getPageData(), AccountBillListVO.class, billPage.getPage()); } @Override @@ -344,7 +364,7 @@ public class WalletServiceImpl implements WalletService { public Boolean withDrawer(WalletWithDrawerRequest request) { String storeId = getStoreId(request); String reqNo = UUIDUtils.get32UUID(); - WithDrawerRequest withDrawerRequest = new WithDrawerRequest(storeId, request.getPayPwd(), reqNo, request.getAmount().toString(), "提现"); + WithDrawerRequest withDrawerRequest = new WithDrawerRequest(storeId, request.getPayPwd(), reqNo, request.getAmount().toString(), "提现", request.getWalletType()); WithDrawerDTO withdraw = walletApiService.withdraw(withDrawerRequest); if ("2".equals(withdraw.getTradeStatus())) { throw new ServiceException(ErrorCodeEnum.WALLET_WITH_DRAWER_FAIL); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java index a7ec6c637..d062235ff 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java @@ -234,7 +234,7 @@ public class OpenApiController { return ApiResponse.successByWallet(walletService.largePaymentCallback(request)); } - @ApiOperation("大额充值通知接口") + @ApiOperation("账户交易回调") @PostMapping("/wallet/accountTradeCallback") public ApiResponse accountTradeCallback(@RequestBody @Validated AccountTradeCallbackRequest request) { return ApiResponse.successByWallet(walletService.accountTradeCallback(request)); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 01832c40f..7d9b93192 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -61,8 +61,8 @@ public class MiniWalletController { } @ApiOperation("账户流水") - @GetMapping("/billPage") - public ResponseResult> getBillPage(AccountBillQueryRequest request) { + @PostMapping("/billPage") + public ResponseResult> getBillPage(@Validated AccountBillQueryRequest request) { return ResponseResult.success(walletService.getBillPage(request)); } From 94ac7c9fbeeea6080e3c8e33096f70073488cec6 Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 19 Nov 2025 14:42:30 +0800 Subject: [PATCH 054/109] =?UTF-8?q?fix:=E8=A1=A5=E5=85=85=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/controller/webc/MiniWalletController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 7d9b93192..1bc90bad3 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -62,7 +62,7 @@ public class MiniWalletController { @ApiOperation("账户流水") @PostMapping("/billPage") - public ResponseResult> getBillPage(@Validated AccountBillQueryRequest request) { + public ResponseResult> getBillPage(@RequestBody @Validated AccountBillQueryRequest request) { return ResponseResult.success(walletService.getBillPage(request)); } From f0424315721af32838f91a1515e890f686f51049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 19 Nov 2025 14:51:14 +0800 Subject: [PATCH 055/109] =?UTF-8?q?feat:PC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/dto/wallet/TradeRecordDTO.java | 78 +++++++++++++++++++ .../store/dto/wallet/TradeRecordListDTO.java | 22 ++++++ .../wallet/AccountBatchQueryRequest.java | 7 +- .../wallet/CoolAccountBatchQueryRequest.java | 45 +++++++++++ .../wallet/CoolTradeRecodePageRequest.java | 41 ++++++++++ .../wallet/TradeRecodePageRequest.java | 33 ++++++++ .../service/wallet/WalletApiService.java | 9 +++ .../store/service/wallet/WalletService.java | 16 +++- .../wallet/impl/WalletServiceImpl.java | 14 ++++ .../controller/webb/WalletController.java | 24 +++++- 10 files changed, 283 insertions(+), 6 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java new file mode 100644 index 000000000..eb5845125 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordDTO.java @@ -0,0 +1,78 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author suzhuhong + * @Date 2025/11/19 11:14 + * @Version 1.0 + */ +@Data +public class TradeRecordDTO implements Serializable { + + @ApiModelProperty(value = "业务系统付款单号(如 CRM 单号)", required = true) + private String reqNo; + + @ApiModelProperty(value = "交易(营帐通)", required = true) + private Long tradeId; + + @ApiModelProperty(value = "交易流水号(扫呗)", required = true) + private String outTradeNo; + + @ApiModelProperty(value = "费用科目", required = true) + private Integer feeItemId; + + @ApiModelProperty(value = "费用科目名称", required = true) + private String feeItemName; + + @ApiModelProperty(value = "转出方门店编号") + private String outStoreCode; + + @ApiModelProperty(value = "转入方门店编号") + private String inStoreCode; + + @ApiModelProperty(value = "转出方门店名称") + private String outStoreName; + + @ApiModelProperty(value = "转入方门店名称") + private String inStoreName; + + @ApiModelProperty(value = "转出方账户编号") + private String outAccountNo; + + @ApiModelProperty(value = "转入方账户编号") + private String inAccountNo; + + @ApiModelProperty(value = "转出方账户名称") + private String outAccountName; + + @ApiModelProperty(value = "转入方账户名称") + private String inAccountName; + + @ApiModelProperty(value = "提现银行卡号") + private String withdrawalBankCardNo; + + @ApiModelProperty(value = "提现银行卡户名") + private String withdrawalBankCardName; + + @ApiModelProperty(value = "金额(元)", required = true) + private String amount; + + @ApiModelProperty(value = "交易状态1.成功 2.失败 3.处理中 4.已退款", required = true) + private Integer tradeStatus; + + @ApiModelProperty(value = "1.转账2.提现 交易类型", required = true) + private Integer tradeType; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "错误原因") + private String errMsg; + + @ApiModelProperty(value = "交易发起时间YYYY-MM-DD HH:MM:SS", required = true) + private String createTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java new file mode 100644 index 000000000..97b5899c4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TradeRecordListDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.wallet; + +import com.cool.store.request.wallet.WalletBasicPageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/19 11:15 + * @Version 1.0 + */ +@Data +public class TradeRecordListDTO { + + private List pageData; + + + private WalletBasicPageInfo page; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java index f94504ab8..2018730dc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java @@ -11,7 +11,7 @@ import lombok.Data; @Data public class AccountBatchQueryRequest { - @ApiModelProperty(value = "关键字(门店编号、门店名称、账户名称、账户别名)") + @ApiModelProperty(value = "关键字(账户名称、账户别名)") private String keyword; @ApiModelProperty(value = "账户状态 1 待提交 2 待鉴权 3 鉴权中 4开通 账户状态") @@ -20,6 +20,11 @@ public class AccountBatchQueryRequest { @ApiModelProperty(value = "工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") private Integer businessType; + @ApiModelProperty(value = "门店id") + private String outStoreId; + + private Integer walletType; + @ApiModelProperty(value = "分页信息",required = true) private WalletBasicPageInfo page; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java new file mode 100644 index 000000000..76b650e5f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolAccountBatchQueryRequest.java @@ -0,0 +1,45 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/19 13:56 + * @Version 1.0 + */ +@Data +public class CoolAccountBatchQueryRequest extends PageBasicInfo { + + @ApiModelProperty(value = "关键字(账户名称、账户别名)") + private String keyword; + + @ApiModelProperty(value = "账户状态 1 待提交 2 待鉴权 3 鉴权中 4开通 账户状态") + private Integer accountStatus; + + @ApiModelProperty(value = "工商类型 1.企业 2.个体工商户 3.小微商户(自然人)") + private Integer businessType; + + @ApiModelProperty(value = "门店id") + private String outStoreId; + + private Integer walletType; + + public AccountBatchQueryRequest convertToAccountBatchQueryRequest() { + AccountBatchQueryRequest target = new AccountBatchQueryRequest(); + target.setKeyword(this.getKeyword()); + target.setAccountStatus(this.getAccountStatus()); + target.setBusinessType(this.getBusinessType()); + target.setOutStoreId(this.getOutStoreId()); + target.setWalletType(this.getWalletType()); + + WalletBasicPageInfo walletBasicPageInfo = new WalletBasicPageInfo(); + walletBasicPageInfo.setCurrentPage(this.getPageNum()); + walletBasicPageInfo.setPageSize(this.getPageSize()); + target.setPage(walletBasicPageInfo); + return target; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java new file mode 100644 index 000000000..fe98c9eb6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolTradeRecodePageRequest.java @@ -0,0 +1,41 @@ +package com.cool.store.request.wallet; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/19 14:09 + * @Version 1.0 + */ +@Data +public class CoolTradeRecodePageRequest extends PageBasicInfo { + + @ApiModelProperty(value = "交易开始时间YYYY-MM-DD HH:MM:SS",required = true) + private String beginDate; + @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS",required = true) + private String endDate; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商",required = true) + private Integer walletType; + @ApiModelProperty(value = "关键字(账户名称,账户编号,业务系统付款单号,提现银行卡号)",required = true) + private String keyword; + @ApiModelProperty(value = "关键字(门店编号,门店名称)",required = true) + private String storeKeyword; + @ApiModelProperty(value = "费用科目",required = true) + private Integer feeItemId; + + public TradeRecodePageRequest convertToTradeRecodePageRequest() { + TradeRecodePageRequest target = new TradeRecodePageRequest(); + target.setBeginDate(this.getBeginDate()); + target.setEndDate(this.getEndDate()); + target.setWalletType(this.getWalletType()); + target.setKeyword(this.getKeyword()); + target.setStoreKeyword(this.getStoreKeyword()); + target.setFeeItemId(this.getFeeItemId()); + target.setCurrentPage(this.getPageNum()); + target.setPageSize(this.getPageSize()); + return target; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java new file mode 100644 index 000000000..abbe74f28 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TradeRecodePageRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/19 11:07 + * @Version 1.0 + */ +@Data +public class TradeRecodePageRequest { + + @ApiModelProperty(value = "交易开始时间YYYY-MM-DD HH:MM:SS",required = true) + private String beginDate; + @ApiModelProperty(value = "交易结束时间YYYY-MM-DD HH:MM:SS",required = true) + private String endDate; + @ApiModelProperty(value = "钱包类型 1.平安 2.网商",required = true) + private Integer walletType; + @ApiModelProperty(value = "关键字(账户名称,账户编号,业务系统付款单号,提现银行卡号)",required = true) + private String keyword; + @ApiModelProperty(value = "关键字(门店编号,门店名称)",required = true) + private String storeKeyword; + @ApiModelProperty(value = "费用科目",required = true) + private Integer feeItemId; + @ApiModelProperty(value = "当前页码",required = true) + private Integer currentPage; + @ApiModelProperty(value = "每页数量",required = true) + private Integer pageSize; + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java index 8e51dc7eb..f79e3878e 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletApiService.java @@ -201,6 +201,15 @@ public class WalletApiService { return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/create", request, StoreIdDTO.class); } + /** + * 获取交易记录列表 + * @param request + * @return + */ + public TradeRecordListDTO getTradeRecordList(TradeRecodePageRequest request){ + return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/accRecordPage", request, TradeRecordListDTO.class); + } + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 3a55d2c89..897321f95 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -1,6 +1,6 @@ package com.cool.store.service.wallet; -import com.cool.store.dto.wallet.PaymentDTO; +import com.cool.store.dto.wallet.*; import com.cool.store.request.wallet.*; import com.cool.store.vo.wallet.*; import com.github.pagehelper.PageInfo; @@ -129,4 +129,18 @@ public interface WalletService { * @return 是否成功 */ Boolean withDrawer(WalletWithDrawerRequest request); + + /** + * 批量查询账户信息 分页查询 所有门店账户 + * @param request 批量查询账户信息Request + * @return 账户信息VO列表 + */ + PageInfo getAllAccountList(CoolAccountBatchQueryRequest request); + + /** + * 批量查询账户交易流水 + * @param request + * @return + */ + PageInfo getTradeRecordList(CoolTradeRecodePageRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index c7686208a..816cbb818 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -380,6 +380,20 @@ public class WalletServiceImpl implements WalletService { return true; } + @Override + public PageInfo getAllAccountList(CoolAccountBatchQueryRequest request) { + AccountBatchQueryRequest accountBatchQueryRequest = request.convertToAccountBatchQueryRequest(); + AccountPageDTO accountList = walletApiService.getAccountList(accountBatchQueryRequest); + return toPageInfo(accountList.getPageData(), AccountInfoDTO.class, accountList.getPage()); + } + + @Override + public PageInfo getTradeRecordList(CoolTradeRecodePageRequest request) { + TradeRecodePageRequest tradeRecodePageRequest = request.convertToTradeRecodePageRequest(); + TradeRecordListDTO tradeRecordListDTO = walletApiService.getTradeRecordList(tradeRecodePageRequest); + return toPageInfo(tradeRecordListDTO.getPageData(), TradeRecordDTO.class, tradeRecordListDTO.getPage()); + } + public String getStoreId(StoreShopRequest request) { String storeId = request.getStoreId(); if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java index 22ec9e549..db5cbdafe 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java @@ -1,17 +1,20 @@ package com.cool.store.controller.webb; +import com.cool.store.dto.wallet.AccountInfoDTO; +import com.cool.store.dto.wallet.TradeRecordDTO; +import com.cool.store.request.wallet.CoolAccountBatchQueryRequest; +import com.cool.store.request.wallet.CoolTradeRecodePageRequest; import com.cool.store.request.wallet.StoreShopRequest; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; import com.cool.store.vo.wallet.AccountInfoVO; +import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.util.List; /** @@ -34,4 +37,17 @@ public class WalletController { public ResponseResult> getAccountList(StoreShopRequest request) { return ResponseResult.success(walletService.getAccountList(request)); } + + @ApiOperation("分页查询所有门店账户列表 支持条件查询") + @PostMapping("/getAllAccountList") + public ResponseResult> getAllAccountList(@RequestBody CoolAccountBatchQueryRequest request) { + return ResponseResult.success(walletService.getAllAccountList(request)); + } + + @ApiOperation("分页查询所有流水列表 支持条件查询") + @PostMapping("/getTradeRecordList") + public ResponseResult> getTradeRecordList(@RequestBody CoolTradeRecodePageRequest request) { + return ResponseResult.success(walletService.getTradeRecordList(request)); + } + } From 2335ecca4c7c7cb1b94b1d8c611d005723eed9d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 19 Nov 2025 14:56:52 +0800 Subject: [PATCH 056/109] feat:storeId --- .../src/main/resources/mapper/ShopInfoMapper.xml | 3 ++- .../java/com/cool/store/dto/Preparation/PreparationDTO.java | 2 ++ .../main/java/com/cool/store/response/BranchShopResponse.java | 2 ++ .../main/java/com/cool/store/service/impl/ShopServiceImpl.java | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index ab6e29373..048b67fee 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -308,7 +308,8 @@ a.franchise_brand as franchiseBrand, a.shop_status as shopStatus, a.detail_address as shopAddress, - a.manager_region_id as managerRegionId + a.manager_region_id as managerRegionId, + a.store_id as storeId from xfsg_shop_info a left join xfsg_line_info b on a.line_id = b.id left join xfsg_sign_franchise c on a.id = c.shop_id diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java index 7375fbb64..96a6d4e04 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java @@ -55,5 +55,7 @@ public class PreparationDTO { private Long managerRegionId; + private String storeId; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java index 8b2427f02..f4300f4eb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/BranchShopResponse.java @@ -61,6 +61,8 @@ public class BranchShopResponse { @ApiModelProperty("所属管理区域name") private String managerRegionName; + private String storeId; + public void setDays() { if (this.openingActivityEndTime==null){ diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java index f3f05c479..24a3ae4e1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java @@ -563,6 +563,7 @@ public class ShopServiceImpl implements ShopService { response.setLineId(dto.getLineId()); response.setUsername(dto.getUsername()); response.setMobile(dto.getMobile()); + response.setStoreId(dto.getStoreId()); response.setShopName(dto.getShopName()); response.setShopCode(dto.getShopCode()); response.setRegionName(regionNameMap.getOrDefault(dto.getRegionId(), "")); From ff9be4e61bddaf2c32d1f1c93d0b067ab1623b6c Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 19 Nov 2025 16:23:14 +0800 Subject: [PATCH 057/109] =?UTF-8?q?fix:=E5=BB=BA=E5=BA=97=E6=97=B6?= =?UTF-8?q?=E5=80=99=E8=B0=83=E7=94=A8=E5=88=9B=E5=BB=BA=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B=E6=B5=81=E6=B0=B4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=94=B6=E5=85=A5=E6=94=AF=E5=87=BA=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=9B=E6=96=B0=E5=A2=9E=E8=B4=A6=E6=88=B7=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=8E=A5=E5=8F=A3=E3=80=81=E4=BA=A4=E6=98=93=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/JoinModeEnum.java | 9 +++ .../store/enums/wallet/YztStoreModel.java | 47 +++++++++++++ .../cool/store/dto/wallet/BillPageDTO.java | 10 +++ .../wallet/AccountBatchQueryRequest.java | 2 - .../request/wallet/AccountQueryRequest.java | 21 ++++++ .../request/wallet/StoreShopRequest.java | 3 - .../store/vo/wallet/AccountBillPageVO.java | 40 +++++++++++ .../service/impl/SyncMainSysServerImpl.java | 67 ++++++++++--------- .../store/service/wallet/WalletService.java | 20 +++++- .../wallet/impl/WalletServiceImpl.java | 21 ++++-- .../controller/webb/WalletController.java | 5 +- .../controller/webc/MiniWalletController.java | 17 ++++- 12 files changed, 213 insertions(+), 49 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java index 0c4b24555..65faf4608 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java @@ -44,4 +44,13 @@ public enum JoinModeEnum { public static boolean isFranchise(Integer code) { return code == FRANCHISE_DEPARTMENT.code || code == AFFILIATES.code; } + + public static JoinModeEnum getModelByCode(Integer code) { + for (JoinModeEnum e : JoinModeEnum.values()) { + if (e.getCode() == code) { + return e; + } + } + return null; + } } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java new file mode 100644 index 000000000..b31c55d26 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wallet/YztStoreModel.java @@ -0,0 +1,47 @@ +package com.cool.store.enums.wallet; + +import com.cool.store.enums.JoinModeEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + *

+ * 营帐通门店模式 + *

+ * + * @author wangff + * @since 2025/11/19 + */ +@Getter +@AllArgsConstructor +public enum YztStoreModel { + // 1.社会加盟 2.强管 3.强加盟 (门店模式) + + SOCIAL_JOIN(1, "社会加盟", Arrays.asList(JoinModeEnum.FRANCHISE_DEPARTMENT, JoinModeEnum.FRANCHISE_COMPANIES)), + STRONG_MANAGEMENT(2, "强管", Collections.singletonList(JoinModeEnum.FLAGSHIP_STORE)), + STRONG_JOIN(3, "强加盟", Collections.singletonList(JoinModeEnum.AFFILIATES)), + ; + + private final Integer model; + + private final String desc; + + /** + * 对应crm加盟模式枚举类 + */ + private final List joinModelList; + + public static Integer getYztStoreModel(Integer joinModel) { + JoinModeEnum joinModelEnum = JoinModeEnum.getModelByCode(joinModel); + for (YztStoreModel e : YztStoreModel.values()) { + if (e.joinModelList.contains(joinModelEnum)) { + return e.model; + } + } + return null; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java index 162fd905d..999cf8cc6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/BillPageDTO.java @@ -20,4 +20,14 @@ public class BillPageDTO { private List pageData; private WalletBasicPageInfo page; + + /** + * 收入 + */ + private Long getAmount; + + /** + * 支出 + */ + private Long useAmount; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java index 2018730dc..5337a09c6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountBatchQueryRequest.java @@ -23,8 +23,6 @@ public class AccountBatchQueryRequest { @ApiModelProperty(value = "门店id") private String outStoreId; - private Integer walletType; - @ApiModelProperty(value = "分页信息",required = true) private WalletBasicPageInfo page; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java new file mode 100644 index 000000000..e98f65417 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/AccountQueryRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 账户查询Request + *

+ * + * @author wangff + * @since 2025/11/19 + */ +@Data +public class AccountQueryRequest extends StoreShopRequest { + @ApiModelProperty("钱包类型 1平安 2网商") + private Integer walletType; + + @ApiModelProperty("账户编号") + private String accountNo; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java index c33527642..ef7450aa2 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/StoreShopRequest.java @@ -18,7 +18,4 @@ public class StoreShopRequest { @ApiModelProperty("门店id,两者取一") private String storeId; - - @ApiModelProperty("钱包类型 1平安 2网商") - private Integer walletType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java new file mode 100644 index 000000000..da99bd058 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountBillPageVO.java @@ -0,0 +1,40 @@ +package com.cool.store.vo.wallet; + +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Objects; + +/** + *

+ * 账户交易列表分页VO + *

+ * + * @author wangff + * @since 2025/11/19 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountBillPageVO { + @ApiModelProperty("分页数据") + PageInfo data; + + @ApiModelProperty("收入") + private BigDecimal getAmount; + + @ApiModelProperty("支出") + private BigDecimal useAmount; + + public AccountBillPageVO(PageInfo data, Long getAmount, Long useAmount) { + this.data = data; + BigDecimal denominator = new BigDecimal(100); + this.getAmount = new BigDecimal(Objects.nonNull(getAmount) ? getAmount : 0).divide(denominator, 2, RoundingMode.HALF_UP); + this.useAmount = new BigDecimal(Objects.nonNull(useAmount) ? useAmount : 0).divide(denominator, 2, RoundingMode.HALF_UP); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java index e2a14ef65..89da73c43 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncMainSysServerImpl.java @@ -1,20 +1,16 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSONObject; -import com.cool.store.context.CurrentUserHolder; import com.cool.store.dao.*; import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.enums.point.PaymentMethodEnum; -import com.cool.store.exception.ServiceException; -import com.cool.store.mapper.FranchiseFeeMapper; -import com.cool.store.mapper.SignFranchiseMapper; +import com.cool.store.enums.wallet.YztStoreModel; import com.cool.store.mq.producer.SimpleMessageService; import com.cool.store.request.StoreMasterDTO; -import com.cool.store.request.StoreRequestBody; -import com.cool.store.service.OperationLogService; +import com.cool.store.request.wallet.CreateStoreRequest; import com.cool.store.service.SyncMainSysServer; -import com.cool.store.service.UserAuthMappingService; +import com.cool.store.service.wallet.WalletApiService; import com.cool.store.utils.poi.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -25,12 +21,6 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import static com.cool.store.enums.AuditExecuteEnum.FRANCHISEES; -import static com.cool.store.enums.ExtendFieldTypeEnum.*; /** * @Author: WangShuo @@ -48,39 +38,27 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { @Resource private SimpleMessageService simpleMessageService; @Resource - private SignFranchiseMapper signFranchiseMapper; - @Resource private BuildInformationDAO buildInformationDAO; @Resource private PointInfoDAO pointInfoDAO; @Resource - FranchiseFeeMapper franchiseFeeMapper; - @Resource - private OperationLogDAO operationLogDAO; - @Resource private OrderSysInfoDAO orderSysInfoDAO; @Resource - private ShopStageInfoDAO shopStageInfoDAO; - @Resource - private PreparationServiceImpl preparationService; - @Resource - private UserAuthMappingService userAuthMappingService; - @Resource - private CommonService commonService; - @Resource private ShopInfoDAO shopInfoDAO; @Resource private LineInfoDAO lineInfoDAO; @Value("${mybatis.configuration.variables.enterpriseId}") private String eid; @Resource - private StoreDao storeDao; + private SignFranchiseDAO signFranchiseDAO; @Resource - SignFranchiseDAO signFranchiseDAO; + private PointDetailInfoDAO pointDetailDAO; @Resource - PointDetailInfoDAO pointDetailDAO; + private QualificationsInfoDAO qualificationsInfoDAO; @Resource - QualificationsInfoDAO qualificationsInfoDAO; + private RegionDao regionDao; + @Resource + private WalletApiService walletApiService; @Override @Async @@ -207,10 +185,35 @@ public class SyncMainSysServerImpl implements SyncMainSysServer { } storeMasterDTO.setSignerInfo(signerInfo); simpleMessageService.send(JSONObject.toJSONString(storeMasterDTO), RocketMqTagEnum.ZXJP_CREATE_STORE); + // 推送营帐通 + pushStoreToYzt(shopInfo, lineInfoDO); } catch (Exception e) { log.info("asdStore_error:{},shopId:{}", e.getMessage(), shopId.toString()); } } - + /** + * 钱包推送营帐通创建门店 + */ + public void pushStoreToYzt(ShopInfoDO shopInfoDO, LineInfoDO lineInfoDO) { + try { + RegionDO regionDO = regionDao.getRegionById(shopInfoDO.getRegionId()); + CreateStoreRequest createStoreRequest = CreateStoreRequest.builder() + .outStoreId(shopInfoDO.getStoreId()) + .storeSn(shopInfoDO.getShopCode()) + .storeName(shopInfoDO.getShopName()) + .orgCode(String.valueOf(regionDO.getId())) + .orgName(regionDO.getName()) + .phoneNumber(lineInfoDO.getMobile()) + .storeMode(YztStoreModel.getYztStoreModel(Integer.valueOf(shopInfoDO.getFranchiseBrand()))) + .province(shopInfoDO.getProvinceCode()) + .city(shopInfoDO.getCityCode()) + .district(shopInfoDO.getDistrictCode()) + .address(shopInfoDO.getDetailAddress()) + .build(); + walletApiService.createStore(createStoreRequest); + } catch (Exception e) { + log.error("推送营帐通钱包创建门店失败", e); + } + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 897321f95..39b1070a4 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -83,17 +83,31 @@ public interface WalletService { /** * 查询账户列表 - * @param request 门店idRequest + * @param request 账户查询Request * @return 账户信息VO列表 */ - List getAccountList(StoreShopRequest request); + List getAccountList(AccountQueryRequest request); + + /** + * 根据账户编号查询账户信息 + * @param request 账户查询Request + * @return 账户信息VO + */ + AccountInfoVO getAccountInfo(AccountQueryRequest request); /** * 交易流水 * @param request 交易流水查询Request * @return 账户交易列表VO列表 */ - PageInfo getBillPage(AccountBillQueryRequest request); + AccountBillPageVO getBillPage(AccountBillQueryRequest request); + + /** + * 账户交易详情 + * @param request 交易详情查询Request + * @return 交易详情VO + */ + BillDetailDTO getBillDetail(BillDetailRequest request); /** * 密码维护 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 816cbb818..06df62dfd 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -59,7 +59,6 @@ public class WalletServiceImpl implements WalletService { private final ShopStageInfoDAO shopStageInfoDAO; private final ApplyLicenseMapper applyLicenseMapper; private final WalletApiService walletApiService; - private final RegionDao regionDao; private final WalletPaymentOrderDAO walletPaymentOrderDAO; private final LineInfoDAO lineInfoDAO; private final RedisUtilPool redisUtilPool; @@ -250,7 +249,7 @@ public class WalletServiceImpl implements WalletService { } @Override - public List getAccountList(StoreShopRequest request) { + public List getAccountList(AccountQueryRequest request) { String storeId = getStoreId(request); List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); return accountInfo.stream() @@ -264,7 +263,15 @@ public class WalletServiceImpl implements WalletService { } @Override - public PageInfo getBillPage(AccountBillQueryRequest request) { + public AccountInfoVO getAccountInfo(AccountQueryRequest request) { + String storeId = getStoreId(request); + List accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); + AccountInfoDTO accountInfoDTO = accountInfo.stream().filter(v -> v.getAccountNo().equals(request.getAccountNo())).findFirst().get(); + return BeanUtil.toBean(accountInfoDTO, AccountInfoVO.class); + } + + @Override + public AccountBillPageVO getBillPage(AccountBillQueryRequest request) { ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); if (Objects.isNull(shopInfo)) { throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); @@ -286,7 +293,13 @@ public class WalletServiceImpl implements WalletService { .pageSize(request.getPageSize()) .build(); BillPageDTO billPage = walletApiService.getBillPage(billPageRequest); - return toPageInfo(billPage.getPageData(), AccountBillListVO.class, billPage.getPage()); + PageInfo data = toPageInfo(billPage.getPageData(), AccountBillListVO.class, billPage.getPage()); + return new AccountBillPageVO(data, billPage.getGetAmount(), billPage.getUseAmount()); + } + + @Override + public BillDetailDTO getBillDetail(BillDetailRequest request) { + return walletApiService.getBillDetail(request); } @Override diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java index db5cbdafe..dba73b2c9 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java @@ -2,9 +2,9 @@ package com.cool.store.controller.webb; import com.cool.store.dto.wallet.AccountInfoDTO; import com.cool.store.dto.wallet.TradeRecordDTO; +import com.cool.store.request.wallet.AccountQueryRequest; import com.cool.store.request.wallet.CoolAccountBatchQueryRequest; import com.cool.store.request.wallet.CoolTradeRecodePageRequest; -import com.cool.store.request.wallet.StoreShopRequest; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; import com.cool.store.vo.wallet.AccountInfoVO; @@ -14,7 +14,6 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.util.List; /** @@ -34,7 +33,7 @@ public class WalletController { @ApiOperation("账户列表") @GetMapping("/accountList") - public ResponseResult> getAccountList(StoreShopRequest request) { + public ResponseResult> getAccountList(AccountQueryRequest request) { return ResponseResult.success(walletService.getAccountList(request)); } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 1bc90bad3..581e8c17d 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -1,5 +1,6 @@ package com.cool.store.controller.webc; +import com.cool.store.dto.wallet.BillDetailDTO; import com.cool.store.request.wallet.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; @@ -56,16 +57,28 @@ public class MiniWalletController { @ApiOperation("账户列表") @GetMapping("/accountList") - public ResponseResult> getAccountList(StoreShopRequest request) { + public ResponseResult> getAccountList(AccountQueryRequest request) { return ResponseResult.success(walletService.getAccountList(request)); } + @ApiOperation("账户详情") + @GetMapping("/accountInfo") + public ResponseResult getAccountInfo(AccountQueryRequest request) { + return ResponseResult.success(walletService.getAccountInfo(request)); + } + @ApiOperation("账户流水") @PostMapping("/billPage") - public ResponseResult> getBillPage(@RequestBody @Validated AccountBillQueryRequest request) { + public ResponseResult getBillPage(@RequestBody @Validated AccountBillQueryRequest request) { return ResponseResult.success(walletService.getBillPage(request)); } + @ApiOperation("交易流水详情") + @GetMapping("/billDetail") + public ResponseResult getBillDetail(BillDetailRequest request) { + return ResponseResult.success(walletService.getBillDetail(request)); + } + @ApiOperation("密码维护") @PostMapping("/passwordUpdate") public ResponseResult passwordUpdate(@RequestBody @Validated AccountPasswordRequest request) { From 27d8f9c6fa9735b1877e7cf204c95323040043a1 Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 19 Nov 2025 17:10:20 +0800 Subject: [PATCH 058/109] =?UTF-8?q?fix:=E9=97=A8=E5=BA=97=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E5=88=97=E8=A1=A8=E6=96=B0=E5=A2=9E=E5=BC=80=E6=88=B7?= =?UTF-8?q?=E6=80=BB=E8=A1=8C=E5=90=8D=E7=A7=B0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cool/store/dto/wallet/AccountInfoDTO.java | 3 +++ .../src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java index d972edfa0..ff0862a7b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/AccountInfoDTO.java @@ -56,6 +56,9 @@ public class AccountInfoDTO { @ApiModelProperty(value = "支行编号", required = true) private String bankNo; + + @ApiModelProperty(value = "总行名称") + private String headBankName; @ApiModelProperty(value = "账户状态 1:待提交 2:待鉴权 3:鉴权中 4:开通 5:开通失败", required = true) private Integer accountStatus; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java index f0b1cd03c..a21ccca68 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountInfoVO.java @@ -31,6 +31,9 @@ public class AccountInfoVO { @ApiModelProperty(value = "开户支行名称") private String bankName; + @ApiModelProperty(value = "总行名称") + private String headBankName; + @ApiModelProperty(value = "账户余额") private String totalAmount; From 8f1182f3ee48273e1dbf0eb58cd3702fd08376b5 Mon Sep 17 00:00:00 2001 From: wangff Date: Thu, 20 Nov 2025 10:15:34 +0800 Subject: [PATCH 059/109] =?UTF-8?q?fix:=E9=92=B1=E5=8C=85pc=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/webb/WalletController.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java index dba73b2c9..f76a344d5 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/WalletController.java @@ -1,17 +1,18 @@ package com.cool.store.controller.webb; import com.cool.store.dto.wallet.AccountInfoDTO; +import com.cool.store.dto.wallet.BillDetailDTO; import com.cool.store.dto.wallet.TradeRecordDTO; -import com.cool.store.request.wallet.AccountQueryRequest; -import com.cool.store.request.wallet.CoolAccountBatchQueryRequest; -import com.cool.store.request.wallet.CoolTradeRecodePageRequest; +import com.cool.store.request.wallet.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; +import com.cool.store.vo.wallet.AccountBillPageVO; import com.cool.store.vo.wallet.AccountInfoVO; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -37,6 +38,12 @@ public class WalletController { return ResponseResult.success(walletService.getAccountList(request)); } + @ApiOperation("账户详情") + @GetMapping("/accountInfo") + public ResponseResult getAccountInfo(AccountQueryRequest request) { + return ResponseResult.success(walletService.getAccountInfo(request)); + } + @ApiOperation("分页查询所有门店账户列表 支持条件查询") @PostMapping("/getAllAccountList") public ResponseResult> getAllAccountList(@RequestBody CoolAccountBatchQueryRequest request) { @@ -49,4 +56,15 @@ public class WalletController { return ResponseResult.success(walletService.getTradeRecordList(request)); } + @ApiOperation("账户流水") + @PostMapping("/billPage") + public ResponseResult getBillPage(@RequestBody @Validated AccountBillQueryRequest request) { + return ResponseResult.success(walletService.getBillPage(request)); + } + + @ApiOperation("交易流水详情") + @GetMapping("/billDetail") + public ResponseResult getBillDetail(BillDetailRequest request) { + return ResponseResult.success(walletService.getBillDetail(request)); + } } From 297c6e35c4b65348a609bf28cfe4a19ed6b0ee72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 20 Nov 2025 15:22:50 +0800 Subject: [PATCH 060/109] =?UTF-8?q?feat:=E9=80=9A=E8=BF=87=E9=97=A8?= =?UTF-8?q?=E5=BA=97Code=20=E6=9F=A5=E8=AF=A2=E5=AD=98=E9=87=8F=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E5=BC=80=E9=80=9A=E5=9F=BA=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/dao/wallet/OpenBankInfoDAO.java | 34 + .../dao/wallet/TempOpenWalletInfoDAO.java | 35 + .../mapper/wallet/OpenBankInfoMapper.java | 26 + .../wallet/TempOpenWalletInfoMapper.java | 18 + .../mapper/wallet/OpenBankInfoMapper.xml | 94 +++ .../wallet/TempOpenWalletInfoMapper.xml | 40 ++ .../store/dto/wallet/OpenBasicInfoDTO.java | 113 ++++ .../store/entity/wallet/OpenBankInfoDO.java | 436 +++++++++++++ .../entity/wallet/TempOpenWalletInfoDO.java | 599 ++++++++++++++++++ .../wallet/CoolOpenBasicInfoRequest.java | 128 ++++ .../wallet/OldStoreAccountCreateRequest.java | 5 +- .../store/service/wallet/WalletService.java | 15 + .../wallet/impl/WalletServiceImpl.java | 103 ++- .../controller/webc/MiniWalletController.java | 13 + 14 files changed, 1652 insertions(+), 7 deletions(-) create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java new file mode 100644 index 000000000..2ce16e542 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java @@ -0,0 +1,34 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.OpenBankInfoDO; +import com.cool.store.mapper.wallet.OpenBankInfoMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/11/20 10:37 + * @Version 1.0 + */ +@Repository +public class OpenBankInfoDAO { + + + @Resource + private OpenBankInfoMapper openBankInfoMapper; + + public int insertSelective(OpenBankInfoDO openBankInfoDO){ + return openBankInfoMapper.insertSelective(openBankInfoDO); + } + + public int updateByStoreCode(OpenBankInfoDO openBankInfoDO){ + return openBankInfoMapper.updateByStoreCode(openBankInfoDO); + } + + public OpenBankInfoDO getOpenBankInfo(String storeCode){ + return openBankInfoMapper.getOpenBankInfo(storeCode); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java new file mode 100644 index 000000000..2b3a440a9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/TempOpenWalletInfoDAO.java @@ -0,0 +1,35 @@ +package com.cool.store.dao.wallet; + +import com.cool.store.entity.wallet.TempOpenWalletInfoDO; +import com.cool.store.mapper.wallet.TempOpenWalletInfoMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/11/20 10:03 + * @Version 1.0 + */ +@Repository +@RequiredArgsConstructor +public class TempOpenWalletInfoDAO { + + @Resource + private TempOpenWalletInfoMapper tempOpenWalletInfoMapper; + + /** + * 根据门店编号查询临时开通钱包信息 + * @param StoreCode + * @return + */ + public TempOpenWalletInfoDO getTempOpenWalletInfoByStoreCode(String StoreCode) { + if (StoreCode == null){ + return null; + } + return tempOpenWalletInfoMapper.getTempOpenWalletInfoByStoreCode(StoreCode); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java new file mode 100644 index 000000000..fd70937e1 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/OpenBankInfoMapper.java @@ -0,0 +1,26 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.OpenBankInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface OpenBankInfoMapper extends Mapper { + + + /** + * 查询门店开户信息 + * @param storeCode + * @return + */ + OpenBankInfoDO getOpenBankInfo(@Param("storeCode") String storeCode); + + /** + * 根据门店编码更新 + * @param openBankInfoDO + * @return + */ + Integer updateByStoreCode(@Param("dto") OpenBankInfoDO openBankInfoDO); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java new file mode 100644 index 000000000..398685bed --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java @@ -0,0 +1,18 @@ +package com.cool.store.mapper.wallet; + +import com.cool.store.entity.wallet.TempOpenWalletInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface TempOpenWalletInfoMapper extends Mapper { + + /** + * 根据StoreCode查询临时开放钱包信息 + * @param StoreCode + * @return + */ + TempOpenWalletInfoDO getTempOpenWalletInfoByStoreCode(@Param("StoreCode") String StoreCode); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml new file mode 100644 index 000000000..a6e8ef04c --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE zxjp_open_bank_info + + + signer_name = #{dto.signerName}, + + + signer_id_card = #{dto.signerIdCard}, + + + signer_phone = #{dto.signerPhone}, + + + signer_id_card_front = #{dto.signerIdCardFront}, + + + signer_id_card_back = #{dto.signerIdCardBack}, + + + business_license_name = #{dto.businessLicenseName}, + + + business_license_code = #{dto.businessLicenseCode}, + + + business_license_photo = #{dto.businessLicensePhoto}, + + + legal_is_signer = #{dto.legalIsSigner}, + + + legal_name = #{dto.legalName}, + + + legal_id_card = #{dto.legalIdCard}, + + + legal_phone = #{dto.legalPhone}, + + + legal_id_card_front = #{dto.legalIdCardFront}, + + + legal_id_card_back = #{dto.legalIdCardBack}, + + + settlement_card = #{dto.settlementCard}, + + + bank_branch_name = #{dto.bankBranchName}, + + + bank_branch_code = #{dto.bankBranchCode}, + + + bank_reserved_phone = #{dto.bankReservedPhone}, + + + WHERE store_code = #{dto.storeCode} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml new file mode 100644 index 000000000..faca192af --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java new file mode 100644 index 000000000..c7316a388 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/OpenBasicInfoDTO.java @@ -0,0 +1,113 @@ +package com.cool.store.dto.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 开通网商需要的基本信息 + * @Author suzhuhong + * @Date 2025/11/20 10:49 + * @Version 1.0 + */ +@Data +public class OpenBasicInfoDTO { + + @ApiModelProperty(value = "门店编号") + private String storeCode; + + /** + * 签约人名称 + */ + @ApiModelProperty(value = "签约人名称") + private String signerName; + + /** + * 签约人身份证号码 + */ + @ApiModelProperty(value = "签约人身份证号码") + private String signerIdCard; + + /** + * 签约人手机号 + */ + @ApiModelProperty(value = "签约人手机号") + private String signerPhone; + + /** + * 签约人身份证正面 + */ + @ApiModelProperty(value = "签约人身份证正面") + private String signerIdCardFront; + + /** + * 签约人身份证反面 + */ + @ApiModelProperty(value = "签约人身份证反面") + private String signerIdCardBack; + + /** + * 营业执照名字 + */ + @ApiModelProperty(value = "营业执照名字") + private String businessLicenseName; + + /** + * 营业执照社会信用代码 + */ + @ApiModelProperty(value = "营业执照社会信用代码") + private String businessLicenseCode; + + /** + * 营业执照照片 + */ + @ApiModelProperty(value = "营业执照照片") + private String businessLicensePhoto; + + /** + * 法人是否签约人 + */ + @ApiModelProperty(value = "法人是否签约人") + private Integer legalIsSigner; + + /** + * 法人身份证正面 + */ + @ApiModelProperty(value = "法人身份证正面") + private String legalIdCardFront; + + /** + * 法人身份证反面 + */ + @ApiModelProperty(value = "法人身份证反面") + private String legalIdCardBack; + + /** + * 结算卡 + */ + @ApiModelProperty(value = "结算卡") + private String settlementCard; + + /** + * 开户支行名称 + */ + @ApiModelProperty(value = "开户支行名称") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @ApiModelProperty(value = "开户支行编号") + private String bankBranchCode; + + /** + * 银行预留手机号 + */ + @ApiModelProperty(value = "银行预留手机号") + private String bankReservedPhone; + + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java new file mode 100644 index 000000000..17cf0c560 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/OpenBankInfoDO.java @@ -0,0 +1,436 @@ +package com.cool.store.entity.wallet; + + +import javax.persistence.*; + +@Table(name = "zxjp_open_bank_info") +public class OpenBankInfoDO { + /** + * 门店编号 + */ + @Column(name = "store_code") + private String storeCode; + + /** + * 签约人名称 + */ + @Column(name = "signer_name") + private String signerName; + + /** + * 签约人身份证号码 + */ + @Column(name = "signer_id_card") + private String signerIdCard; + + /** + * 签约人手机号 + */ + @Column(name = "signer_phone") + private String signerPhone; + + /** + * 签约人身份证正面 + */ + @Column(name = "signer_id_card_front") + private String signerIdCardFront; + + /** + * 签约人身份证反面 + */ + @Column(name = "signer_id_card_back") + private String signerIdCardBack; + + /** + * 营业执照名字 + */ + @Column(name = "business_license_name") + private String businessLicenseName; + + /** + * 营业执照社会信用代码 + */ + @Column(name = "business_license_code") + private String businessLicenseCode; + + /** + * 营业执照照片 + */ + @Column(name = "business_license_photo") + private String businessLicensePhoto; + + /** + * 法人名称 + */ + @Column(name = "legal_name") + private String legalName; + + /** + * 法人身份证号码 + */ + @Column(name = "legal_id_card") + private String legalIdCard; + + /** + * 法人手机号 + */ + @Column(name = "legal_phone") + private String legalPhone; + + /** + * 法人是否签约人 + */ + @Column(name = "legal_is_signer") + private Integer legalIsSigner; + + /** + * 法人身份证正面 + */ + @Column(name = "legal_id_card_front") + private String legalIdCardFront; + + /** + * 法人身份证反面 + */ + @Column(name = "legal_id_card_back") + private String legalIdCardBack; + + /** + * 结算卡 + */ + @Column(name = "settlement_card") + private String settlementCard; + + /** + * 开户支行名称 + */ + @Column(name = "bank_branch_name") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @Column(name = "bank_branch_code") + private String bankBranchCode; + + /** + * 银行预留手机号 + */ + @Column(name = "bank_reserved_phone") + private String bankReservedPhone; + + + public String getLegalName() { + return legalName; + } + + public void setLegalName(String legalName) { + this.legalName = legalName; + } + + public String getLegalIdCard() { + return legalIdCard; + } + + public void setLegalIdCard(String legalIdCard) { + this.legalIdCard = legalIdCard; + } + + public String getLegalPhone() { + return legalPhone; + } + + public void setLegalPhone(String legalPhone) { + this.legalPhone = legalPhone; + } + + /** + * 获取门店编号 + * + * @return store_code - 门店编号 + */ + public String getStoreCode() { + return storeCode; + } + + /** + * 设置门店编号 + * + * @param storeCode 门店编号 + */ + public void setStoreCode(String storeCode) { + this.storeCode = storeCode; + } + + /** + * 获取签约人名称 + * + * @return signer_name - 签约人名称 + */ + public String getSignerName() { + return signerName; + } + + /** + * 设置签约人名称 + * + * @param signerName 签约人名称 + */ + public void setSignerName(String signerName) { + this.signerName = signerName; + } + + /** + * 获取签约人身份证号码 + * + * @return signer_id_card - 签约人身份证号码 + */ + public String getSignerIdCard() { + return signerIdCard; + } + + /** + * 设置签约人身份证号码 + * + * @param signerIdCard 签约人身份证号码 + */ + public void setSignerIdCard(String signerIdCard) { + this.signerIdCard = signerIdCard; + } + + /** + * 获取签约人手机号 + * + * @return signer_phone - 签约人手机号 + */ + public String getSignerPhone() { + return signerPhone; + } + + /** + * 设置签约人手机号 + * + * @param signerPhone 签约人手机号 + */ + public void setSignerPhone(String signerPhone) { + this.signerPhone = signerPhone; + } + + /** + * 获取签约人身份证正面 + * + * @return signer_id_card_front - 签约人身份证正面 + */ + public String getSignerIdCardFront() { + return signerIdCardFront; + } + + /** + * 设置签约人身份证正面 + * + * @param signerIdCardFront 签约人身份证正面 + */ + public void setSignerIdCardFront(String signerIdCardFront) { + this.signerIdCardFront = signerIdCardFront; + } + + /** + * 获取签约人身份证反面 + * + * @return signer_id_card_back - 签约人身份证反面 + */ + public String getSignerIdCardBack() { + return signerIdCardBack; + } + + /** + * 设置签约人身份证反面 + * + * @param signerIdCardBack 签约人身份证反面 + */ + public void setSignerIdCardBack(String signerIdCardBack) { + this.signerIdCardBack = signerIdCardBack; + } + + /** + * 获取营业执照名字 + * + * @return business_license_name - 营业执照名字 + */ + public String getBusinessLicenseName() { + return businessLicenseName; + } + + /** + * 设置营业执照名字 + * + * @param businessLicenseName 营业执照名字 + */ + public void setBusinessLicenseName(String businessLicenseName) { + this.businessLicenseName = businessLicenseName; + } + + /** + * 获取营业执照社会信用代码 + * + * @return business_license_code - 营业执照社会信用代码 + */ + public String getBusinessLicenseCode() { + return businessLicenseCode; + } + + /** + * 设置营业执照社会信用代码 + * + * @param businessLicenseCode 营业执照社会信用代码 + */ + public void setBusinessLicenseCode(String businessLicenseCode) { + this.businessLicenseCode = businessLicenseCode; + } + + /** + * 获取营业执照照片 + * + * @return business_license_photo - 营业执照照片 + */ + public String getBusinessLicensePhoto() { + return businessLicensePhoto; + } + + /** + * 设置营业执照照片 + * + * @param businessLicensePhoto 营业执照照片 + */ + public void setBusinessLicensePhoto(String businessLicensePhoto) { + this.businessLicensePhoto = businessLicensePhoto; + } + + /** + * 获取法人是否签约人 + * + * @return legal_is_signer - 法人是否签约人 + */ + public Integer getLegalIsSigner() { + return legalIsSigner; + } + + /** + * 设置法人是否签约人 + * + * @param legalIsSigner 法人是否签约人 + */ + public void setLegalIsSigner(Integer legalIsSigner) { + this.legalIsSigner = legalIsSigner; + } + + /** + * 获取法人身份证正面 + * + * @return legal_id_card_front - 法人身份证正面 + */ + public String getLegalIdCardFront() { + return legalIdCardFront; + } + + /** + * 设置法人身份证正面 + * + * @param legalIdCardFront 法人身份证正面 + */ + public void setLegalIdCardFront(String legalIdCardFront) { + this.legalIdCardFront = legalIdCardFront; + } + + /** + * 获取法人身份证反面 + * + * @return legal_id_card_back - 法人身份证反面 + */ + public String getLegalIdCardBack() { + return legalIdCardBack; + } + + /** + * 设置法人身份证反面 + * + * @param legalIdCardBack 法人身份证反面 + */ + public void setLegalIdCardBack(String legalIdCardBack) { + this.legalIdCardBack = legalIdCardBack; + } + + /** + * 获取结算卡 + * + * @return settlement_card - 结算卡 + */ + public String getSettlementCard() { + return settlementCard; + } + + /** + * 设置结算卡 + * + * @param settlementCard 结算卡 + */ + public void setSettlementCard(String settlementCard) { + this.settlementCard = settlementCard; + } + + /** + * 获取开户支行名称 + * + * @return bank_branch_name - 开户支行名称 + */ + public String getBankBranchName() { + return bankBranchName; + } + + /** + * 设置开户支行名称 + * + * @param bankBranchName 开户支行名称 + */ + public void setBankBranchName(String bankBranchName) { + this.bankBranchName = bankBranchName; + } + + /** + * 获取开户支行编号 + * + * @return bank_branch_code - 开户支行编号 + */ + public String getBankBranchCode() { + return bankBranchCode; + } + + /** + * 设置开户支行编号 + * + * @param bankBranchCode 开户支行编号 + */ + public void setBankBranchCode(String bankBranchCode) { + this.bankBranchCode = bankBranchCode; + } + + /** + * 获取银行预留手机号 + * + * @return bank_reserved_phone - 银行预留手机号 + */ + public String getBankReservedPhone() { + return bankReservedPhone; + } + + /** + * 设置银行预留手机号 + * + * @param bankReservedPhone 银行预留手机号 + */ + public void setBankReservedPhone(String bankReservedPhone) { + this.bankReservedPhone = bankReservedPhone; + } + + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java new file mode 100644 index 000000000..36f34c2ff --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/wallet/TempOpenWalletInfoDO.java @@ -0,0 +1,599 @@ +package com.cool.store.entity.wallet; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_temp_open_wallet_info") +public class TempOpenWalletInfoDO { + /** + * 门店编号 + */ + @Column(name = "store_code") + private String storeCode; + + /** + * 门店名称 + */ + @Column(name = "store_name") + private String storeName; + + /** + * 门店模式 + */ + @Column(name = "store_mode") + private String storeMode; + + /** + * 台账名称 + */ + @Column(name = "ledger_name") + private String ledgerName; + + /** + * 台账状态 + */ + @Column(name = "ledger_status") + private String ledgerStatus; + + /** + * 工商类型 + */ + @Column(name = "business_type") + private String businessType; + + /** + * 工商注册名称 + */ + @Column(name = "business_reg_name") + private String businessRegName; + + /** + * 营业执照编号 + */ + @Column(name = "business_license_no") + private String businessLicenseNo; + + /** + * 工商地址 + */ + @Column(name = "business_address") + private String businessAddress; + + /** + * 省 + */ + private String province; + + /** + * 市 + */ + private String city; + + /** + * 区 + */ + private String district; + + /** + * 法人名称 + */ + @Column(name = "legal_person_name") + private String legalPersonName; + + /** + * 法人证件号 + */ + @Column(name = "legal_person_id_no") + private String legalPersonIdNo; + + /** + * 身份证开始时间 + */ + @Column(name = "legal_id_start_date") + private Date legalIdStartDate; + + /** + * 身份证过期时间 + */ + @Column(name = "legal_id_expire_date") + private Date legalIdExpireDate; + + /** + * 结算人 + */ + @Column(name = "settler_name") + private String settlerName; + + /** + * 结算人证件号 + */ + @Column(name = "settler_id_no") + private String settlerIdNo; + + /** + * 结算人身份证开始时间 + */ + @Column(name = "settler_id_start_date") + private Date settlerIdStartDate; + + /** + * 结算人身份证过期时间 + */ + @Column(name = "settler_id_expire_date") + private Date settlerIdExpireDate; + + /** + * 开户支行名称 + */ + @Column(name = "bank_branch_name") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @Column(name = "bank_branch_no") + private String bankBranchNo; + + /** + * 结算卡 + */ + @Column(name = "settlement_card_no") + private String settlementCardNo; + + /** + * 银行预留手机号 + */ + @Column(name = "bank_reserved_phone") + private String bankReservedPhone; + + /** + * 分账关系 + */ + @Column(name = "accounting_relation") + private String accountingRelation; + + /** + * 获取门店编号 + * + * @return store_id - 门店编号 + */ + public String getStoreCode() { + return storeCode; + } + + public void setStoreCode(String storeCode) { + this.storeCode = storeCode; + } + + /** + * 获取门店名称 + * + * @return store_name - 门店名称 + */ + public String getStoreName() { + return storeName; + } + + /** + * 设置门店名称 + * + * @param storeName 门店名称 + */ + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + /** + * 获取门店模式 + * + * @return store_mode - 门店模式 + */ + public String getStoreMode() { + return storeMode; + } + + /** + * 设置门店模式 + * + * @param storeMode 门店模式 + */ + public void setStoreMode(String storeMode) { + this.storeMode = storeMode; + } + + /** + * 获取台账名称 + * + * @return ledger_name - 台账名称 + */ + public String getLedgerName() { + return ledgerName; + } + + /** + * 设置台账名称 + * + * @param ledgerName 台账名称 + */ + public void setLedgerName(String ledgerName) { + this.ledgerName = ledgerName; + } + + /** + * 获取台账状态 + * + * @return ledger_status - 台账状态 + */ + public String getLedgerStatus() { + return ledgerStatus; + } + + /** + * 设置台账状态 + * + * @param ledgerStatus 台账状态 + */ + public void setLedgerStatus(String ledgerStatus) { + this.ledgerStatus = ledgerStatus; + } + + /** + * 获取工商类型 + * + * @return business_type - 工商类型 + */ + public String getBusinessType() { + return businessType; + } + + /** + * 设置工商类型 + * + * @param businessType 工商类型 + */ + public void setBusinessType(String businessType) { + this.businessType = businessType; + } + + /** + * 获取工商注册名称 + * + * @return business_reg_name - 工商注册名称 + */ + public String getBusinessRegName() { + return businessRegName; + } + + /** + * 设置工商注册名称 + * + * @param businessRegName 工商注册名称 + */ + public void setBusinessRegName(String businessRegName) { + this.businessRegName = businessRegName; + } + + /** + * 获取营业执照编号 + * + * @return business_license_no - 营业执照编号 + */ + public String getBusinessLicenseNo() { + return businessLicenseNo; + } + + /** + * 设置营业执照编号 + * + * @param businessLicenseNo 营业执照编号 + */ + public void setBusinessLicenseNo(String businessLicenseNo) { + this.businessLicenseNo = businessLicenseNo; + } + + /** + * 获取工商地址 + * + * @return business_address - 工商地址 + */ + public String getBusinessAddress() { + return businessAddress; + } + + /** + * 设置工商地址 + * + * @param businessAddress 工商地址 + */ + public void setBusinessAddress(String businessAddress) { + this.businessAddress = businessAddress; + } + + /** + * 获取省 + * + * @return province - 省 + */ + public String getProvince() { + return province; + } + + /** + * 设置省 + * + * @param province 省 + */ + public void setProvince(String province) { + this.province = province; + } + + /** + * 获取市 + * + * @return city - 市 + */ + public String getCity() { + return city; + } + + /** + * 设置市 + * + * @param city 市 + */ + public void setCity(String city) { + this.city = city; + } + + /** + * 获取区 + * + * @return district - 区 + */ + public String getDistrict() { + return district; + } + + /** + * 设置区 + * + * @param district 区 + */ + public void setDistrict(String district) { + this.district = district; + } + + /** + * 获取法人名称 + * + * @return legal_person_name - 法人名称 + */ + public String getLegalPersonName() { + return legalPersonName; + } + + /** + * 设置法人名称 + * + * @param legalPersonName 法人名称 + */ + public void setLegalPersonName(String legalPersonName) { + this.legalPersonName = legalPersonName; + } + + /** + * 获取法人证件号 + * + * @return legal_person_id_no - 法人证件号 + */ + public String getLegalPersonIdNo() { + return legalPersonIdNo; + } + + /** + * 设置法人证件号 + * + * @param legalPersonIdNo 法人证件号 + */ + public void setLegalPersonIdNo(String legalPersonIdNo) { + this.legalPersonIdNo = legalPersonIdNo; + } + + /** + * 获取身份证开始时间 + * + * @return legal_id_start_date - 身份证开始时间 + */ + public Date getLegalIdStartDate() { + return legalIdStartDate; + } + + /** + * 设置身份证开始时间 + * + * @param legalIdStartDate 身份证开始时间 + */ + public void setLegalIdStartDate(Date legalIdStartDate) { + this.legalIdStartDate = legalIdStartDate; + } + + /** + * 获取身份证过期时间 + * + * @return legal_id_expire_date - 身份证过期时间 + */ + public Date getLegalIdExpireDate() { + return legalIdExpireDate; + } + + /** + * 设置身份证过期时间 + * + * @param legalIdExpireDate 身份证过期时间 + */ + public void setLegalIdExpireDate(Date legalIdExpireDate) { + this.legalIdExpireDate = legalIdExpireDate; + } + + /** + * 获取结算人 + * + * @return settler_name - 结算人 + */ + public String getSettlerName() { + return settlerName; + } + + /** + * 设置结算人 + * + * @param settlerName 结算人 + */ + public void setSettlerName(String settlerName) { + this.settlerName = settlerName; + } + + /** + * 获取结算人证件号 + * + * @return settler_id_no - 结算人证件号 + */ + public String getSettlerIdNo() { + return settlerIdNo; + } + + /** + * 设置结算人证件号 + * + * @param settlerIdNo 结算人证件号 + */ + public void setSettlerIdNo(String settlerIdNo) { + this.settlerIdNo = settlerIdNo; + } + + /** + * 获取结算人身份证开始时间 + * + * @return settler_id_start_date - 结算人身份证开始时间 + */ + public Date getSettlerIdStartDate() { + return settlerIdStartDate; + } + + /** + * 设置结算人身份证开始时间 + * + * @param settlerIdStartDate 结算人身份证开始时间 + */ + public void setSettlerIdStartDate(Date settlerIdStartDate) { + this.settlerIdStartDate = settlerIdStartDate; + } + + /** + * 获取结算人身份证过期时间 + * + * @return settler_id_expire_date - 结算人身份证过期时间 + */ + public Date getSettlerIdExpireDate() { + return settlerIdExpireDate; + } + + /** + * 设置结算人身份证过期时间 + * + * @param settlerIdExpireDate 结算人身份证过期时间 + */ + public void setSettlerIdExpireDate(Date settlerIdExpireDate) { + this.settlerIdExpireDate = settlerIdExpireDate; + } + + /** + * 获取开户支行名称 + * + * @return bank_branch_name - 开户支行名称 + */ + public String getBankBranchName() { + return bankBranchName; + } + + /** + * 设置开户支行名称 + * + * @param bankBranchName 开户支行名称 + */ + public void setBankBranchName(String bankBranchName) { + this.bankBranchName = bankBranchName; + } + + /** + * 获取开户支行编号 + * + * @return bank_branch_no - 开户支行编号 + */ + public String getBankBranchNo() { + return bankBranchNo; + } + + /** + * 设置开户支行编号 + * + * @param bankBranchNo 开户支行编号 + */ + public void setBankBranchNo(String bankBranchNo) { + this.bankBranchNo = bankBranchNo; + } + + /** + * 获取结算卡 + * + * @return settlement_card_no - 结算卡 + */ + public String getSettlementCardNo() { + return settlementCardNo; + } + + /** + * 设置结算卡 + * + * @param settlementCardNo 结算卡 + */ + public void setSettlementCardNo(String settlementCardNo) { + this.settlementCardNo = settlementCardNo; + } + + /** + * 获取银行预留手机号 + * + * @return bank_reserved_phone - 银行预留手机号 + */ + public String getBankReservedPhone() { + return bankReservedPhone; + } + + /** + * 设置银行预留手机号 + * + * @param bankReservedPhone 银行预留手机号 + */ + public void setBankReservedPhone(String bankReservedPhone) { + this.bankReservedPhone = bankReservedPhone; + } + + /** + * 获取分账关系 + * + * @return accounting_relation - 分账关系 + */ + public String getAccountingRelation() { + return accountingRelation; + } + + /** + * 设置分账关系 + * + * @param accountingRelation 分账关系 + */ + public void setAccountingRelation(String accountingRelation) { + this.accountingRelation = accountingRelation; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java new file mode 100644 index 000000000..3e1153c9e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/CoolOpenBasicInfoRequest.java @@ -0,0 +1,128 @@ +package com.cool.store.request.wallet; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/20 13:38 + * @Version 1.0 + */ +@Data +public class CoolOpenBasicInfoRequest { + + @ApiModelProperty(value = "门店编号") + private String storeCode; + + /** + * 签约人名称 + */ + @ApiModelProperty(value = "签约人名称") + private String signerName; + + /** + * 签约人身份证号码 + */ + @ApiModelProperty(value = "签约人身份证号码") + private String signerIdCard; + + /** + * 签约人手机号 + */ + @ApiModelProperty(value = "签约人手机号") + private String signerPhone; + + /** + * 签约人身份证正面 + */ + @ApiModelProperty(value = "签约人身份证正面") + private String signerIdCardFront; + + /** + * 签约人身份证反面 + */ + @ApiModelProperty(value = "签约人身份证反面") + private String signerIdCardBack; + + /** + * 营业执照名字 + */ + @ApiModelProperty(value = "营业执照名字") + private String businessLicenseName; + + /** + * 营业执照社会信用代码 + */ + @ApiModelProperty(value = "营业执照社会信用代码") + private String businessLicenseCode; + + /** + * 营业执照照片 + */ + @ApiModelProperty(value = "营业执照照片") + private String businessLicensePhoto; + + /** + * 法人是否签约人 + */ + @ApiModelProperty(value = "法人是否签约人") + private Integer legalIsSigner; + + + /** + * 法人名称 + */ + @ApiModelProperty(value = "法人名称") + private String legalName; + + /** + * 法人身份证号码 + */ + @ApiModelProperty(value = "法人身份证号码") + private String legalIdCard; + + /** + * 法人手机号 + */ + @ApiModelProperty(value = "法人手机号") + private String legalPhone; + + + /** + * 法人身份证正面 + */ + @ApiModelProperty(value = "法人身份证正面") + private String legalIdCardFront; + + /** + * 法人身份证反面 + */ + @ApiModelProperty(value = "法人身份证反面") + private String legalIdCardBack; + + /** + * 结算卡 + */ + @ApiModelProperty(value = "结算卡") + private String settlementCard; + + /** + * 开户支行名称 + */ + @ApiModelProperty(value = "开户支行名称") + private String bankBranchName; + + /** + * 开户支行编号 + */ + @ApiModelProperty(value = "开户支行编号") + private String bankBranchCode; + + /** + * 银行预留手机号 + */ + @ApiModelProperty(value = "银行预留手机号") + private String bankReservedPhone; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java index 4a7e5af72..eb70eee21 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java @@ -20,9 +20,6 @@ public class OldStoreAccountCreateRequest { @ApiModelProperty(value = "结算卡业务类型 枚举值:1:对公 2:对私(结算类型)", required = true, example = "1") private Integer accountType; - @ApiModelProperty(value = "开户类型:1企业 2个体工商户 3个人(小微商户)", required = true, example = "1") - private Integer businessType; - @ApiModelProperty(value = "营业执照号码,与企业证件类型对应的企业注册号(企业与个体户必传)") private String licenseNo; @@ -80,4 +77,6 @@ public class OldStoreAccountCreateRequest { @ApiModelProperty(value = "签约人证件国徽面图片链接", required = true) private String signatoryPhotoB; + + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java index 39b1070a4..5212f66a1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/WalletService.java @@ -157,4 +157,19 @@ public interface WalletService { * @return */ PageInfo getTradeRecordList(CoolTradeRecodePageRequest request); + + + /** + * 通过门店Code 查询存量客户开通基本信息 + * @param storeCode + * @return + */ + OpenBasicInfoDTO getOpenBasicInfo(String storeCode); + + /** + * 开通网商银行 + * @param request + * @return + */ + Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index 06df62dfd..fb9a255af 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -5,9 +5,15 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; +import com.cool.store.dao.store.StoreMasterSignerInfoDAO; +import com.cool.store.dao.wallet.OpenBankInfoDAO; +import com.cool.store.dao.wallet.TempOpenWalletInfoDAO; import com.cool.store.dao.wallet.WalletPaymentOrderDAO; import com.cool.store.dto.wallet.*; import com.cool.store.entity.*; +import com.cool.store.entity.store.StoreMasterSignerInfoDO; +import com.cool.store.entity.wallet.OpenBankInfoDO; +import com.cool.store.entity.wallet.TempOpenWalletInfoDO; import com.cool.store.entity.wallet.WalletPaymentOrderDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.point.ShopSubStageEnum; @@ -31,16 +37,14 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.sql.Date; import java.text.MessageFormat; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -63,6 +67,10 @@ public class WalletServiceImpl implements WalletService { private final LineInfoDAO lineInfoDAO; private final RedisUtilPool redisUtilPool; private final QualificationsInfoDAO qualificationsInfoDAO; + private final StoreDao storeDao; + private final StoreMasterSignerInfoDAO storeMasterSignerInfoDAO; + private final TempOpenWalletInfoDAO tempOpenWalletInfoDAO; + private final OpenBankInfoDAO openBankInfoDAO; private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @@ -407,6 +415,93 @@ public class WalletServiceImpl implements WalletService { return toPageInfo(tradeRecordListDTO.getPageData(), TradeRecordDTO.class, tradeRecordListDTO.getPage()); } + @Override + public OpenBasicInfoDTO getOpenBasicInfo(String storeCode) { + OpenBasicInfoDTO openBasicInfoDTO = new OpenBasicInfoDTO(); + //非首次提交 获取上次提交的信息 其他情况走主数据与营账通开通数据 + OpenBankInfoDO openBankInfo = openBankInfoDAO.getOpenBankInfo(storeCode); + if (Objects.nonNull(openBankInfo)){ + openBasicInfoDTO.setSignerName(openBankInfo.getSignerName()); + openBasicInfoDTO.setSignerIdCard(openBankInfo.getSignerIdCard()); + openBasicInfoDTO.setSignerPhone(openBankInfo.getSignerPhone()); + openBasicInfoDTO.setSignerIdCardFront(openBankInfo.getSignerIdCardFront()); + openBasicInfoDTO.setSignerIdCardBack(openBankInfo.getSignerIdCardBack()); + openBasicInfoDTO.setBusinessLicenseName(openBankInfo.getBusinessLicenseName()); + openBasicInfoDTO.setBusinessLicenseCode(openBankInfo.getBusinessLicenseCode()); + openBasicInfoDTO.setSettlementCard(openBankInfo.getSettlementCard()); + openBasicInfoDTO.setBankBranchName(openBankInfo.getBankBranchName()); + openBasicInfoDTO.setBankBranchCode(openBankInfo.getBankBranchCode()); + openBasicInfoDTO.setBankReservedPhone(openBankInfo.getBankReservedPhone()); + return openBasicInfoDTO; + } + //先查询当前门店 + StoreDO store = storeDao.getByStoreNum(storeCode); + if (Objects.isNull( store)){ + return null; + } + Map signerMapByStoreIds = storeMasterSignerInfoDAO.getSignerMapByStoreIds(Collections.singletonList(store.getStoreId())); + StoreMasterSignerInfoDO signerInfoDO = signerMapByStoreIds.get(store.getStoreId()); + + if (Objects.nonNull(signerInfoDO)){ + openBasicInfoDTO.setSignerName(signerInfoDO.getSigner1Name()); + openBasicInfoDTO.setSignerIdCard(signerInfoDO.getSigner1IdCardNo()); + openBasicInfoDTO.setSignerPhone(signerInfoDO.getSigner1Mobile()); + openBasicInfoDTO.setSignerIdCardFront(signerInfoDO.getSigner1IdCardFront()); + openBasicInfoDTO.setSignerIdCardBack(signerInfoDO.getSigner1IdCardBack()); + } + TempOpenWalletInfoDO tempOpenWalletInfoByStoreCode = tempOpenWalletInfoDAO.getTempOpenWalletInfoByStoreCode(storeCode); + if (Objects.nonNull(tempOpenWalletInfoByStoreCode)){ + openBasicInfoDTO.setBusinessLicenseName(tempOpenWalletInfoByStoreCode.getBusinessRegName()); + openBasicInfoDTO.setBusinessLicenseCode(tempOpenWalletInfoByStoreCode.getBusinessLicenseNo()); + openBasicInfoDTO.setSettlementCard(tempOpenWalletInfoByStoreCode.getSettlementCardNo()); + openBasicInfoDTO.setBankBranchName(tempOpenWalletInfoByStoreCode.getBankBranchName()); + openBasicInfoDTO.setBankBranchCode(tempOpenWalletInfoByStoreCode.getBankBranchNo()); + openBasicInfoDTO.setBankReservedPhone(tempOpenWalletInfoByStoreCode.getBankReservedPhone()); + } + return openBasicInfoDTO; + } + + + @Override + public Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request) { + //首先存储提交的信息 + OpenBankInfoDO openBankInfoDO = new OpenBankInfoDO(); + BeanUtil.copyProperties(request, openBankInfoDO); + //查询是否有提交过 + OpenBankInfoDO openBankInfo = openBankInfoDAO.getOpenBankInfo(request.getStoreCode()); + if (Objects.isNull(openBankInfo)){ + openBankInfoDAO.insertSelective(openBankInfoDO); + }else { + openBankInfoDAO.updateByStoreCode(openBankInfoDO); + } + OldStoreAccountCreateRequest oldStoreAccountCreateRequest = new OldStoreAccountCreateRequest(); + StoreDO store = storeDao.getByStoreNum(request.getStoreCode()); + oldStoreAccountCreateRequest.setOutStoreId(store.getStoreId()); + oldStoreAccountCreateRequest.setPhoneNumber(request.getSignerPhone()); + oldStoreAccountCreateRequest.setAccountType(2); + oldStoreAccountCreateRequest.setLicenseNo(request.getBusinessLicenseCode()); + oldStoreAccountCreateRequest.setLicenseName(request.getBusinessLicenseName()); + oldStoreAccountCreateRequest.setLegalName(request.getLegalName()); + oldStoreAccountCreateRequest.setLegalNo(request.getLegalIdCard()); + oldStoreAccountCreateRequest.setLegalPhone(request.getLegalPhone()); + //账户简称使用营业执照名称 + oldStoreAccountCreateRequest.setAccountAliasName(request.getBusinessLicenseName()); + oldStoreAccountCreateRequest.setAccountCardNo(request.getSettlementCard()); + oldStoreAccountCreateRequest.setAccountPhone(request.getBankReservedPhone()); + oldStoreAccountCreateRequest.setBankNo(request.getBankBranchCode()); + oldStoreAccountCreateRequest.setBankName(request.getBankBranchName()); + oldStoreAccountCreateRequest.setCertPhotoA(request.getLegalIdCardFront()); + oldStoreAccountCreateRequest.setCertPhotoB(request.getLegalIdCardBack()); + oldStoreAccountCreateRequest.setLicensePhoto(request.getBusinessLicensePhoto()); + oldStoreAccountCreateRequest.setSignatoryName(request.getSignerName()); + oldStoreAccountCreateRequest.setSignatoryPhone(request.getSignerPhone()); + oldStoreAccountCreateRequest.setSignatoryNo(request.getSignerIdCard()); + oldStoreAccountCreateRequest.setSignatoryPhotoA(request.getSignerIdCardFront()); + oldStoreAccountCreateRequest.setSignatoryPhotoB(request.getSignerIdCardBack()); + walletApiService.oldStoreOpenAccount(oldStoreAccountCreateRequest); + return Boolean.TRUE; + } + public String getStoreId(StoreShopRequest request) { String storeId = request.getStoreId(); if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java index 581e8c17d..699abc191 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniWalletController.java @@ -1,6 +1,7 @@ package com.cool.store.controller.webc; import com.cool.store.dto.wallet.BillDetailDTO; +import com.cool.store.dto.wallet.OpenBasicInfoDTO; import com.cool.store.request.wallet.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.wallet.WalletService; @@ -108,4 +109,16 @@ public class MiniWalletController { public ResponseResult withDrawer(@RequestBody @Validated WalletWithDrawerRequest request) { return ResponseResult.success(walletService.withDrawer(request)); } + @ApiOperation("根据门店编码查询开通基础信息") + @GetMapping("/getOpenBasicInfo") + public ResponseResult getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) { + return ResponseResult.success(walletService.getOpenBasicInfo(storeCode)); + } + + @ApiOperation("提交开通") + @PostMapping("/openOnlineBankAccount") + public ResponseResult openOnlineBankAccount(@RequestBody @Validated CoolOpenBasicInfoRequest request) { + return ResponseResult.success(walletService.openOnlineBankAccount(request)); + } + } From 546b95b6bb5b8c39eaebd08d652b2e573b0b92a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 20 Nov 2025 15:39:18 +0800 Subject: [PATCH 061/109] =?UTF-8?q?feat:=E9=80=9A=E8=BF=87=E9=97=A8?= =?UTF-8?q?=E5=BA=97Code=20=E6=9F=A5=E8=AF=A2=E5=AD=98=E9=87=8F=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E5=BC=80=E9=80=9A=E5=9F=BA=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallet/TempOpenWalletInfoMapper.java | 2 +- .../mapper/wallet/TempOpenWalletInfoMapper.xml | 2 +- .../store/controller/webc/TestController.java | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java index 398685bed..558e5fb1e 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/wallet/TempOpenWalletInfoMapper.java @@ -11,7 +11,7 @@ public interface TempOpenWalletInfoMapper extends Mapper { * @param StoreCode * @return */ - TempOpenWalletInfoDO getTempOpenWalletInfoByStoreCode(@Param("StoreCode") String StoreCode); + TempOpenWalletInfoDO getTempOpenWalletInfoByStoreCode(@Param("storeCode") String StoreCode); diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml index faca192af..f68b95773 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/TempOpenWalletInfoMapper.xml @@ -33,7 +33,7 @@
diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java index 5d56f85f0..14239b0fd 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java @@ -7,6 +7,7 @@ import com.cool.store.dto.OpenCityDTO; import com.cool.store.dto.ocr.InvoiceDTO; import com.cool.store.dto.store.StoreUserPositionDTO; import com.cool.store.dto.store.StoreUserUpdateDTO; +import com.cool.store.dto.wallet.OpenBasicInfoDTO; import com.cool.store.entity.*; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.IDCardSideEnum; @@ -19,6 +20,7 @@ import com.cool.store.exception.ServiceException; import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.HyOpenAreaInfoMapper; import com.cool.store.request.ShopListSuccessOpenRequest; +import com.cool.store.request.wallet.CoolOpenBasicInfoRequest; import com.cool.store.request.xfsgFirstOrderListRequest; import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.request.xgj.ReceiptCallBackRequest; @@ -27,6 +29,7 @@ import com.cool.store.response.ResponseResult; import com.cool.store.response.caipin.StoreUserResponse; import com.cool.store.response.xfsgFirstOderListResponse; import com.cool.store.service.*; +import com.cool.store.service.wallet.WalletService; import com.cool.store.utils.poi.ExcelUtil; import com.cool.store.utils.poi.StringUtils; import com.cool.store.vo.RegionPathNameVO; @@ -40,6 +43,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.validation.constraints.NotBlank; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.time.LocalDate; @@ -393,4 +397,18 @@ public class TestController { List storeUserUpdateDTOS = JSONObject.parseArray(JSONObject.toJSONString(storeUser), StoreUserUpdateDTO.class); StoreUserResponse storeUserResponse = thirdFoodService.pushStoreUser(storeUserUpdateDTOS); } + + @Resource + WalletService walletService; + @ApiOperation("根据门店编码查询开通基础信息") + @GetMapping("/getOpenBasicInfo") + public ResponseResult getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) { + return ResponseResult.success(walletService.getOpenBasicInfo(storeCode)); + } + + @ApiOperation("提交开通") + @PostMapping("/openOnlineBankAccount") + public ResponseResult openOnlineBankAccount(@RequestBody @Validated CoolOpenBasicInfoRequest request) { + return ResponseResult.success(walletService.openOnlineBankAccount(request)); + } } From 4581aeb85a4dd8938216e130fee37a420e0205af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 20 Nov 2025 15:48:31 +0800 Subject: [PATCH 062/109] =?UTF-8?q?feat:=E8=80=81=E5=BA=97=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E5=BC=80=E9=80=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/request/wallet/OldStoreAccountCreateRequest.java | 1 + .../com/cool/store/service/wallet/impl/WalletServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java index eb70eee21..e3b67b5fe 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/wallet/OldStoreAccountCreateRequest.java @@ -79,4 +79,5 @@ public class OldStoreAccountCreateRequest { + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java index fb9a255af..bf7e5f8d3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/wallet/impl/WalletServiceImpl.java @@ -20,6 +20,7 @@ import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.enums.wallet.BankAccountTypeEnum; import com.cool.store.enums.wallet.BankBusinessTypeEnum; +import com.cool.store.enums.wallet.YztStoreModel; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.ApplyLicenseMapper; import com.cool.store.request.wallet.*; @@ -493,7 +494,6 @@ public class WalletServiceImpl implements WalletService { oldStoreAccountCreateRequest.setCertPhotoA(request.getLegalIdCardFront()); oldStoreAccountCreateRequest.setCertPhotoB(request.getLegalIdCardBack()); oldStoreAccountCreateRequest.setLicensePhoto(request.getBusinessLicensePhoto()); - oldStoreAccountCreateRequest.setSignatoryName(request.getSignerName()); oldStoreAccountCreateRequest.setSignatoryPhone(request.getSignerPhone()); oldStoreAccountCreateRequest.setSignatoryNo(request.getSignerIdCard()); oldStoreAccountCreateRequest.setSignatoryPhotoA(request.getSignerIdCardFront()); From 38a669dff9a6b0e8966e50c6fb126e167c060659 Mon Sep 17 00:00:00 2001 From: wangff Date: Thu, 20 Nov 2025 16:44:24 +0800 Subject: [PATCH 063/109] =?UTF-8?q?fix:=E5=BC=80=E5=BA=97=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E7=BD=91=E5=95=86=E5=BC=80=E9=80=9A=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=A0=87=E8=AF=86=E7=BC=93=E5=AD=98=EF=BC=9B=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E8=B4=A6=E6=88=B7=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E4=BF=AE=E6=94=B9=EF=BC=9B=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E9=97=A8=E5=BA=97=E7=BC=96=E7=A0=81=E6=9F=A5=E8=AF=A2=E5=BC=80?= =?UTF-8?q?=E9=80=9A=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9B=E7=BD=91=E5=95=86=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9=EF=BC=9B?= =?UTF-8?q?=20feat:=E7=BD=91=E5=95=86=E6=BF=80=E6=B4=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/constants/RedisConstant.java | 7 +- .../store/enums/wechat/WalletTypeEnum.java | 25 ++ .../store/dao/wallet/OpenBankInfoDAO.java | 18 + .../mapper/wallet/OpenBankInfoMapper.xml | 8 + .../store/dto/wallet/OpenBasicInfoDTO.java | 7 +- .../cool/store/dto/wallet/TextMsgSendDTO.java | 24 ++ .../store/entity/wallet/OpenBankInfoDO.java | 330 +----------------- .../request/wallet/AccountAddTagRequest.java | 9 - .../wallet/CoolOpenBasicInfoRequest.java | 2 + .../request/wallet/TextMsgSendRequest.java | 22 ++ .../cool/store/vo/wallet/AccountDataVO.java | 27 ++ .../service/wallet/WalletApiService.java | 10 +- .../store/service/wallet/WalletService.java | 11 +- .../wallet/impl/WalletServiceImpl.java | 150 ++++++-- .../controller/webb/WalletController.java | 2 +- .../controller/webc/MiniWalletController.java | 20 +- .../store/controller/webc/TestController.java | 2 +- 17 files changed, 314 insertions(+), 360 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/wallet/TextMsgSendDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/wallet/TextMsgSendRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/wallet/AccountDataVO.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java index 1c6dfb955..f153d1050 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java @@ -291,7 +291,12 @@ public class RedisConstant { public static final String HUO_MA_TOKEN= "huo_ma_token:{0}"; /** - * 钱包开通失败原因 wallet_open_fail:storeId:1/2 1平安/2网商 + * 钱包开通失败/打标失败原因 wallet_open_fail:storeId:1/2 1平安/2网商 */ public static final String WALLET_OPEN_FAIL = "wallet_open_fail:{0}:{1}"; + + /** + * 打标接口创建网商账户失败标识 wallet_online_bank_tag_fail:storeId + */ + public static final String WALLET_ONLINE_BANK_TAG_FAIL = "wallet_online_bank_tag_fail:{0}"; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java new file mode 100644 index 000000000..74159ab59 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/wechat/WalletTypeEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums.wechat; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 钱包类型 + *

+ * + * @author wangff + * @since 2025/11/20 + */ +@Getter +@AllArgsConstructor +public enum WalletTypeEnum { + + PING_AN(1, "平安银行"), + ONLINE_BANK(2, "网商银行"), + ; + + private final Integer type; + + private final String desc; +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java index 2ce16e542..e558c2b53 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/wallet/OpenBankInfoDAO.java @@ -2,9 +2,12 @@ package com.cool.store.dao.wallet; import com.cool.store.entity.wallet.OpenBankInfoDO; import com.cool.store.mapper.wallet.OpenBankInfoMapper; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; +import java.util.Objects; /** * @Author suzhuhong @@ -30,5 +33,20 @@ public class OpenBankInfoDAO { return openBankInfoMapper.getOpenBankInfo(storeCode); } + public OpenBankInfoDO getOpenBankInfoByStoreId(String storeId) { + return openBankInfoMapper.selectOne(OpenBankInfoDO.builder().storeId(storeId).build()); + } + public int insertOrUpdateByStoreId(OpenBankInfoDO openBankInfoDO) { + if (StringUtils.isBlank(openBankInfoDO.getStoreId())) { + return 0; + } + if (Objects.isNull(getOpenBankInfo(openBankInfoDO.getStoreId()))) { + return openBankInfoMapper.insertSelective(openBankInfoDO); + } else { + Example example = new Example(OpenBankInfoDO.class); + example.createCriteria().andEqualTo("storeId", openBankInfoDO.getStoreId()); + return openBankInfoMapper.updateByExampleSelective(openBankInfoDO, example); + } + } } diff --git a/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml index a6e8ef04c..4c8834cb8 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/wallet/OpenBankInfoMapper.xml @@ -6,6 +6,7 @@ WARNING - @mbg.generated --> + @@ -24,6 +25,7 @@ +