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 f4990713b..29f07024f 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 @@ -194,6 +194,8 @@ public class RedisConstant { */ public static final String COOLINGPERIOD_FIRSTLOGIN_KEY = "coolingPeriodFirstLoginCache:{0}"; + public static final String REDIS_KEY_PREFIX = "daily_id:{0}"; + /** * 七天 */ 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..0740e2282 --- /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..3e1d5a217 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,17 @@ 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), + RECEIPT_NOT_EXIST(1511026,"收款单不存在或已被删除",null), + XGJ_COLLECTION_STATUS_COMPLETE(1511027,"新管家收费状态已完成,请确认!",null), + PAY_AMOUNT_ERROR(1511028,"缴费金额不能大于未缴金额",null), + ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/XGJCollectionStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/XGJCollectionStatusEnum.java new file mode 100644 index 000000000..3c4dfdfbe --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/XGJCollectionStatusEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums; + +/** + * @Author: WangShuo + * @Date: 2025/06/04/11:16 + * @Version 1.0 + * @注释: + */ +public enum XGJCollectionStatusEnum { + WAIT_PAY(0, "待缴费"), + PARTIAL_PAYMENT(1, "部分缴款"), + COMPLETED(2, "已完成"); + private Integer code; + private String message; + XGJCollectionStatusEnum(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/point/PayTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayTypeEnum.java index 36b5967a2..ee61a5a26 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayTypeEnum.java @@ -8,7 +8,9 @@ package com.cool.store.enums.point; */ public enum PayTypeEnum { WX_PAY(1,"微信支付"), - BANK_PAY(2,"银行转账"); + BANK_PAY(2,"银行转账"), + ONLINE_PAY(3,"线上支付"), + OFFLINE_PAY(4,"线下支付"); private Integer code; private String desc; 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 70fc96b96..2d4393148 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 @@ -39,7 +39,7 @@ public enum ShopSubStageStatusEnum { //缴纳加盟费/保证金 SHOP_SUB_STAGE_STATUS_70(ShopSubStageEnum.SHOP_STAGE_7, 700, "待内勤发布账单", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_71(ShopSubStageEnum.SHOP_STAGE_7, 710, "待加盟商缴费", Boolean.FALSE), - SHOP_SUB_STAGE_STATUS_72(ShopSubStageEnum.SHOP_STAGE_7, 720, "待内勤审核", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_72(ShopSubStageEnum.SHOP_STAGE_7, 720, "对账确认中", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_73(ShopSubStageEnum.SHOP_STAGE_7, 730, "已缴费", Boolean.TRUE), SHOP_SUB_STAGE_STATUS_74(ShopSubStageEnum.SHOP_STAGE_7, 740, "审核不通过", Boolean.FALSE), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java index 88060a25c..9d11c6883 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java @@ -34,6 +34,7 @@ public class CoolDateUtils { public static final String DATE_FORMAT_SEC_5 = "yyyy.MM.dd HH:mm"; public static final String DATE_FORMAT_SEC_6 = "yyyy.MM.dd"; public static final String DATE_FORMAT_SEC_7 = "yyyy/MM/dd HH:mm"; + public static final String DATE_FORMAT_SEC_8 = "yyyyMMdd"; private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -136,6 +137,14 @@ public class CoolDateUtils { return str; } + /** + * 获取当前日期 yyyyMMdd + * @return + */ + public static final String getToday(){ + DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMAT_SEC_8); + return LocalDate.now().format(DATE_FORMATTER); + } /** * 获取当前日期字符串 (yyyy-MM-dd) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java index 53d63a32f..71152d693 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java @@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.text.MessageFormat; + /** * redis常量工具类 @@ -113,4 +115,8 @@ public class RedisConstantUtil { return active + "_" + RedisConstant.GET_AI_MODULE + eid; } + public String getPaymentReceiptCode(String today){ + return active + "_" + MessageFormat.format(RedisConstant.REDIS_KEY_PREFIX, today); + } + } 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..1594589b7 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 @@ -1,8 +1,13 @@ package com.cool.store.utils; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import org.apache.commons.lang3.StringUtils; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Random; + /** * 唯一性ID工具类 * @@ -12,6 +17,10 @@ import org.apache.commons.lang3.StringUtils; */ public class UUIDUtils { + private static final String ID_PREFIX = "12"; + + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC_8); + /** * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID */ @@ -26,5 +35,9 @@ public class UUIDUtils { long uuid = (int) (Math.random() * 90000000 + 10000000); return uuid; } - + // 生成 UUID 方法 + public static String generateCustomUUID(Integer randomCount) { + String today = LocalDate.now().format(DATE_FORMATTER); + return ID_PREFIX + today + String.format("%04d", randomCount); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java index d51f69752..da4d10589 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/FranchiseFeeDAO.java @@ -1,10 +1,12 @@ package com.cool.store.dao; +import com.cool.store.dto.FranchiseFeeStageDateDTO; import com.cool.store.entity.FranchiseFeeDO; import com.cool.store.mapper.FranchiseFeeMapper; import org.apache.commons.collections4.CollectionUtils; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import java.util.List; @@ -26,4 +28,18 @@ public class FranchiseFeeDAO { } return franchiseFeeMapper.updateBill(list); } + + public Integer batchUpdateXgjCollectionStatus(List shopIds,Integer collectionStatus){ + if (CollectionUtils.isEmpty(shopIds)|| collectionStatus==null){ + return 0; + } + return franchiseFeeMapper.batchUpdateXgjCollectionStatus(shopIds,collectionStatus); + } + + public Integer batchUpdateXgjCollectionStatusAndXgjFeesPaid( List franchiseFeeStageDateDTOList){ + if (CollectionUtils.isEmpty(franchiseFeeStageDateDTOList)){ + return 0; + } + return franchiseFeeMapper.batchUpdateXgjCollectionStatusAndXgjFeesPaid(franchiseFeeStageDateDTOList); + } } 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..04b401288 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,48 @@ 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); + } + //数据处理专用0604,查询加盟费阶段缴费信息 + public List getDateHandler() { + return linePayMapper.getDateHandler(); + } + //数据处理专用0604,处理paytime paypic + public Integer dataUpdateLinePay(List linePayDOList) { + if (CollectionUtils.isEmpty(linePayDOList)){ + return null; + } + return linePayMapper.dataUpdateLinePay(linePayDOList); + } + + public LinePayDO selectByPaymentReceiptCode(String paymentReceiptCode) { + return linePayMapper.selectByPaymentReceiptCode(paymentReceiptCode); + } + public Integer updateXgjClaimStatus(List shopIds,Integer xgjClaimStatus,Integer payBusinessType){ + if (CollectionUtils.isEmpty(shopIds)){ + return null; + } + return linePayMapper.updateXgjClaimStatus(shopIds,xgjClaimStatus,payBusinessType); + } + public Integer deleteByShopId(List shopIds){ + if (CollectionUtils.isEmpty(shopIds)){ + return null; + } + return linePayMapper.deleteByShopId(shopIds); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java index 4369f2114..7325aa0ce 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java @@ -466,4 +466,10 @@ public class ShopStageInfoDAO { example.createCriteria().andIn("shopId",shopIds).andEqualTo("shopStage",shopStage); return shopStageInfoMapper.selectByExample(example); } + //查询处于xx状态的数据 + public List getShopStageInfoByShopSubStageStatus(Integer shopSubStageStatus) { + Example example = new Example(ShopStageInfoDO.class); + example.createCriteria().andEqualTo("shopSubStageStatus", shopSubStageStatus); + return shopStageInfoMapper.selectByExample(example); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java index 7c77990e3..a6ac258d7 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java @@ -1,6 +1,7 @@ package com.cool.store.mapper; import com.cool.store.dto.FranchiseFeeDTO; +import com.cool.store.dto.FranchiseFeeStageDateDTO; import com.cool.store.entity.FranchiseFeeDO; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param; @@ -24,4 +25,8 @@ public interface FranchiseFeeMapper extends Mapper { * @description: 数据处理修改账单 */ Integer updateBill(@Param("list") List list); + + Integer batchUpdateXgjCollectionStatus(@Param("shopIds")List shopId, @Param("collectionStatus")Integer collectionStatus); + + Integer batchUpdateXgjCollectionStatusAndXgjFeesPaid( @Param("list") List franchiseFeeStageDateDTOList); } 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..00ed3bc54 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,18 @@ 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); + + LinePayDO selectByPaymentReceiptCode(@Param("paymentReceiptCode") String paymentReceiptCode); + //数据处理专用0604,查询加盟费阶段缴费信息 + List getDateHandler(); + + Integer dataUpdateLinePay(@Param("list") List linePayDOList); + + Integer updateXgjClaimStatus(@Param("list") List shopIds,@Param("xgjClaimStatus") Integer xgjClaimStatus,@Param("payBusinessType") Integer payBusinessType); + + Integer deleteByShopId(@Param("list")List shopIds); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml index dea3af847..7c60ff89b 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml @@ -32,6 +32,22 @@ where shop_id = #{item.shopId} + + update xfsg_franchise_fee + set xgj_collection_status = #{collectionStatus} + where shop_id in + + #{shopId} + + + + + update xfsg_franchise_fee + set xgj_collection_status = #{item.xgjCollectionStatus}, + xgj_fees_paid = #{item.xgjFeesPaid} + where shop_id = #{item.shopId} + + select from xfsg_line_pay - where id = #{id,jdbcType=BIGINT} + where id = #{id,jdbcType=BIGINT} and deleted = 0 delete from xfsg_line_pay where id = #{id,jdbcType=BIGINT} + + update xfsg_line_pay + set deleted = 1 + where shop_id in + + #{item} + + SELECT LAST_INSERT_ID() @@ -78,8 +92,8 @@ branch_bank_name, - pay_time, - pay_pic, + pay_time, + pay_pic, promise_pic, @@ -111,6 +125,18 @@ combined_field, + + xgj_claim_status, + + + payment_receipt_code, + + + pay_serial_number, + + + remark + @@ -143,8 +169,8 @@ #{branchBankName,jdbcType=VARCHAR}, - #{payTime,jdbcType=TIMESTAMP}, - #{payPic,jdbcType=VARCHAR}, + #{payTime,jdbcType=TIMESTAMP}, + #{payPic,jdbcType=VARCHAR}, #{promisePic,jdbcType=VARCHAR}, @@ -175,6 +201,18 @@ #{combinedField,jdbcType=VARCHAR}, + + #{xgjClaimStatus,jdbcType=TINYINT}, + + + #{paymentReceiptCode,jdbcType=VARCHAR}, + + + #{paySerialNumber,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR} + @@ -210,8 +248,8 @@ branch_bank_name = #{branchBankName,jdbcType=VARCHAR}, - pay_time = #{payTime,jdbcType=TIMESTAMP}, - pay_pic = #{payPic,jdbcType=VARCHAR}, + pay_time = #{payTime,jdbcType=TIMESTAMP}, + pay_pic = #{payPic,jdbcType=VARCHAR}, promise_pic = #{promisePic,jdbcType=VARCHAR}, @@ -237,6 +275,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} @@ -244,7 +294,7 @@ update xfsg_line_pay set audit_id = #{auditId} where line_id = #{lineId} - and partner_id = #{partnerId} + and partner_id = #{partnerId} @@ -312,14 +362,15 @@ select * from xfsg_line_pay where line_id = #{lineId} - and deleted = '0' limit 1 + and deleted = '0' limit 1 - \ No newline at end of file + + + + update xfsg_line_pay set deleted = 1 ,update_time = now(),update_user_id = #{userId} where id = #{id} + + + + + + update xfsg_line_pay + + + pay_time = #{item.payTime}, + + + pay_pic = #{item.payPic}, + + + payment_receipt_code = #{item.paymentReceiptCode}, + + + xgj_claim_status = #{item.xgjClaimStatus} + + + + where id = #{item.id} + + + + update xfsg_line_pay + set + xgj_claim_status = #{xgjClaimStatus}, + update_time = now() + where shop_id in ( + + #{shopId} + + ) and pay_business_type = #{payBusinessType} + + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/FranchiseFeeStageDateDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/FranchiseFeeStageDateDTO.java new file mode 100644 index 000000000..8f2e002b4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/FranchiseFeeStageDateDTO.java @@ -0,0 +1,18 @@ +package com.cool.store.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author: WangShuo + * @Date: 2025/06/09/11:02 + * @Version 1.0 + * @注释: + */ +@Data +public class FranchiseFeeStageDateDTO { + private Long shopId; + private Integer xgjCollectionStatus; + private BigDecimal xgjFeesPaid = BigDecimal.ZERO; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java index af392450d..e1bb2f98c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; +import java.math.BigDecimal; import java.util.Date; @Data @@ -59,4 +60,16 @@ public class FranchiseFeeDO { @Column(name = "discount_reason") private String discountReason; + @Column(name = "xgj_collection_status") + @ApiModelProperty("新管家收款状态 0-待缴费 1-部分缴款 2-已完成") + private Integer xgjCollectionStatus; + + @Column(name = "xgj_remainder_payable_amount") + @ApiModelProperty("新管家剩余应缴金额") + private BigDecimal xgjRemainderPayableAmount; + + @Column(name = "xgj_fees_paid") + @ApiModelProperty("新管家已缴金额") + private BigDecimal xgjFeesPaid; + } 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 62e476932..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 @@ -11,6 +11,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.persistence.Column; + /** * @author wxp * @date 2024-03-27 09:25 @@ -35,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("付款人姓名") @@ -87,4 +89,20 @@ public class LinePayDO implements Serializable { @ApiModelProperty("组合字段:缴费时间+付款截图,数组") private String combinedField; + + @Column(name = "xgj_claim_status") + @ApiModelProperty("新管家收款单状态0-待认领,1-已认领") + private Integer xgjClaimStatus; + + @Column(name = "payment_receipt_code") + @ApiModelProperty("付款单编码(系统生成)") + private String paymentReceiptCode; + + @Column(name = "pay_serial_number") + @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 52c596b2c..83bdbf047 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,27 @@ package com.cool.store.request; +import com.cool.store.entity.LinePayDO; +import com.cool.store.enums.ClaimStatusEnum; 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; @@ -21,7 +31,7 @@ public class LinePaySubmitRequest { @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") private Integer payStatus; - @ApiModelProperty("支付方式 1微信 2银行转账") + @ApiModelProperty("支付方式 1微信 2银行转账,3-线上支付,4-线下支持") private Integer payType; @ApiModelProperty("付款人姓名/加盟商姓名") @@ -42,7 +52,6 @@ public class LinePaySubmitRequest { @ApiModelProperty("支行名称") private String branchBankName; - //正新缴纳加盟费后续:payTime,payPic废弃使用combinedField @ApiModelProperty("缴纳时间") private String payTime; @@ -52,12 +61,54 @@ 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.setShopId(request.getShopId()); + linePayDO.setLineId(request.getLineId()); + linePayDO.setPayStatus(PAY_DEPOSIT_50.getCode()); + linePayDO.setXgjClaimStatus(ClaimStatusEnum.TO_BE_CLAIMED.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.setAmount(request.getAmount()); + linePayDO.setPayBusinessType(request.getPayBusinessType()); + linePayDO.setXgjClaimStatus(0); + linePayDO.setRemark(request.getRemark()); + linePayDO.setDeleted(false); + return linePayDO; + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ZxjpApiRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ZxjpApiRequest.java index a509802f0..acb8dda8a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/ZxjpApiRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ZxjpApiRequest.java @@ -217,7 +217,7 @@ public class ZxjpApiRequest { private Integer storeType; - + private Long shopId; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java new file mode 100644 index 000000000..edff429c9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/FranchiseFeeCallBackRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request.xgj; + +import com.cool.store.dto.region.BigRegionDTO; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * @Author suzhuhong + * @Date 2025/6/4 11:02 + * @Version 1.0 + */ +@Data +public class FranchiseFeeCallBackRequest { + + @NotNull + private Long shopId; + @NotNull + private BigDecimal payableFee; + @NotNull + private BigDecimal paidFees; + @NotNull + private BigDecimal remainingFee; + @NotNull + private Integer paymentStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java new file mode 100644 index 000000000..fb150b4e1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -0,0 +1,66 @@ +package com.cool.store.request.xgj; + +import com.cool.store.entity.FranchiseFeeDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2025/6/3 16:52 + * @Version 1.0 + */ +@Data +public class PushFranchiseFeeRequest { + + @ApiModelProperty( "CRM系统门店ID") + private Long shopId; + + @ApiModelProperty( "加盟商姓名") + private String partnerName; + + @ApiModelProperty( "账单ID") + private Integer billId; + + @ApiModelProperty( "加盟费") + private BigDecimal franchiseFee; + + @ApiModelProperty( "保证金") + private BigDecimal bond; + + @ApiModelProperty( "第一年度管理费") + private BigDecimal firstYearManageFee; + + @ApiModelProperty( "第一年度品牌使用费") + private BigDecimal firstYearFee; + + @ApiModelProperty( "设计费") + private BigDecimal designFee; + + @ApiModelProperty( "应缴费合计金额") + private BigDecimal totalFee; + + @ApiModelProperty( "创建时间") + private Date createTime; + + public PushFranchiseFeeRequest(){} + public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO){ + this.setShopId(shopId); + this.setPartnerName(partnerName); + this.setBillId(franchiseFeeDO.getId().intValue()); + this.setFranchiseFee(new BigDecimal(franchiseFeeDO.getYearFranchiseFee())); + this.setBond(new BigDecimal(franchiseFeeDO.getLoanMargin())); + this.setFirstYearManageFee(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())); + this.setFirstYearFee(new BigDecimal(franchiseFeeDO.getFirstYearFee())); + this.setDesignFee(new BigDecimal(franchiseFeeDO.getPerformanceBond())); + this.setTotalFee(this.getBond() + .add(this.getFranchiseFee()) + .add(this.getFirstYearManageFee()) + .add(this.getFirstYearFee()) + .add(this.getDesignFee())); + this.setCreateTime(franchiseFeeDO.getCreateTime()); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java new file mode 100644 index 000000000..ffa9291ed --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptCallBackRequest.java @@ -0,0 +1,24 @@ +package com.cool.store.request.xgj; + +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Author suzhuhong + * @Date 2025/6/4 11:01 + * @Version 1.0 + */ +@Data +public class ReceiptCallBackRequest { + + @NotBlank + private String receiptId; + + @Max(1)@Min(0)@NotNull + private Integer claimStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java new file mode 100644 index 000000000..69a1110b7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java @@ -0,0 +1,77 @@ +package com.cool.store.request.xgj; + +import com.cool.store.entity.FranchiseFeeDO; +import com.cool.store.entity.LinePayDO; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +import javax.validation.constraints.DecimalMin; +import java.math.BigDecimal; + +/** + * @Author suzhuhong + * @Date 2025/6/4 9:33 + * @Version 1.0 + */ +@Data +public class ReceiptRequest { + + @ApiModelProperty( "CRM系统门店ID") + private Long shopId; + + @ApiModelProperty( "账单ID") + private Integer billId; + + @ApiModelProperty( "收款单ID") + private String receiptId; + + @ApiModelProperty( "付款人") + private String payer1; + + @ApiModelProperty("付款金额") + private BigDecimal paymentAmount; + + @ApiModelProperty("交易流水号") + private String transactionNumber; + + @ApiModelProperty( "开户行") + private String bankName; + + @ApiModelProperty( "开户支行") + private String branchBankName; + + @ApiModelProperty( "付款账号") + private String payAccount; + + @ApiModelProperty( "付款凭证") + private String payPic; + + @ApiModelProperty( "付款方式") + private Integer payWay = 0; + + @ApiModelProperty( "认领状态") + private Integer claimStatus = 0; + + @ApiModelProperty( "删除标识") + private Integer deleted = 0; + + public ReceiptRequest() { + } + + public ReceiptRequest(Long shopId, Integer billId, LinePayDO payDO){ + this.setShopId(shopId); + this.setBillId(billId); + this.setReceiptId(payDO.getPaymentReceiptCode()); + this.setPayer1(payDO.getPayUserName()); + this.setPayAccount(payDO.getPayAccount()); + this.setTransactionNumber(payDO.getPaySerialNumber()); + this.setBankName(payDO.getBankName()); + this.setBranchBankName(payDO.getBranchBankName()); + this.setPaymentAmount(payDO.getAmount()); + this.setPayPic(payDO.getPayPic()); + this.setClaimStatus(payDO.getXgjClaimStatus()); + this.setDeleted(payDO.getDeleted()?1:0); + } + +} 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..107da5836 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeePayInfoResponse.java @@ -0,0 +1,77 @@ +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; + + @ApiModelProperty("支付状态 45:待缴费 50:已缴费") + private Integer payStatus; + + @ApiModelProperty("付款单编号") + private String paymentReceiptCode; +} 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-model/src/main/java/com/cool/store/response/XgjAccessTokenDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/response/XgjAccessTokenDTO.java new file mode 100644 index 000000000..67d0421d7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/XgjAccessTokenDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.response; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/6/4 19:06 + * @Version 1.0 + */ +@Data +public class XgjAccessTokenDTO { + + private String access_token; + + private String scope; + + private String token_type; + + private Long expires_in; +} 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 d55b0f33e..96e2f49ff 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 @@ -1,6 +1,7 @@ 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 lombok.Data; import org.slf4j.MDC; @@ -29,4 +30,8 @@ public class ApiResponse { public static ApiResponse success(T data) { return new ApiResponse(ResponseCodeEnum.SUCCESS.getCode(), "ok", data); } + + public static ApiResponse error(ErrorCodeEnum errorCodeEnum) { + return new ApiResponse(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), null); + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DataHandlerServer.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DataHandlerServer.java index f12717c35..985311b73 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/DataHandlerServer.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DataHandlerServer.java @@ -1,6 +1,7 @@ package com.cool.store.service; import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.BatchStatusRefreshDTO; import com.cool.store.entity.ImportTaskDO; import java.util.List; @@ -20,20 +21,59 @@ public interface DataHandlerServer { * @description: 导入OA旧数据 */ Boolean importOaOldShopData(List> dataMapList, String originalFilename, LoginUserInfo user, - ImportTaskDO task); + ImportTaskDO task); - //数据处理阶段完成 某些阶段数据处理 - Boolean dataStageHandler(List> dataMapList, String originalFilename, LoginUserInfo user, ImportTaskDO task,Boolean flag); + /** + * @Auther: wangshuo + * @Date: 2025/6/9 + * @description: //数据处理阶段完成 某些阶段数据处理 + */ + Boolean dataStageHandler(List> dataMapList, String originalFilename, LoginUserInfo user, ImportTaskDO task, Boolean flag); - //装修数据初始化 + /** + * @Auther: wangshuo + * @Date: 2025/6/9 + * @description: //装修数据初始化 + */ Boolean decorationDataInit(); - //处理2024年10-12月数据 + /** + * @Auther: wangshuo + * @Date: 2025/6/9 + * @description: //处理2024年10-12月数据 + */ Boolean dataHandlerV20241012(List> dataMapList, String originalFilename, LoginUserInfo user, ImportTaskDO task); + Integer JingDongStageHandler(); - //处理测量 设计 施工 验收 完成 + /** + * @Auther: wangshuo + * @Date: 2025/6/9 + * //处理测量 设计 施工 验收 完成 + */ Boolean dataHandlerV2025029(List> dataMapList, String originalFilename, LoginUserInfo user, - ImportTaskDO task); + ImportTaskDO task); + + /** + * @Auther: wangshuo + * @Date: 2025/6/9 + * @description: //处理加盟费阶段 + */ + Boolean franchiseFeeStageDateHandler(); + + /** + * @Auther: wangshuo + * @Date: 2025/6/9 + * @description:处理加盟费缴费信息历史数据 + */ + Boolean franchiseFeeDateHandler(Integer pageSize, Integer pageNum); + + /** + * @Auther: wangshuo + * @Date: 2025/5/23 + * @description:不是对外回调接口,针对于已经在oa走完数据的,我们手动调用接口批量修改数据!!!只做云流水别的别用!!! + */ + Boolean batchStatusRefreshYls(BatchStatusRefreshDTO batchStatusRefreshDTO); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java index 24e0501a3..0dffe970c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java @@ -3,7 +3,9 @@ package com.cool.store.service; import com.cool.store.context.LoginUserInfo; import com.cool.store.request.AuditFranchiseFeeRequest; import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; import com.cool.store.response.FranchiseFeeResponse; +import com.cool.store.response.bigdata.ApiResponse; public interface FranchiseFeeService { /** @@ -22,4 +24,6 @@ public interface FranchiseFeeService { FranchiseFeeResponse getDetail(Long shopId); Boolean auditFranchiseFee(AuditFranchiseFeeRequest request, LoginUserInfo user); + + ApiResponse changePaymentStatus(FranchiseFeeCallBackRequest request); } 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..98d1c581d 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 @@ -3,10 +3,16 @@ package com.cool.store.service; import com.cool.store.context.CurrentUserHolder; import com.cool.store.context.LoginUserInfo; import com.cool.store.dto.AmountDTO; +import com.cool.store.entity.LinePayDO; import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.request.xgj.ReceiptCallBackRequest; +import com.cool.store.response.FranchiseFeePayInfoResponse; +import com.cool.store.response.bigdata.ApiResponse; 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 +33,25 @@ public interface LinePayService { Long submitPayInfo(LinePaySubmitRequest followLog, PartnerUserInfoVO partnerUser); + Long submitFranchiseFeePayInfo(LinePaySubmitRequest request, String userId); + + String getPaymentReceiptCode(); + + List getFranchiseFeePayInfoList(Long shopId); + + Boolean deleteFranchiseFeePayInfo(Long id,String userId); + + FranchiseFeePayInfoResponse getById(Long id); + + /** + * 推送数据到新管家 + * @param shopId + * @param linePayDO + * @return + */ + Boolean pushPayInfo(Long shopId, LinePayDO linePayDO); + + ApiResponse ReceiptCallBack(ReceiptCallBackRequest request); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenApiService.java index 5320a7e8a..c60ad7e3e 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenApiService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenApiService.java @@ -2,6 +2,9 @@ package com.cool.store.service; import com.cool.store.dto.BatchStatusRefreshDTO; import com.cool.store.dto.StatusRefreshDTO; +import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; +import com.cool.store.request.xgj.ReceiptCallBackRequest; +import com.cool.store.response.bigdata.ApiResponse; /** * @Author suzhuhong @@ -18,11 +21,9 @@ public interface OpenApiService { */ Boolean statusRefresh(StatusRefreshDTO statusRefreshDTO); - /** - * @Auther: wangshuo - * @Date: 2025/5/23 - * @description:不是对外回调接口,针对于已经在oa走完数据的,我们手动调用接口批量修改数据!!!只做云流水别的别用!!! - */ - Boolean batchStatusRefreshYls(BatchStatusRefreshDTO batchStatusRefreshDTO); + + ApiResponse changeReceiptStatus(ReceiptCallBackRequest request); + + ApiResponse changePaymentStatus(FranchiseFeeCallBackRequest request); } 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 ca9e285ea..342ac8405 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 @@ -5,6 +5,9 @@ import com.cool.store.dto.ModifyPasswordDTO; import com.cool.store.dto.XgjOrganizationDTO; import com.cool.store.request.AuditRequest; import com.cool.store.request.ZxjpApiRequest; +import com.cool.store.request.xgj.PushFranchiseFeeRequest; +import com.cool.store.request.xgj.ReceiptRequest; +import com.cool.store.response.XgjAccessTokenDTO; import java.util.List; @@ -23,6 +26,20 @@ public interface PushService { */ Boolean pushDataToXGJ(ZxjpApiRequest zxjpApiRequest); + /** + * 推送加盟账单到新管家 + * @param request + * @return + */ + Boolean pushFranchiseFeeToXGJ(PushFranchiseFeeRequest request); + + /** + * 推送收款单到新管家 + * @param receiptRequest + * @return + */ + Boolean pushReceiptToXGJ(ReceiptRequest receiptRequest); + /** * 推送数据到下游系统 POS * @param zxjpApiRequest @@ -62,6 +79,12 @@ public interface PushService { List getXgjOrganization(String parentId); + /** + * 获取新管家token + * @return + */ + XgjAccessTokenDTO getXgjAccessToken(); + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java index 5319f5279..63632a7cb 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java @@ -132,4 +132,6 @@ public interface ShopService { * @return */ List getSubStageHandle(Long shopId,Integer subStage); + + ShopStageInfoVO getShopStageStatus(Long shopId, Integer subStage); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java index 4a9ca2637..29cfc0a68 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java @@ -4,10 +4,7 @@ package com.cool.store.service.impl; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; import com.cool.store.entity.*; -import com.cool.store.enums.ErrorCodeEnum; -import com.cool.store.enums.MessageEnum; -import com.cool.store.enums.OrderSysTypeEnum; -import com.cool.store.enums.UserRoleEnum; +import com.cool.store.enums.*; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.exception.ServiceException; @@ -16,12 +13,14 @@ import com.cool.store.request.BuildInformationRequest; import com.cool.store.response.BuildInformationResponse; import com.cool.store.service.BuildInformationService; import com.cool.store.mapper.BuildInformationMapper; +import com.cool.store.service.EnumInfoService; import com.cool.store.service.PreparationService; import com.cool.store.service.UserAuthMappingService; import com.cool.store.utils.RedisConstantUtil; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.poi.StringUtils; import io.lettuce.core.ZAddArgs; +import org.apache.commons.collections4.CollectionUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author EDY @@ -38,7 +38,8 @@ import java.util.stream.Collectors; */ @Service public class BuildInformationServiceImpl implements BuildInformationService { - + @Resource + private EnumInfoService enumInfoService; @Resource private RedisConstantUtil redisConstantUtil; @Resource @@ -116,9 +117,17 @@ public class BuildInformationServiceImpl implements BuildInformationService { response.setDeclareGoodsType(orderSysInfoDO.getDeclareGoodsType()); } if (StringUtils.isBlank(response.getXgjVicePresident())) { - EnterpriseUserDO user = userAuthMappingService.getUserByRoleEnumAndRegionId(UserRoleEnum.VICE_PRESIDENT_IN_CHARGE, shopInfo.getRegionId()); - if (Objects.nonNull(user)) { - response.setXgjVicePresident(user.getName()); + List userList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.VICE_PRESIDENT_IN_CHARGE, shopInfo.getRegionId()); + if (CollectionUtils.isNotEmpty(userList)) { + List xgjVicePresidentList = enumInfoService.getByTypeCode(ZxjpEnum.XGJ_VICE_PRESIDENT.getCode()); + List userNameSet = userList.stream().map(EnterpriseUserDO::getName).collect(Collectors.toList()); + List xgjVicePresidentNameList = xgjVicePresidentList.stream().map(EnumInfoDO::getSysValue).collect(Collectors.toList()); + List resultUserNameList = userNameSet.stream() + .filter(xgjVicePresidentNameList::contains) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(resultUserNameList)){ + response.setXgjVicePresident(resultUserNameList.get(0)); + } } } //根据映射关系默认带出新管家组织 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandlerServerImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandlerServerImpl.java index 8bfec0198..1bb121173 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandlerServerImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DataHandlerServerImpl.java @@ -1,5 +1,6 @@ package com.cool.store.service.impl; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.context.LoginUserInfo; @@ -7,26 +8,28 @@ import com.cool.store.dao.*; import com.cool.store.dto.*; import com.cool.store.entity.*; import com.cool.store.enums.*; +import com.cool.store.enums.point.PayBusinessTypeEnum; import com.cool.store.enums.point.ShopStageEnum; 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.service.DataHandlerServer; -import com.cool.store.service.FranchiseFeeService; -import com.cool.store.service.PreparationService; +import com.cool.store.service.*; import com.cool.store.utils.StringUtil; import com.cool.store.utils.easyExcel.EasyExcelUtil; import com.cool.store.utils.poi.DateUtils; +import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; +import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -43,6 +46,12 @@ import static com.cool.store.utils.poi.DateUtils.YYYY_MM_DD; @Service @Slf4j public class DataHandlerServerImpl implements DataHandlerServer { + @Resource + private LinePayService linePayService; + @Resource + private OpenApiService openApiService; + @Resource + private LinePayDAO linePayDAO; @Resource private AcceptanceInfoDAO acceptanceInfoDAO; @Resource @@ -924,7 +933,7 @@ public class DataHandlerServerImpl implements DataHandlerServer { ShopSubStageEnum shopSubStageEnum = ShopSubStageEnum.SHOP_STAGE_25; List shopIds = shopAccountDAO.getShopId(); for (ShopStageInfoDO shopStageInfoDO : subStages) { - if (jdStageShopIds.contains(shopStageInfoDO.getShopId())){ + if (jdStageShopIds.contains(shopStageInfoDO.getShopId())) { continue; } LineInfoDO lineInfoDO = lineMap.get(shopStageInfoDO.getLineId()); @@ -980,12 +989,12 @@ public class DataHandlerServerImpl implements DataHandlerServer { if (CollectionUtils.isEmpty(shopInfoList)) { log.info("导入数据根据shopCode 未找到数据"); } - List shopIds = shopInfoList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); + List shopIds = shopInfoList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); Map> shopMapByCode = shopInfoList.stream().collect(Collectors.groupingBy(ShopInfoDO::getShopCode)); //装修验收数据 List acceptanceInfoDOList = acceptanceInfoDAO.selectByShopIds(shopIds); Map acceptanceInfoMap = acceptanceInfoDOList.stream().collect(Collectors.toMap(AcceptanceInfoDO::getShopId, item -> item)); - //合同阶段 + //合同阶段 List signFranchiseStageList = shopStageInfoDAO.getSubStageList(shopIds, ShopSubStageEnum.SHOP_STAGE_8.getShopSubStage()); Map signFranchiseStageMap = signFranchiseStageList.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopId, Function.identity())); //装修阶段需要变更的shopId @@ -995,23 +1004,23 @@ public class DataHandlerServerImpl implements DataHandlerServer { for (ImportOaOldShopDataDTO dto : list) { String shopCode = dto.getShopCode(); List shopInfoDOS = shopMapByCode.get(shopCode); - if (CollectionUtils.isEmpty(shopInfoDOS)){ + if (CollectionUtils.isEmpty(shopInfoDOS)) { errorList.add(new ImportOaOldShopDataErrorDTO(dto.getShopCode(), "门店编码未找到")); continue; } - if (shopInfoDOS.size() > 1){ + if (shopInfoDOS.size() > 1) { errorList.add(new ImportOaOldShopDataErrorDTO(dto.getShopCode(), "门店编码重复")); continue; } ShopInfoDO shopInfoDO = shopInfoDOS.get(0); Long shopId = shopInfoDO.getId(); ShopStageInfoDO signFranchiseStage = signFranchiseStageMap.get(shopId); - if (!signFranchiseStage.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus())){ + if (!signFranchiseStage.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus())) { errorList.add(new ImportOaOldShopDataErrorDTO(dto.getShopCode(), "合同阶段未完成")); continue; } AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoMap.get(shopId); - if (Objects.isNull(acceptanceInfoDO)){ + if (Objects.isNull(acceptanceInfoDO)) { initFitmentShopIdList.add(shopId); } fitmentFhopIdList.add(shopId); @@ -1021,7 +1030,7 @@ public class DataHandlerServerImpl implements DataHandlerServer { shopStageInfoDAO.dataUpdateStatus(fitmentFhopIdList, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_91); shopStageInfoDAO.dataUpdateStatus(fitmentFhopIdList, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112); shopStageInfoDAO.dataUpdateStatus(fitmentFhopIdList, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123); - //装修表初始化 + //装修表初始化 acceptanceInfoDAO.initAcceptanceInfo(initFitmentShopIdList); if (!errorList.isEmpty()) { task.setStatus(ImportTaskStatusEnum.ERROR.getCode()); @@ -1043,6 +1052,97 @@ public class DataHandlerServerImpl implements DataHandlerServer { return null; } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean franchiseFeeStageDateHandler() { + //处理加盟费阶段待审核(对账中) + List waitAuditStageList = shopStageInfoDAO.getShopStageInfoByShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()); + log.info("waitAuditStageList:{}", JSONObject.toJSONString(waitAuditStageList)); + List waitAuditShopIdList = waitAuditStageList.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); +// shopStageInfoDAO.dataUpdateStatus(waitAuditShopIdList,ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73); + franchiseFeeDAO.batchUpdateXgjCollectionStatus(waitAuditShopIdList, XGJCollectionStatusEnum.WAIT_PAY.getCode()); + // linePayDAO.updateXgjClaimStatus(waitAuditShopIdList, ClaimStatusEnum.TO_BE_CLAIMED.getCode(), PayBusinessTypeEnum.FRANCHISE_FEE.getCode()); + //已缴费 修改新管家回调状态 + List isPaidStageList = shopStageInfoDAO.getShopStageInfoByShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus()); + List isPaidShopId = isPaidStageList.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); + List franchiseFeeByShopIds = franchiseFeeMapper.getFranchiseFeeByShopIds(isPaidShopId); + List franchiseFeeStageDateDTOList = new ArrayList<>(); + for (FranchiseFeeDO franchiseFeeDO : franchiseFeeByShopIds){ + FranchiseFeeStageDateDTO dto = new FranchiseFeeStageDateDTO(); + dto.setShopId(franchiseFeeDO.getShopId()); + dto.setXgjCollectionStatus(XGJCollectionStatusEnum.COMPLETED.getCode()); + dto.setXgjFeesPaid(dto.getXgjFeesPaid() + .add(new BigDecimal(franchiseFeeDO.getYearFranchiseFee())) + .add(new BigDecimal(franchiseFeeDO.getLoanMargin())) + .add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())) + .add(new BigDecimal(franchiseFeeDO.getPerformanceBond())) + .add(new BigDecimal(franchiseFeeDO.getFirstYearFee())) + ); + franchiseFeeStageDateDTOList.add(dto); + } + franchiseFeeDAO.batchUpdateXgjCollectionStatusAndXgjFeesPaid(franchiseFeeStageDateDTOList); + // linePayDAO.updateXgjClaimStatus(isPaidShopId, ClaimStatusEnum.CLAIMED.getCode(), PayBusinessTypeEnum.FRANCHISE_FEE.getCode()); + //待加盟商缴费阶段 + List waitPayStageList = shopStageInfoDAO.getShopStageInfoByShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus()); + List waitPayShopIds = waitPayStageList.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); + franchiseFeeDAO.batchUpdateXgjCollectionStatus(waitPayShopIds, XGJCollectionStatusEnum.WAIT_PAY.getCode()); + //审批拒绝阶段 + List refuseStageList = shopStageInfoDAO.getShopStageInfoByShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_74.getShopSubStageStatus()); + List refuseShopIds = refuseStageList.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); + franchiseFeeDAO.batchUpdateXgjCollectionStatus(refuseShopIds, XGJCollectionStatusEnum.WAIT_PAY.getCode()); + linePayDAO.deleteByShopId(refuseShopIds); + shopStageInfoDAO.dataUpdateStatus(refuseShopIds,ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean franchiseFeeDateHandler(Integer pageSize, Integer pageNum) { + PageHelper.startPage(pageNum, pageSize); + List dateHandler = linePayDAO.getDateHandler(); + List waitAuditStageList = shopStageInfoDAO.getShopStageInfoByShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()); + log.info("waitAuditStageList:{}", JSONObject.toJSONString(waitAuditStageList)); + List waitAuditShopIdList = waitAuditStageList.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); + for (LinePayDO linePayDO : dateHandler) { + JSONArray jsonArray = JSONObject.parseArray(linePayDO.getCombinedField()); + JSONObject jsonObject = jsonArray.getJSONObject(0); + linePayDO.setPayTime(jsonObject.getDate("payTime")); + linePayDO.setPayPic(jsonObject.getString("payPic")); + if (waitAuditShopIdList.contains(linePayDO.getShopId())) { + linePayDO.setXgjClaimStatus(ClaimStatusEnum.TO_BE_CLAIMED.getCode()); + if (StringUtils.isBlank(linePayDO.getPaymentReceiptCode())) { + linePayDO.setPaymentReceiptCode(linePayService.getPaymentReceiptCode()); + } + } else { + linePayDO.setXgjClaimStatus(ClaimStatusEnum.CLAIMED.getCode()); + } + } + linePayDAO.dataUpdateLinePay(dateHandler); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchStatusRefreshYls(BatchStatusRefreshDTO batchStatusRefreshDTO) { + if (CollectionUtils.isEmpty(batchStatusRefreshDTO.getShopCode())) { + log.info("数据处理 门店编码为空"); + return null; + } + for (String shopCode : batchStatusRefreshDTO.getShopCode()) { + StatusRefreshDTO statusRefreshDTO = new StatusRefreshDTO(); + statusRefreshDTO.setShopCode(shopCode); + statusRefreshDTO.setSystemSource(batchStatusRefreshDTO.getSystemSource()); + statusRefreshDTO.setOpenStatus(batchStatusRefreshDTO.getOpenStatus()); + openApiService.statusRefresh(statusRefreshDTO); + } + List shopCodeList = new ArrayList<>(); + for (String shopCode : batchStatusRefreshDTO.getShopCode()) { + shopCodeList.add(StringUtils.substringAfter(shopCode, "_")); + } + posAndOrderInfoDAO.batchUpdateYlsRemarkByShopCode(shopCodeList, batchStatusRefreshDTO.getRemark()); + return true; + } + private static @NotNull ShopStageInfoDO getShopStageInfoDO(ShopSubStageEnum shopSubStageEnum, ShopStageInfoDO shopStageInfoDO, ShopSubStageStatusEnum shopSubStageStatus) { ShopStageEnum shopStageEnum = shopSubStageEnum.getShopStageEnum(); ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java index 1041d59c3..459971cad 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java @@ -263,14 +263,11 @@ public class DeskServiceImpl implements DeskService { //督导代填 if (userRoleIds.contains(UserRoleEnum.QW_SUPERVISION.getCode()) || userRoleIds.contains(UserRoleEnum.SUPERVISION.getCode())) { pageInfo = commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_7, - Arrays.asList(SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus(), SHOP_SUB_STAGE_STATUS_74.getShopSubStageStatus()), Boolean.FALSE,keyword); + Arrays.asList(SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus(), SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()), Boolean.FALSE,keyword); } else { if (userRoleIds.contains(UserRoleEnum.JOIN_OFFICE.getCode()) || userRoleIds.contains(UserRoleEnum.REGION_OFFICE.getCode())) { subStageStatusList.add(SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus()); } - if (userRoleIds.contains(UserRoleEnum.BRANCH_OFFICE.getCode()) || userRoleIds.contains(UserRoleEnum.REGION_OFFICE.getCode())) { - subStageStatusList.add(SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()); - } if (!subStageStatusList.isEmpty()) { pageInfo = commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_7, subStageStatusList, Boolean.TRUE,keyword); 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..5324b56ff 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 @@ -13,8 +13,12 @@ import com.cool.store.exception.ServiceException; import com.cool.store.mapper.*; import com.cool.store.request.AuditFranchiseFeeRequest; import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; +import com.cool.store.request.xgj.PushFranchiseFeeRequest; import com.cool.store.response.FranchiseFeeResponse; +import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.FranchiseFeeService; +import com.cool.store.service.PushService; import com.cool.store.service.UserAuthMappingService; import com.cool.store.utils.poi.constant.Constants; import lombok.extern.slf4j.Slf4j; @@ -57,6 +61,8 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { CommonService commonService; @Resource UserAuthMappingService userAuthMappingService; + @Resource + PushService pushService; @Override @Transactional(rollbackFor = Exception.class) @@ -76,21 +82,38 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { if (Objects.nonNull(isExist)){ throw new ServiceException(ErrorCodeEnum.UNISSUED_STATEMENT_2); } + franchiseFeeDO.setXgjCollectionStatus(XGJCollectionStatusEnum.WAIT_PAY.getCode()); + franchiseFeeDO.setCreateTime(new Date()); franchiseFeeMapper.insertSelective(franchiseFeeDO); } ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.PAY_FRANCHISE_FEES); + //推送加盟费信息到新管家 + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + pushService.pushFranchiseFeeToXGJ(feeRequest); return true; } @Override + @Transactional(rollbackFor = Exception.class) public Boolean update(FranchiseFeeRequest request) { + ShopStageInfoDO shopStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7); + if (shopStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.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)) { franchiseFeeDO.setId(franchiseFeeDO1.getId()); franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); + //推送数据 + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + //推送加盟费信息到新管家 + franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + pushService.pushFranchiseFeeToXGJ(feeRequest); return true; } return false; @@ -103,22 +126,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()); @@ -191,4 +198,25 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { // commonService.sendMessage(Collections.singletonList(lineInfoDO.getInvestmentManager()), MessageEnum.MESSAGE_18, requestMap); return true; } + + @Override + @Transactional(rollbackFor = Exception.class) + public ApiResponse changePaymentStatus(FranchiseFeeCallBackRequest request) { + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + if (Objects.isNull(shopInfoDO)){ + 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); + } + franchiseFeeDO.setXgjCollectionStatus(request.getPaymentStatus()); + franchiseFeeDO.setXgjRemainderPayableAmount(request.getRemainingFee()); + franchiseFeeDO.setXgjFeesPaid(request.getPaidFees()); + franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); + if (XGJCollectionStatusEnum.COMPLETED.getCode().equals(request.getPaymentStatus())){ + shopStageInfoDAO.updateShopStageInfo(request.getShopId(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73); + } + return ApiResponse.success(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 bd29dfcc7..496408e68 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 @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; 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.context.LoginUserInfo; import com.cool.store.dao.HyPartnerUserInfoDAO; import com.cool.store.dao.LineInfoDAO; @@ -14,21 +15,32 @@ 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.request.xgj.ReceiptCallBackRequest; +import com.cool.store.request.xgj.ReceiptRequest; +import com.cool.store.response.FranchiseFeePayInfoResponse; +import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.LinePayService; +import com.cool.store.service.PushService; 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; @@ -38,9 +50,14 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.MessageFormat; +import java.time.LocalDate; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import static com.cool.store.utils.poi.DateUtils.SPECIAL_DATE_START; +import static com.cool.store.utils.poi.DateUtils.YYYY_MM_DD_HH_MM_SS; + /** * @Author wxp * @Date 2024/3/28 13:48 @@ -50,6 +67,7 @@ import java.util.stream.Collectors; @Slf4j public class LinePayServiceImpl implements LinePayService { + @Value("${mybatis.configuration.variables.enterpriseId}") private String eid; @Resource @@ -73,6 +91,10 @@ public class LinePayServiceImpl implements LinePayService { private RedisUtilPool redisUtilPool; @Resource private UserAuthMappingService userAuthMappingService; + @Resource + RedisConstantUtil redisConstantUtil; + @Resource + PushService pushService; @Override public LinePayVO getLinePayInfo(Long lineId, Integer businessType, Long shopId) { @@ -132,6 +154,204 @@ 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); + } + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); + //判断付款人最多2人(可重复) + List list = linePayDAO.getFranchiseFeePayInfoByShopId(request.getShopId()); + Map payIdMap = list.stream().collect(Collectors.toMap(LinePayDO::getId, Function.identity())); + if (request.getId()!=null){ + payIdMap.remove(request.getId()); + } + //判断缴费金额不能大于未缴费金额 + BigDecimal total = payIdMap.values().stream() + .map(LinePayDO::getAmount) + .reduce(BigDecimal.ZERO, BigDecimal::add); + //应缴金额 + BigDecimal amountDue = new BigDecimal(franchiseFeeDO.getYearFranchiseFee()) + .add(new BigDecimal(franchiseFeeDO.getLoanMargin())) + .add(new BigDecimal(franchiseFeeDO.getFirstYearFee())) + .add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())) + .add(new BigDecimal(franchiseFeeDO.getPerformanceBond())); + //未缴费金额 + BigDecimal amountUnpaid = amountDue.subtract(total); + if( request.getAmount().compareTo(amountUnpaid) > 0 ){ + throw new ServiceException(ErrorCodeEnum.PAY_AMOUNT_ERROR); + } + 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) { + LinePayDO linePayById = linePayDAO.getById(linePayDO.getId()); + if (linePayById == null) { + log.info("linePayById is null"); + throw new ServiceException(ErrorCodeEnum.UPDATE_ERROR); + } else { + linePayDAO.updateLinePay(linePayDO); + } + linePayDO.setPaymentReceiptCode(linePayById.getPaymentReceiptCode()); + } else { + linePayDO.setPaymentReceiptCode(getPaymentReceiptCode()); + Long payId = linePayDAO.addLinePay(linePayDO); + linePayDO.setId(payId); + } + if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus())) { + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); + } + //推送数据 + + this.pushPayInfo(request.getShopId(), linePayDO); + 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 String getPaymentReceiptCode() { + //当前日期 + String today = CoolDateUtils.getToday(); + String redisKey = redisConstantUtil.getPaymentReceiptCode(today); + Long sequence = redisUtilPool.incrby(redisKey, 1); + //第一次设置过期时间 一天 + if (sequence == 1) { + redisUtilPool.expire(redisKey, RedisConstant.ONE_DAY_SECONDS); + } + return "12" + today + String.format("%04d", sequence); + } + + @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.setPayTime(DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, linePayDO.getPayTime())); + 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); + //置为删除状态 + linePay.setDeleted(Boolean.TRUE); + //推送数据 + this.pushPayInfo(linePay.getShopId(), linePay); + return Boolean.TRUE; + } + + @Override + public Boolean pushPayInfo(Long shopId, LinePayDO linePayDO) { + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + ReceiptRequest receiptRequest = new ReceiptRequest(shopId, franchiseFeeDO.getId().intValue(), linePayDO); + //推送缴费单数据到新管家 + pushService.pushReceiptToXGJ(receiptRequest); + return Boolean.TRUE; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ApiResponse ReceiptCallBack(ReceiptCallBackRequest request) { + LinePayDO linePayDO = linePayDAO.selectByPaymentReceiptCode(request.getReceiptId()); + if (Objects.isNull(linePayDO)) { + return ApiResponse.error(ErrorCodeEnum.RECEIPT_NOT_EXIST); + } + linePayDO.setXgjClaimStatus(request.getClaimStatus()); + linePayDAO.updateLinePay(linePayDO); + return ApiResponse.success(Boolean.TRUE); + } + + + @Override + public FranchiseFeePayInfoResponse getById(Long id) { + if (id == null) { + return null; + } + LinePayDO linePay = linePayDAO.getById(id); + if (linePay == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + FranchiseFeePayInfoResponse response = new FranchiseFeePayInfoResponse(); + BeanUtil.copyProperties(linePay, response); + return response; + } + + 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,45 +359,44 @@ 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); - 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.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()); @@ -218,7 +437,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()); @@ -252,4 +471,5 @@ public class LinePayServiceImpl implements LinePayService { } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java index cc1884954..d8e285b81 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenApiServiceImpl.java @@ -15,6 +15,11 @@ import com.cool.store.enums.ShopAccountEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.PostAndOrderRequest; +import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; +import com.cool.store.request.xgj.ReceiptCallBackRequest; +import com.cool.store.response.bigdata.ApiResponse; +import com.cool.store.service.FranchiseFeeService; +import com.cool.store.service.LinePayService; import com.cool.store.service.OpenApiService; import com.cool.store.service.PosAndOrderInfoService; import lombok.extern.slf4j.Slf4j; @@ -49,6 +54,10 @@ public class OpenApiServiceImpl implements OpenApiService { PosAndOrderInfoService posAndOrderInfoService; @Resource PosAndOrderInfoDAO posAndOrderInfoDAO; + @Resource + LinePayService linePayService; + @Resource + FranchiseFeeService franchiseFeeService; @Override @Transactional(rollbackFor = Exception.class) @@ -87,25 +96,14 @@ public class OpenApiServiceImpl implements OpenApiService { return Boolean.TRUE; } + @Override - @Transactional(rollbackFor = Exception.class) - public Boolean batchStatusRefreshYls(BatchStatusRefreshDTO batchStatusRefreshDTO) { - if (CollectionUtils.isEmpty(batchStatusRefreshDTO.getShopCode())){ - log.info("数据处理 门店编码为空"); - return null; - } - for (String shopCode : batchStatusRefreshDTO.getShopCode()){ - StatusRefreshDTO statusRefreshDTO = new StatusRefreshDTO(); - statusRefreshDTO.setShopCode(shopCode); - statusRefreshDTO.setSystemSource(batchStatusRefreshDTO.getSystemSource()); - statusRefreshDTO.setOpenStatus(batchStatusRefreshDTO.getOpenStatus()); - this.statusRefresh(statusRefreshDTO); - } - List shopCodeList = new ArrayList<>(); - for (String shopCode : batchStatusRefreshDTO.getShopCode()){ - shopCodeList.add(StringUtils.substringAfter(shopCode, "_")); - } - posAndOrderInfoDAO.batchUpdateYlsRemarkByShopCode(shopCodeList,batchStatusRefreshDTO.getRemark()); - return true; + public ApiResponse changeReceiptStatus(ReceiptCallBackRequest request) { + return linePayService.ReceiptCallBack(request); + } + + @Override + public ApiResponse changePaymentStatus(FranchiseFeeCallBackRequest request) { + return franchiseFeeService.changePaymentStatus(request); } } 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 5345de760..ca0317d77 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 @@ -7,6 +7,9 @@ import com.cool.store.dto.XgjOrganizationDTO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.ZxjpApiRequest; +import com.cool.store.request.xgj.PushFranchiseFeeRequest; +import com.cool.store.request.xgj.ReceiptRequest; +import com.cool.store.response.XgjAccessTokenDTO; import com.cool.store.response.XgjBaseResponse; import com.cool.store.response.XgjOrganizationResponse; import com.cool.store.response.huoma.ShopBaseInfoResponse; @@ -25,13 +28,14 @@ import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import javax.annotation.Resource; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -60,6 +64,9 @@ public class PushServiceImpl implements PushService { @Value("${xgj.api.auth.url}") private String xgjUrl; + @Value("${xgj.api.token.url}") + private String xgjTokenUrl; + @Value("${xgj.api.auth.username}") private String xgjUsername; @@ -89,13 +96,33 @@ public class PushServiceImpl implements PushService { @Value("${mybatis.configuration.variables.enterpriseId}") private String eid; + @PostConstruct + public void init() { + okHttpClient = okHttpClient.newBuilder() + .connectTimeout(10, TimeUnit.SECONDS) // 连接超时 + .readTimeout(30, TimeUnit.SECONDS) // 读取超时 + .writeTimeout(30, TimeUnit.SECONDS) // 写入超时 + .build(); + } @Override public Boolean pushDataToXGJ(ZxjpApiRequest zxjpApiRequest) { - String apiUrl = xgjUrl + "/open/addStore"; + String apiUrl = xgjUrl + "/dmp/one-id/open/addStore"; return executeApiCall(apiUrl, zxjpApiRequest, Boolean.class, xgjUsername, xgjSecret); } + @Override + public Boolean pushFranchiseFeeToXGJ(PushFranchiseFeeRequest request) { + String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeBill"; + return executePostApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); + } + + @Override + public Boolean pushReceiptToXGJ(ReceiptRequest request) { + String apiUrl = xgjUrl + "/dmp/dmp-join/open/franchiseeReceipts"; + return executePostApiCall(apiUrl, request, Boolean.class, xgjUsername, xgjSecret,getXgjAccessToken().getAccess_token()); + } + @Override public Boolean pushDataToPOS(ZxjpApiRequest zxjpApiRequest) { String apiUrl = url + "/dzgV1/zxcrm/shop/upsert"; @@ -103,7 +130,7 @@ public class PushServiceImpl implements PushService { } private Boolean modifyXGJPassword(ModifyPasswordDTO dto) { - String apiUrl = xgjUrl + "/open/updateStorePassword"; + String apiUrl = xgjUrl + "/dmp/one-id/open/updateStorePassword"; return executeApiCall(apiUrl, dto, Boolean.class, xgjUsername, xgjSecret); } @@ -113,6 +140,7 @@ public class PushServiceImpl implements PushService { } + @Override public Boolean modifyDownstreamSystem(ModifyPasswordDTO modifyPasswordDTO) { this.modifyPosPassword(modifyPasswordDTO); @@ -145,7 +173,7 @@ public class PushServiceImpl implements PushService { String key = active+"_XgjOrganization_" + eid; String resObject = redisUtilPool.getString(key); if (StringUtils.isBlank(resObject)) { - String apiUrl = xgjUrl + "/open/organization"; + String apiUrl = xgjUrl + "/dmp/one-id/open/organization"; resObject = JSONObject.toJSONString(executeApiGetCall(apiUrl, null, Object.class, xgjUsername, xgjSecret)); redisUtilPool.setNxExpire(key, resObject, 7200000); } @@ -168,13 +196,46 @@ public class PushServiceImpl implements PushService { } + @Override + public XgjAccessTokenDTO getXgjAccessToken() { + String apiUrl = xgjTokenUrl + "/oauth2/token?grant_type=client_credentials&scope=server"; + String clientId = "dmp-join"; + String clientSecret = "dmp20250528"; + String auth = clientId + ":" + clientSecret; + String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8)); + byte[] bytes = new byte[0]; + Request request = new Request.Builder() + .url(apiUrl) + .post(RequestBody.create(MediaType.parse("application/json; charset=UTF-8"),bytes)) + .header("Authorization", "Basic " + encodedAuth) + .build(); + try (Response response = okHttpClient.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, + "HTTP请求失败,状态码: " + response.code()); + } + String responseBody = response.body().string(); + XgjAccessTokenDTO xgjAccessTokenDTO = objectMapper.readValue(responseBody, XgjAccessTokenDTO.class); + return xgjAccessTokenDTO; + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + log.error("API调用异常 - URL: {}, 错误: {}", url, e.getMessage(), e); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "接口调用异常: " + e.getMessage()); + } + } - private T executeApiCall(String url, Object requestBody, Class responseType, String username, String secret) { + private T executeApiCall(String url, Object requestBody, Class responseType, String username, String secret){ + return executePostApiCall(url,requestBody,responseType,username,secret,null); + } + + + private T executePostApiCall(String url, Object requestBody, Class responseType, String username, String secret,String accessToken) { // 1. 打印请求前日志 logRequest(url, requestBody); try { - Request request = buildRequest(requestBody, url, username, secret); + Request request = buildRequest(requestBody, url, username, secret,accessToken); request.headers().names().forEach(x->{ log.info(x+": {}",request.header(x)); @@ -261,7 +322,7 @@ public class PushServiceImpl implements PushService { } - private Request buildRequest(Object requestBody, String url, String username, String secret) { + private Request buildRequest(Object requestBody, String url, String username, String secret,String accessToken) { try { Map authHeaders = HmacSigner.generateHeaders( @@ -279,9 +340,13 @@ public class PushServiceImpl implements PushService { .addHeader("Accept", "application/json") .addHeader("x-Date", authHeaders.get("x-Date")) .addHeader("Digest", authHeaders.get("Digest")); - if (!url.contains("get-token-byshopcode")){ + if (!url.contains("get-token-byshopcode")&&StringUtils.isEmpty(accessToken)){ builder.addHeader("Authorization", authHeaders.get("Authorization")); } + //新管家特定接口 + if (StringUtils.isNotEmpty(accessToken)){ + builder.addHeader("Authorization", "Bearer "+accessToken); + } return builder.build(); } catch (Exception e) { throw new ServiceException(ErrorCodeEnum.THIRD_API_SIGN_ERROR); 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 fd0e2c6d2..63123867b 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 @@ -781,7 +781,7 @@ public class ShopServiceImpl implements ShopService { case SHOP_SUB_STAGE_STATUS_85: return getUsersByRolesAndRegion(Arrays.asList(REGION_OFFICE, JOIN_OFFICE), shopInfo.getRegionId()); - case SHOP_SUB_STAGE_STATUS_72: + // case SHOP_SUB_STAGE_STATUS_72: case SHOP_SUB_STAGE_STATUS_83: return getUsersByRolesAndRegion(Arrays.asList(REGION_OFFICE, BRANCH_OFFICE), shopInfo.getRegionId()); @@ -860,6 +860,18 @@ public class ShopServiceImpl implements ShopService { } } + @Override + public ShopStageInfoVO getShopStageStatus(Long shopId, Integer subStage) { + if(shopId == null|| subStage == null ){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + ShopStageInfoDO stage = shopStageInfoDAO.getByShopIdAndSubStage(shopId, subStage); + if (stage!=null){ + return new ShopStageInfoVO(stage.getShopStage(), stage.getShopSubStage(), stage.getShopSubStageStatus(),stage.getIsTerminated()); + } + return null; + } + /** * 获取招商经理信息 * @param diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncDataServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncDataServiceImpl.java index 7e88f54be..9ab1d320c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncDataServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SyncDataServiceImpl.java @@ -71,6 +71,7 @@ public class SyncDataServiceImpl implements SyncDataService { @Override public ZxjpApiRequest getData(Long shopId, DownSystemTypeEnum systemType) { ZxjpApiRequest request = new ZxjpApiRequest(); + request.setShopId(shopId); ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); if (shopInfo == null) { throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DataHandlerController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DataHandlerController.java index 7401de132..f585dc74b 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DataHandlerController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DataHandlerController.java @@ -3,16 +3,19 @@ package com.cool.store.controller.webb; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dto.BatchStatusRefreshDTO; import com.cool.store.entity.ImportTaskDO; import com.cool.store.enums.FileTypeEnum; import com.cool.store.enums.ImportTaskStatusEnum; import com.cool.store.mapper.ImportTaskMapper; import com.cool.store.response.ResponseResult; +import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.DataHandlerServer; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -152,4 +155,26 @@ public class DataHandlerController { dataHandlerServer.dataHandlerV2025029(dataMapList, file.getOriginalFilename(), CurrentUserHolder.getUser(), importTaskDO); return ResponseResult.success(true); } + + /** + * @Auther: wangshuo + * @Date: 2025/5/23 + * @description:不是对外回调接口,针对于已经在oa走完数据的,我们手动调用接口批量修改数据!!!只做云流水别的别用!!! + */ + @ApiOperation("批量修改门店云流水开通状态") + @PostMapping("/batchStatusRefreshYls") + public ApiResponse batchStatusRefreshYls(@RequestBody @Validated BatchStatusRefreshDTO batchStatusRefreshDTO) { + return ApiResponse.success(dataHandlerServer.batchStatusRefreshYls(batchStatusRefreshDTO)); + } + + @ApiOperation("处理加盟费阶段") + @GetMapping("/franchiseFeeStageDateHandler") + public ResponseResult franchiseFeeStageDateHandler(){ + return ResponseResult.success(dataHandlerServer.franchiseFeeStageDateHandler()); + } + @ApiOperation("处理加盟费缴费信息历史数据") + @GetMapping("/franchiseFeeDateHandler") + public ResponseResult franchiseFeeDateHandler(@RequestParam("pageSize") Integer pageSize, @RequestParam("pageNum") Integer pageNum){ + return ResponseResult.success(dataHandlerServer.franchiseFeeDateHandler(pageSize,pageNum)); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java index 8e73c9f51..a4c34f587 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java @@ -76,7 +76,8 @@ public class DeskController { @ApiOperation("待处理-支付加盟费保证金") @GetMapping("/payFranchiseFeesPendingList") public ResponseResult> payFranchiseFeesPendingList(@RequestParam(value = "pageNumber", required = true, defaultValue = "1") Integer pageNumber, - @RequestParam(value = "pageSize", required = true, defaultValue = "10") Integer pageSize , @RequestParam(value = "keyword") String keyword) { + @RequestParam(value = "pageSize", required = true, defaultValue = "10") Integer pageSize , + @RequestParam(value = "keyword") String keyword) { LoginUserInfo userInfo = CurrentUserHolder.getUser(); return ResponseResult.success(deskService.payFranchiseFeesPendingList(pageNumber, pageSize, userInfo,keyword)); } 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 7ddc2acb6..8cbb4ab39 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 @@ -3,6 +3,8 @@ package com.cool.store.controller.webb; import com.alibaba.fastjson.JSONObject; import com.cool.store.dto.*; import com.cool.store.request.OpenApiStoreRequest; +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.OpenApiService; @@ -51,12 +53,23 @@ public class OpenApiController { return ApiResponse.success(pushService.getYlsToken(new GetAccessTokenDTO(ylsCode,ylsCode))); } - @ApiOperation("获取门店信息") @PostMapping("/getStoreList") public ApiResponse> getStoreList(@RequestBody @Validated OpenApiStoreRequest dto) { return ApiResponse.success(storeService.getStoreExtendFieldInfo(dto.getPageSize(),dto.getPageNum())); } + @ApiOperation("新管家回调 刷新收款单状态") + @PostMapping("/changeReceiptStatus") + public ApiResponse changeReceiptStatus(@RequestBody @Validated ReceiptCallBackRequest request){ + log.info("changeReceiptStatus request:{}", JSONObject.toJSONString(request)); + return openApiService.changeReceiptStatus(request); + } + @ApiOperation("新管家回调 账单收款状态及缴款金额") + @PostMapping("/changePaymentStatus") + public ApiResponse changePaymentStatus(@RequestBody @Validated FranchiseFeeCallBackRequest request){ + log.info("changePaymentStatus request:{}", JSONObject.toJSONString(request)); + return openApiService.changePaymentStatus(request); + } } 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..b15029133 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,27 @@ 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())); + } + @ApiOperation("查询缴费信息") + @GetMapping("/getById") + public ResponseResult getById(@RequestParam("id") Long id) { + return ResponseResult.success(linePayService.getById(id)); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java index 901d5592b..60eaef521 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java @@ -159,21 +159,16 @@ public class PCShopController { } - /** - * @Auther: wangshuo - * @Date: 2025/5/23 - * @description:不是对外回调接口,针对于已经在oa走完数据的,我们手动调用接口批量修改数据!!!只做云流水别的别用!!! - */ - @ApiOperation("批量修改门店云流水开通状态") - @PostMapping("/batchStatusRefreshYls") - public ApiResponse batchStatusRefreshYls(@RequestBody @Validated BatchStatusRefreshDTO batchStatusRefreshDTO) { - return ApiResponse.success(openApiService.batchStatusRefreshYls(batchStatusRefreshDTO)); - } - @ApiOperation("获取店铺所属品牌") @GetMapping("/getFranchiseBrandName") public ResponseResult getFranchiseBrandName(@RequestParam(name = "shopId")Long shopId) { return ResponseResult.success(shopService.getFranchiseBrandName(shopId)); } + + @ApiOperation("获取店铺某阶段状态") + @GetMapping("/getShopStageStatus") + public ResponseResult getShopStageStatus(@RequestParam("shopId")Long shopId, @RequestParam("subStage")Integer subStage) { + return ResponseResult.success(shopService.getShopStageStatus(shopId, subStage)); + } } 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 8778e7a33..95edd4456 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 @@ -1,5 +1,6 @@ package com.cool.store.controller.webb; +import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; import com.cool.store.dto.FoodTokenDTO; import com.cool.store.dto.GetAccessTokenDTO; @@ -8,12 +9,17 @@ import com.cool.store.entity.*; import com.cool.store.enums.DownSystemTypeEnum; import com.cool.store.enums.MessageEnum; import com.cool.store.enums.SMSMsgEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; 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.GetPasswordDTO; 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.xgj.PushFranchiseFeeRequest; import com.cool.store.response.ResponseResult; import com.cool.store.response.bigdata.ActDataResponse; import com.cool.store.response.bigdata.ProfitDataResponse; @@ -25,14 +31,19 @@ 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.UserAuthMappingServiceImpl; +import com.cool.store.utils.CoolDateUtils; +import com.cool.store.utils.RedisConstantUtil; +import com.cool.store.utils.RedisUtilPool; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; +import java.util.stream.Collectors; @Slf4j @RestController @@ -59,6 +70,15 @@ public class PCTestController { private SyncDataService syncDataService; @Resource private HttpRestTemplateService httpRestTemplateService; + @Resource + FranchiseFeeMapper franchiseFeeMapper; + + @Resource + ShopInfoMapper shopInfoMapper; + @Resource + LinePayService linePayService; + @Resource + LinePayDAO linePayDAO; @GetMapping("/sendMessage") public ResponseResult sendMessage(@RequestParam("lineId")Long lineId, @@ -262,6 +282,12 @@ public class PCTestController { return ResponseResult.success(pushService.getXgjOrganization(partnerId)); } + @GetMapping("/getXgjAccessToken") + @ApiOperation("获取新管家token") + public ResponseResult getXgjAccessToken() { + return ResponseResult.success(pushService.getXgjAccessToken()); + } + @Resource ShopAccountService accountService; @@ -304,4 +330,78 @@ public class PCTestController { return ResponseResult.success(thirdFoodService.getFoodToken(dto)); } + + @GetMapping("/getToday") + @ApiOperation("getToday") + public ResponseResult getToday() { + for (int i = 0; i < 10; i++) { + System.out.println(linePayService.getPaymentReceiptCode()); + } + return ResponseResult.success(Boolean.TRUE); + } + + @GetMapping("/pushFranchiseFee") + @ApiOperation("推送账单") + public ResponseResult pushFranchiseFee(@RequestParam(value = "shopId", required = true) Long shopId) { + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + pushService.pushFranchiseFeeToXGJ(feeRequest); + return ResponseResult.success(Boolean.TRUE); + } + + @GetMapping("/pushPay") + @ApiOperation("推送收款单") + public ResponseResult pushPay(@RequestParam(value = "shopId", required = true) Long shopId, + @RequestParam(value = "payId", required = true) Long payId) { + LinePayDO pay = linePayDAO.getById(payId); + linePayService.pushPayInfo(shopId,pay); + return ResponseResult.success(Boolean.TRUE); + } + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @GetMapping("/franchiseFeeDataHandler") + @ApiOperation("加盟费数据处理") + public ResponseResult franchiseFeeDataHandler(){ + //查询所有的待加盟商缴费 推送账单 + List shopList = shopStageInfoDAO.getShopIdListByStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71.getShopSubStageStatus()); + log.info("----------开始推送账单数据---------"); + shopList.forEach(x->{ + try { + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(x.getShopId()); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(x.getShopId()); + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + pushService.pushFranchiseFeeToXGJ(feeRequest); + } catch (Exception e) { + log.error("推送数据失败 shopId {},异常信息:{}",x,e.getMessage()); + } + }); + log.info("----------推送账单数据结束---------"); + //对账中 + log.info("----------开始推送账单与收款单数据---------"); + List shopList2 = shopStageInfoDAO.getShopIdListByStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()); + shopList2.forEach(x->{ + //先推送账单 + try { + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(x.getShopId()); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(x.getShopId()); + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + pushService.pushFranchiseFeeToXGJ(feeRequest); + List franchiseFeePayInfoByShopId = linePayDAO.getFranchiseFeePayInfoByShopId(x.getShopId()); + franchiseFeePayInfoByShopId.forEach(y->{ + linePayService.pushPayInfo(x.getShopId(),y); + }); + } catch (Exception e) { + log.error("推送数据失败 shopId {},异常信息:{}",x,e.getMessage()); + } + }); + log.info("----------账单与收款单数据推送完成---------"); + return ResponseResult.success(Boolean.TRUE); + } + } 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..3c8b06243 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,27 @@ 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())); + } + + @ApiOperation("查询缴费信息") + @GetMapping("/getById") + public ResponseResult getById(@RequestParam("id") Long id) { + return ResponseResult.success(linePayService.getById(id)); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java index 389105b27..90c808b14 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java @@ -138,4 +138,10 @@ public class MiniShopController { return ResponseResult.success(shopService.getFranchiseBrandName(shopId)); } + @ApiOperation("获取店铺某阶段状态") + @GetMapping("/getShopStageStatus") + public ResponseResult getShopStageStatus(@RequestParam("shopId")Long shopId, @RequestParam("subStage")Integer subStage) { + return ResponseResult.success(shopService.getShopStageStatus(shopId, subStage)); + } + } diff --git a/coolstore-partner-web/src/main/resources/application-online.properties b/coolstore-partner-web/src/main/resources/application-online.properties index 3092275c6..24c8c53f5 100644 --- a/coolstore-partner-web/src/main/resources/application-online.properties +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -94,9 +94,10 @@ api.auth.username=GkqgAhUJ7p9swJo api.auth.secret=NzVrnS3OWiupdDY #xingguanjia -xgj.api.auth.url=https://masterdata.zhengxinfood.com/dmp/one-id +xgj.api.auth.url=https://masterdata.zhengxinfood.com xgj.api.auth.username=6446346061e043e392dd53c9c8d1af0b xgj.api.auth.secret=3ba6e4c5632547b8b2b3acefe08667bb +xgj.api.token.url=http://121.199.29.202:9000 #yunliushui yls.api.auth.url=http://yuanguiwuliu.com diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index ef4d1eb1e..5f744b0d0 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -105,9 +105,10 @@ api.auth.username=VA59C0ubfcpcVpl api.auth.secret=H9YKHF6R7N16Fvy #新管家账号 -xgj.api.auth.url=http://117.139.13.24:11180/dmp/one-id +xgj.api.auth.url=http://117.139.13.24:11180 xgj.api.auth.username=6446346061e043e392dd53c9c8d1af0b xgj.api.auth.secret=3ba6e4c5632547b8b2b3acefe08667bb +xgj.api.token.url=http://117.139.13.24:29000 #云流水账号 #yls.api.auth.url=http://scm330-test.366ec.net