diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ClaimStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ClaimStatusEnum.java new file mode 100644 index 000000000..05223fcd9 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ClaimStatusEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums; + +/** + * @Author: WangShuo + * @Date: 2025/05/30/15:52 + * @Version 1.0 + * @注释: + */ +public enum ClaimStatusEnum { + TO_BE_CLAIMED(0,"待认领"), + Claimed(1,"已认领"); + private Integer code; + private String message; + ClaimStatusEnum(Integer code,String message){ + this.code = code; + this.message =message; + } + public Integer getCode(){ + return code; + } + public String getMessage(){ + return message; + } + +} 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 95d0ef792..dab4b338c 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 @@ -263,6 +263,14 @@ public enum ErrorCodeEnum { USER_ACCOUNT_WAIT_AUDIT(151015, "账号信息等待审核",null), SHOP_HAVE_NOT_OVER_ACCORDING(1511014,"该加盟商下有未结束跟进的门店,请先结束门店",null), MOBILE_NOT_EXIST(151016,"手机号不存在,请先维护手机号!",null), + + API_CALL_ERROR(1511020,"接口调用错误",null), + ADD_PAY_INFO_FAIL(1511021,"添加缴费信息失败",null), + UPDATE_ERROR(1511022,"修改信息失败",null), + CLAIM_STATUS_ERROR(1511023,"当前状态为已认领,不能进行操作",null), + PAY_USER_NAME_ERROR(1511024,"付款人最多为2人",null), + DELETE_ERROR(1511025,"删除信息失败",null), + ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java index 8ff73fd9b..054c32b24 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java @@ -3,6 +3,8 @@ package com.cool.store.utils; import cn.hutool.core.util.IdUtil; import org.apache.commons.lang3.StringUtils; +import java.util.Random; + /** * 唯一性ID工具类 * @@ -26,5 +28,23 @@ public class UUIDUtils { long uuid = (int) (Math.random() * 90000000 + 10000000); return uuid; } + // 生成 UUID 方法 + public static String generateCustomUUID() { + // 获取当前时间戳(毫秒) + long timestamp = System.currentTimeMillis(); + // 生成4位随机数字(0000 - 9999) + int randomNumber = new Random().nextInt(10000); + String randomDigits = String.format("%04d", randomNumber); + + // 生成2个随机大写字母 + String randomLetters = ""; + Random random = new Random(); + for (int i = 0; i < 2; i++) { + char c = (char) ('A' + random.nextInt(26)); + randomLetters += c; + } + + return timestamp + randomDigits + randomLetters; + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java index 60f1a8612..6473517bd 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java @@ -5,6 +5,7 @@ import com.cool.store.mapper.LinePayMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import java.util.*; @@ -69,4 +70,21 @@ public class LinePayDAO { List linePayDO = linePayMapper.getLinePayByLineIds(null,shopIds,payBusinessType); return linePayDO.stream().collect(Collectors.toMap(LinePayDO::getShopId, linePayDO1 -> linePayDO1, (o, n) -> o)); } + public ListgetFranchiseFeePayInfoByShopId(Long shopId){ + if (Objects.isNull(shopId)){ + return null; + } + List franchiseFeePayInfoByShopId = linePayMapper.getFranchiseFeePayInfoByShopId(shopId); + if (CollectionUtils.isEmpty(franchiseFeePayInfoByShopId)){ + return new ArrayList<>(); + } + return franchiseFeePayInfoByShopId; + } + + public LinePayDO getById(Long id) { + return linePayMapper.selectByPrimaryKey(id); + } + public Integer deleteById(Long id,String userId) { + return linePayMapper.deleteById(id,userId); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java index 6368ea507..7dc71e46f 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java @@ -2,6 +2,7 @@ package com.cool.store.mapper; import com.cool.store.entity.LinePayDO; import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; import java.util.List; @@ -9,7 +10,7 @@ import java.util.List; * @author wxp * @date 2024-03-27 09:25 */ -public interface LinePayMapper { +public interface LinePayMapper { /** * * 默认插入方法,只会给有值的字段赋值 @@ -55,4 +56,8 @@ public interface LinePayMapper { void updateByPidAndLid(@Param("lineId") Long lineId, @Param("partnerId") String partnerId, @Param("auditId") Long auditId); + + ListgetFranchiseFeePayInfoByShopId(@Param("shopId") Long shopId); + + Integer deleteById(@Param("id") Long id,@Param("userId")String userId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml index dc6f5fb79..0b407d47c 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml @@ -28,17 +28,19 @@ + id,shop_id, partner_id, line_id, pay_status, pay_type, pay_user_name, pay_account, bank_code, bank_name, branch_bank_code, branch_bank_name, pay_time, pay_pic, promise_pic, create_time, - update_time, create_user_id, update_user_id, deleted,pay_business_type,amount,combined_field,xgj_claim_status,payment_receipt_code,pay_serial_number + update_time, create_user_id, update_user_id, deleted,pay_business_type,amount,combined_field,xgj_claim_status,payment_receipt_code,pay_serial_number, + remark delete @@ -114,6 +116,18 @@ combined_field, + + xgj_claim_status, + + + payment_receipt_code, + + + pay_serial_number, + + + remark + @@ -178,6 +192,18 @@ #{combinedField,jdbcType=VARCHAR}, + + #{xgjClaimStatus,jdbcType=TINYINT}, + + + #{paymentReceiptCode,jdbcType=VARCHAR}, + + + #{paySerialNumber,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR} + @@ -240,6 +266,18 @@ combined_field = #{combinedField,jdbcType=VARCHAR}, + + xgj_claim_status = #{xgjClaimStatus,jdbcType=TINYINT}, + + + payment_receipt_code = #{paymentReceiptCode,jdbcType=VARCHAR}, + + + pay_serial_number = #{paySerialNumber,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} @@ -349,4 +387,10 @@ + + + update xfsg_line_pay set deleted = 1 ,update_time = now(),update_user_id = #{userId} where id = #{id} + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java index 97ba895a9..8376a28b1 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java @@ -37,7 +37,7 @@ public class LinePayDO implements Serializable { @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") private Integer payStatus; - @ApiModelProperty("支付方式 1微信 2银行转账") + @ApiModelProperty("支付方式 1微信 2银行转账 3-线下支付,4-线上支付") private Integer payType; @ApiModelProperty("付款人姓名") @@ -102,4 +102,7 @@ public class LinePayDO implements Serializable { @ApiModelProperty("交易流水号") private String paySerialNumber; + @Column(name = "remark") + private String remark; + } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java index 3195c8269..c2901fdbb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java @@ -1,17 +1,26 @@ package com.cool.store.request; +import com.cool.store.entity.LinePayDO; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.apache.tika.utils.DateUtils; import javax.validation.constraints.NotNull; import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Objects; + +import static com.cool.store.enums.WorkflowSubStageStatusEnum.PAY_DEPOSIT_50; @Data public class LinePaySubmitRequest { + private Long id; + @ApiModelProperty("xfsg_user_info.partner_id") private String partnerId; @@ -42,7 +51,6 @@ public class LinePaySubmitRequest { @ApiModelProperty("支行名称") private String branchBankName; - //正新缴纳加盟费后续:payTime,payPic废弃使用combinedField @ApiModelProperty("缴纳时间") private String payTime; @@ -52,15 +60,49 @@ public class LinePaySubmitRequest { @ApiModelProperty("承诺书图片") private String promisePic; - @ApiModelProperty("支付类型 0-缴纳意向金 1-缴纳加盟费 2-装修款") + @ApiModelProperty("支付类型 1-缴纳加盟费") private Integer payBusinessType; @ApiModelProperty("铺位id") private Long shopId; @ApiModelProperty("缴费金额") private BigDecimal amount; + //废弃 @ApiModelProperty("组合字段:缴费时间+付款截图,数组") private String combinedField; @ApiModelProperty("交易流水号") private String paySerialNumber; + + @ApiModelProperty("备注") + private String remark; + + /** + * @Auther: wangshuo + * @Date: 2025/5/30 + * @description:加盟费使用 + */ + public static LinePayDO convertFranchiseFee(LinePaySubmitRequest request) { + LinePayDO linePayDO = new LinePayDO(); + linePayDO.setId(request.getId()); + linePayDO.setPartnerId(request.getPartnerId()); + linePayDO.setLineId(request.getLineId()); + linePayDO.setPayStatus(PAY_DEPOSIT_50.getCode()); + linePayDO.setPayType(request.getPayType()); + linePayDO.setPayUserName(request.getPayUserName()); + linePayDO.setPayAccount(request.getPayAccount()); + linePayDO.setBankCode(request.getBankCode()); + linePayDO.setBankName(request.getBankName()); + linePayDO.setBranchBankCode(request.getBranchBankCode()); + linePayDO.setBranchBankName(request.getBranchBankName()); + try { + linePayDO.setPayTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(request.getPayTime())); + } catch (ParseException e) { + throw new RuntimeException(e); + } + linePayDO.setPayPic(request.getPayPic()); + linePayDO.setPaySerialNumber(request.getPaySerialNumber()); + linePayDO.setPayBusinessType(request.getPayBusinessType()); + linePayDO.setRemark(request.getRemark()); + return linePayDO; + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeePayInfoResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeePayInfoResponse.java new file mode 100644 index 000000000..36da1059f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeePayInfoResponse.java @@ -0,0 +1,71 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Author: WangShuo + * @Date: 2025/05/30/16:51 + * @Version 1.0 + * @注释: + */ +@Data +public class FranchiseFeePayInfoResponse { + private Long id; + + private String partnerName; + @ApiModelProperty("xfsg_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("line_info.id") + private Long lineId; + + @ApiModelProperty("铺位id") + private Long shopId; + + @ApiModelProperty("支付方式 1微信 2银行转账,3-线上支付,4-线下支持") + private Integer payType; + + @ApiModelProperty("付款人姓名/加盟商姓名") + private String payUserName; + + @ApiModelProperty("付款账号") + private String payAccount; + + @ApiModelProperty("开户行code") + private String bankCode; + + @ApiModelProperty("开户行名称") + private String bankName; + + @ApiModelProperty("支行code") + private String branchBankCode; + + @ApiModelProperty("支行名称") + private String branchBankName; + + @ApiModelProperty("缴纳时间") + private String payTime; + + @ApiModelProperty("付款截图") + private String payPic; + + @ApiModelProperty("缴费金额") + private BigDecimal amount; + + @ApiModelProperty("交易流水号") + private String paySerialNumber; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("提交时间") + private Date createTime; + + @ApiModelProperty("认领状态 0-待认领 1-已认领") + private Integer xgjClaimStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java index 8d60dfa10..0decbfc60 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java @@ -6,12 +6,13 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.persistence.*; +import java.math.BigDecimal; import java.util.Date; @Data public class FranchiseFeeResponse { private Long id; - @ApiModelProperty("shopId") + @ApiModelProperty("shopId门店id") private Long shopId; @ApiModelProperty("payId") private Long payId; @@ -53,6 +54,17 @@ public class FranchiseFeeResponse { @ApiModelProperty("铺位面积") private String pointArea; + @ApiModelProperty("收款状态 0-待缴费 1-部分缴款 2-已完成") + private Integer xgjCollectionStatus; + + @ApiModelProperty("剩余待缴金额") + private BigDecimal xgjRemainderPayableAmount; + + @ApiModelProperty("新管家已缴金额") + private BigDecimal xgjFeesPaid; + + + @Data public static class LinePay{ @ApiModelProperty("") @@ -185,6 +197,9 @@ public class FranchiseFeeResponse { franchiseFeeResponse.setUpdateTime(franchiseFeeDO.getUpdateTime()); franchiseFeeResponse.setFirstYearManageFee(franchiseFeeDO.getFirstYearManageFee()); franchiseFeeResponse.setDiscountReason(franchiseFeeDO.getDiscountReason()); + franchiseFeeResponse.setXgjCollectionStatus(franchiseFeeDO.getXgjCollectionStatus()); + franchiseFeeResponse.setXgjRemainderPayableAmount(franchiseFeeDO.getXgjRemainderPayableAmount()); + franchiseFeeResponse.setXgjFeesPaid(franchiseFeeDO.getXgjFeesPaid()); return franchiseFeeResponse; } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java index 39cc77ff2..d5c966c87 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java @@ -4,9 +4,12 @@ import com.cool.store.context.CurrentUserHolder; import com.cool.store.context.LoginUserInfo; import com.cool.store.dto.AmountDTO; import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.response.FranchiseFeePayInfoResponse; import com.cool.store.vo.LinePayVO; import com.cool.store.vo.PartnerUserInfoVO; +import java.util.List; + /** * @Author wxp * @Date 2024/3/25 13:45 @@ -27,5 +30,9 @@ public interface LinePayService { Long submitPayInfo(LinePaySubmitRequest followLog, PartnerUserInfoVO partnerUser); + Long submitFranchiseFeePayInfo(LinePaySubmitRequest request, String userId); + List getFranchiseFeePayInfoList(Long shopId); + + Boolean deleteFranchiseFeePayInfo(Long id,String userId); } 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 93c9c638f..fb4b92e16 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 @@ -103,22 +103,6 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { return new FranchiseFeeResponse(); } FranchiseFeeResponse resp = FranchiseFeeResponse.from(result); - LinePayDO linePayDO = linePayMapper.selectByPrimaryKey(result.getPayId()); - if (Objects.nonNull(linePayDO)) { - FranchiseFeeResponse.LinePay linePayResult = FranchiseFeeResponse.LinePay.from(linePayDO); - if (Objects.nonNull(linePayDO.getLineId())){ - LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(linePayDO.getLineId()); - linePayResult.setPartnerName(lineInfoDO.getUsername()); - } - linePayResult.setAmount(new BigDecimal(result.getPerformanceBond()).add(new BigDecimal(result.getFirstYearFee())).add(new BigDecimal(result.getFirstYearManageFee())) - .add(new BigDecimal(result.getYearFranchiseFee())).add(new BigDecimal(result.getLoanMargin())).toString()); - if (Objects.nonNull(result.getAuditId())) { - ShopAuditInfoDO shopAuditInfoDO = shopAuditInfoMapper.selectByPrimaryKey(result.getAuditId()); - linePayResult.setStatus(shopAuditInfoDO.getResultType()); - linePayResult.setResult(shopAuditInfoDO.getResultType() == 0 ? shopAuditInfoDO.getPassReason() : shopAuditInfoDO.getRejectReason()); - } - resp.setLinePayDO(linePayResult); - } ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); if (shopInfoDO.getPointId() != null ){ PointInfoDO pointInfoDO = pointInfoDAO.getPointInfoById(shopInfoDO.getPointId()); 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 609cbcaba..827de6128 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 @@ -14,21 +14,25 @@ import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.enums.point.PayBusinessTypeEnum; import com.cool.store.enums.point.PayTypeEnum; +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.FranchiseFeeMapper; import com.cool.store.mapper.LineInfoMapper; import com.cool.store.mapper.ShopInfoMapper; import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.response.FranchiseFeePayInfoResponse; import com.cool.store.service.LinePayService; import com.cool.store.service.UserAuthMappingService; 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 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; @@ -132,6 +136,122 @@ public class LinePayServiceImpl implements LinePayService { return Boolean.TRUE; } + @Override + @Transactional(rollbackFor = Exception.class) + public Long submitFranchiseFeePayInfo(LinePaySubmitRequest request, String userId) { + log.info("submitPayInfo request:{},userId:{}", JSONObject.toJSONString(request), JSONObject.toJSONString(userId)); + if (!checkSubmitFranchiseFeePayRequest(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + if (StringUtils.isBlank(userId)){ + throw new ServiceException(ErrorCodeEnum.ACCESS_TOKEN_INVALID); + } + //判断付款人最多2人(可重复) + List list = linePayDAO.getFranchiseFeePayInfoByShopId(request.getShopId()); + Set payUserList = list.stream().map(LinePayDO::getPayUserName).collect(Collectors.toSet()); + if (!payUserList.contains(request.getPayUserName())&&payUserList.size()>=2){ + throw new ServiceException(ErrorCodeEnum.PAY_USER_NAME_ERROR); + } + if (request.getId() != null) { + LinePayDO linePayById = linePayDAO.getById(request.getId()); + if (linePayById == null) { + throw new ServiceException(ErrorCodeEnum.UPDATE_ERROR); + } + if (linePayById.getXgjClaimStatus().equals(ClaimStatusEnum.Claimed.getCode())) { + throw new ServiceException(ErrorCodeEnum.CLAIM_STATUS_ERROR); + } + } + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); + if (!shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()) + && !shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus())) { + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + String lockKey = "submitFranchiseFeePayInfo:lineId" + request.getLineId() + "shopId" + request.getShopId(); + //流水 + String lockValue = UUID.randomUUID().toString(); + boolean acquired = false; + try { + //10s过期 + acquired = redisUtilPool.setNxExpire(lockKey, lockValue, CommonConstants.TEN_SECONDS); + if (Boolean.TRUE.equals(acquired)) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + LinePayDO linePayDO = LinePaySubmitRequest.convertFranchiseFee(request); + linePayDO.setPartnerId(lineInfo.getPartnerId()); + linePayDO.setCreateUserId(userId); + linePayDO.setCreateTime(new Date()); + if (linePayDO.getId() != null) { + linePayDAO.updateLinePay(linePayDO); + } else { + linePayDO.setPaymentReceiptCode(UUIDUtils.generateCustomUUID()); + linePayDAO.addLinePay(linePayDO); + } + if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus())) + { + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); + } + //todo 苏竹红推送数据 + return linePayDO.getId(); + } else { + throw new ServiceException(ErrorCodeEnum.DUPLICATE_SUBMISSION); + } + } finally { + if (Boolean.TRUE.equals(acquired)) { + String currentValue = redisUtilPool.getString(lockKey); + if (lockValue.equals(currentValue)) { + redisUtilPool.delKey(lockKey); + } + } + } + } + + @Override + public List getFranchiseFeePayInfoList(Long shopId) { + List list = linePayDAO.getFranchiseFeePayInfoByShopId(shopId); + List result = new ArrayList<>(); + if (CollectionUtils.isEmpty(list)){ + return result; + } + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); + String username = lineInfoDO.getUsername(); + for (LinePayDO linePayDO : list){ + FranchiseFeePayInfoResponse response = new FranchiseFeePayInfoResponse(); + BeanUtil.copyProperties(linePayDO, response); + response.setPartnerName(username); + result.add(response); + } + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteFranchiseFeePayInfo(Long id,String userId) { + LinePayDO linePay = linePayDAO.getById(id); + if (linePay == null){ + throw new ServiceException(ErrorCodeEnum.DELETE_ERROR); + } + if (linePay.getXgjClaimStatus().equals(ClaimStatusEnum.Claimed.getCode())) { + throw new ServiceException(ErrorCodeEnum.CLAIM_STATUS_ERROR); + } + linePayDAO.deleteById(id,userId); + //todo 苏竹红推送数据 + return Boolean.TRUE; + } + + private Boolean checkSubmitFranchiseFeePayRequest(LinePaySubmitRequest request) { + if (StringUtils.isAnyBlank(request.getPayUserName(), request.getPayAccount(), request.getBankName(), request.getBranchBankName(), + request.getPayTime(), request.getPayPic())) { + return Boolean.FALSE; + } + if (Objects.isNull(request.getPayType()) || request.getLineId() == null || request.getShopId() == null) { + return Boolean.FALSE; + } + if (!request.getPayBusinessType().equals(PayBusinessTypeEnum.FRANCHISE_FEE.getCode())) { + return Boolean.FALSE; + } + return Boolean.TRUE; + } + @Override @Transactional(rollbackFor = Exception.class) public Long submitPayInfo(LinePaySubmitRequest request, PartnerUserInfoVO partnerUser) { @@ -139,26 +259,54 @@ public class LinePayServiceImpl implements LinePayService { if (Objects.isNull(request.getPayBusinessType())) { request.setPayBusinessType(Constants.ZERO_INTEGER); } + if (request.getPayBusinessType().equals(PayBusinessTypeEnum.FRANCHISE_FEE.getCode())) { + throw new ServiceException(ErrorCodeEnum.API_CALL_ERROR); + } LineInfoDO lineInfo = new LineInfoDO(); if (request.getLineId() != null) { lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); } -// //缴纳加盟费检验缴费人必须是加盟商 -// if(PayBusinessTypeEnum.FRANCHISE_FEE.getCode().equals(request.getPayBusinessType()) && !lineInfo.getUsername().trim().equals(request.getPayUserName().trim())){ -// throw new ServiceException(ErrorCodeEnum.CHECK_PAYER_ERROR); -// } LinePayDO linePayDO = linePayDAO.getByLineIdAndPayTypeAndShopId(request.getLineId(), request.getPayBusinessType(), request.getShopId()); linePayDO = checkAndFill(linePayDO, request, partnerUser); Long payId = linePayDO.getId(); - if (PayBusinessTypeEnum.FRANCHISE_FEE.getCode().equals(request.getPayBusinessType()) && payId != null) { - FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); - if (Objects.isNull(franchiseFeeDO)) { - throw new ServiceException(ErrorCodeEnum.UNISSUED_STATEMENT); - } - franchiseFeeDO.setPayId(payId); - franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); - shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); - //todo 苏竹红推送数据 +// if (PayBusinessTypeEnum.FRANCHISE_FEE.getCode().equals(request.getPayBusinessType()) && payId != null) { +// FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); +// if (Objects.isNull(franchiseFeeDO)) { +// throw new ServiceException(ErrorCodeEnum.UNISSUED_STATEMENT); +// } +// franchiseFeeDO.setPayId(payId); +// franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); +// shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); +// ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(franchiseFeeDO.getShopId()); +// Set auditFranchiseFeeUsers = new HashSet<>(); +// List branchUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.BRANCH_OFFICE, shopInfoDO.getRegionId()); +// if (Objects.nonNull(branchUser)) { +// Set branchUserIds = branchUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet()); +// auditFranchiseFeeUsers.addAll(branchUserIds); +// } +// List regionUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.REGION_OFFICE, shopInfoDO.getRegionId()); +// if (Objects.nonNull(regionUser)) { +// Set regionUserIds = regionUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet()); +// auditFranchiseFeeUsers.addAll(regionUserIds); +// } +// HashMap map = new HashMap<>(); +// map.put("partnerUsername", lineInfo.getUsername()); +// map.put("partnerMobile", lineInfo.getMobile()); +// map.put("storeName", shopInfoDO.getShopName()); +// commonService.sendQWMessage(new ArrayList<>(auditFranchiseFeeUsers), +// MessageEnum.MESSAGE_18, +// map); +// } + if (PayBusinessTypeEnum.INTENT_MONEY.getCode().equals(request.getPayBusinessType())) { + lineInfo.setWorkflowSubStage(WorkflowSubStageEnum.PAY_DEPOSIT.getCode()); + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode()); + lineInfoDAO.insertOrUpdate(lineInfo); + HashMap map = new HashMap<>(); + map.put("partnerUsername", lineInfo.getUsername()); + map.put("partnerMobile", lineInfo.getMobile()); + commonService.sendQWMessage(Collections.singletonList(lineInfo.getInvestmentManager()), + MessageEnum.MESSAGE_5, + map); } return payId == null ? null : payId; } @@ -179,7 +327,6 @@ public class LinePayServiceImpl implements LinePayService { } private void fillLinePay(Boolean isAdd, LinePayDO linePayDO, LinePaySubmitRequest request, PartnerUserInfoVO partnerUser) { - linePayDO.setPaySerialNumber(request.getPaySerialNumber()); linePayDO.setCombinedField(request.getCombinedField()); linePayDO.setPayType(request.getPayType()); linePayDO.setPayUserName(request.getPayUserName()); @@ -190,7 +337,7 @@ public class LinePayServiceImpl implements LinePayService { linePayDO.setBranchBankName(request.getBranchBankName()); if (Objects.nonNull(request.getPayTime())) { linePayDO.setPayTime(DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", request.getPayTime())); - }else { + } else { linePayDO.setPayTime(null); } linePayDO.setPayPic(request.getPayPic()); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLinePayController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLinePayController.java index 4b4273c43..dd9fff3af 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLinePayController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLinePayController.java @@ -5,6 +5,7 @@ import com.cool.store.context.PartnerUserHolder; import com.cool.store.dto.AmountDTO; import com.cool.store.enums.point.PayBusinessTypeEnum; import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.response.FranchiseFeePayInfoResponse; import com.cool.store.response.ResponseResult; import com.cool.store.service.LinePayService; import com.cool.store.vo.LinePayVO; @@ -17,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; /** * @Author wxp @@ -44,12 +46,22 @@ public class PCLinePayController { return ResponseResult.success(linePayService.getAmount(lineId)); } - @ApiOperation("缴纳意向金/加盟费") - @PostMapping("/submitPayInfo") - public ResponseResult submitPayInfo(@RequestBody LinePaySubmitRequest request){ - PartnerUserInfoVO partnerUser = PartnerUserHolder.getUser(); - return ResponseResult.success(linePayService.submitPayInfo(request, partnerUser)); + @ApiOperation("加盟费提交缴费信息") + @PostMapping("/submitFranchiseFeePayInfo") + public ResponseResult submitFranchiseFeePayInfo(@RequestBody LinePaySubmitRequest request){ + + return ResponseResult.success(linePayService.submitFranchiseFeePayInfo(request, CurrentUserHolder.getUserId())); + } + @ApiOperation("查询加盟费缴费信息") + @GetMapping("/getFranchiseFeePayInfoList") + public ResponseResult> getFranchiseFeePayInfoList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(linePayService.getFranchiseFeePayInfoList(shopId)); } + @ApiOperation("删除加盟费缴费信息") + @GetMapping("/deleteFranchiseFeePayInfo") + public ResponseResult deleteFranchiseFeePayInfo(@RequestParam("id") Long id) { + return ResponseResult.success(linePayService.deleteFranchiseFeePayInfo(id, CurrentUserHolder.getUserId())); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java index 34696e69b..23682ef29 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java @@ -5,6 +5,7 @@ import com.cool.store.context.PartnerUserHolder; import com.cool.store.dto.AmountDTO; import com.cool.store.enums.point.PayBusinessTypeEnum; import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.response.FranchiseFeePayInfoResponse; import com.cool.store.response.ResponseResult; import com.cool.store.service.LinePayService; import com.cool.store.vo.LinePayVO; @@ -17,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; /** * @Author wxp @@ -54,4 +56,22 @@ public class LinePayController { return ResponseResult.success(linePayService.getAmount(lineId)); } + @ApiOperation("加盟费提交缴费信息") + @PostMapping("/submitFranchiseFeePayInfo") + public ResponseResult submitFranchiseFeePayInfo(@RequestBody LinePaySubmitRequest request){ + return ResponseResult.success(linePayService.submitFranchiseFeePayInfo(request, PartnerUserHolder.getUser().getPartnerId())); + } + + @ApiOperation("查询加盟费缴费信息") + @GetMapping("/getFranchiseFeePayInfoList") + public ResponseResult> getFranchiseFeePayInfoList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(linePayService.getFranchiseFeePayInfoList(shopId)); + } + + @ApiOperation("删除加盟费缴费信息") + @GetMapping("/deleteFranchiseFeePayInfo") + public ResponseResult deleteFranchiseFeePayInfo(@RequestParam("id") Long id) { + return ResponseResult.success(linePayService.deleteFranchiseFeePayInfo(id, PartnerUserHolder.getUser().getPartnerId())); + } + }