无关风月
2025-04-10 b74277583bf9b2b89247061bf08c17a03b71c76e
惠民卡代码
17个文件已修改
216 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreement.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/SiteClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/HuiminCardMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/response/MyHuiminCardVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/HuiminCardService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/HuiminCardServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/HuiminCardMapper.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/account/StudentClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/feignclient/account/StudentClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -260,13 +260,10 @@
                    vo.setStuPhone(ToolUtil.isEmpty(sts.getPhone()) ? "" : sts.getPhone());
                    vo.setIdCard(ToolUtil.isEmpty(sts.getIdCard()) ? "" : sts.getIdCard());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    vo.setBirthday(simpleDateFormat.format(sts.getBirthday()));
                    vo.setStuName(sts.getName());
                    if (sts.getBirthday()!=null){
                        vo.setStuAge(DateUtil.age(sts.getBirthday()));
                    }else{
                        vo.setStuAge(18);
                        vo.setBirthday(simpleDateFormat.format(sts.getBirthday()));
                    }
                    vo.setStuHeight(sts.getHeight());
                    vo.setStuWeight(sts.getWeight());
@@ -278,6 +275,7 @@
            }
            return ResultUtil.success(stuListVos);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java
@@ -17,10 +17,7 @@
import com.dsh.activity.feignclient.other.RegionClient;
import com.dsh.activity.feignclient.other.SiteClient;
import com.dsh.activity.feignclient.other.StoreClient;
import com.dsh.activity.feignclient.other.model.CityDataAndProvinceDataVo;
import com.dsh.activity.feignclient.other.model.Store;
import com.dsh.activity.feignclient.other.model.StoreInfoDto;
import com.dsh.activity.feignclient.other.model.TOperatorCity;
import com.dsh.activity.feignclient.other.model.*;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.model.CouponRecordQuery;
import com.dsh.activity.model.request.CommodityRequest;
@@ -103,6 +100,20 @@
                return ResultUtil.tokenErr();
            }
            THuiminCard huiminCard = huiminCardService.getById(id);
            if (huiminCard.getGrantCount()!=null){
                if (huiminCard.getGrantCount()<=payHuiminService.lambdaQuery().eq(TPayHuimin::getCardId, huiminCard.getId())
                        .eq(TPayHuimin::getStatus,2).count()){
                    return ResultUtil.error("该惠民卡已售完");
                }
            }
            if (huiminCard.getLimitCount()!=null){
                if (huiminCard.getLimitCount()<=payHuiminService.lambdaQuery().eq(TPayHuimin::getCardId, huiminCard.getId())
                        .eq(TPayHuimin::getStatus,2)
                        .eq(TPayHuimin::getAppUserId, uid)
                        .count()){
                    return ResultUtil.error("该惠民卡购买次数已达上限");
                }
            }
            TPayHuimin tPayHuimin = new TPayHuimin();
            tPayHuimin.setSalesMoney(huiminCard.getSalesMoney());
            tPayHuimin.setAppUserId(uid);
@@ -136,12 +147,14 @@
            tPayHuimin.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5));
            System.err.println("支付数据"+tPayHuimin);
            payHuiminService.save(tPayHuimin);
            BigDecimal bigDecimal = new BigDecimal(studentIds.split(",").length);
            switch (payType){
                case 1:
                    return payMoneyUtil.weixinpay("购买惠民卡"+"-"+0, "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(),
                    return payMoneyUtil.weixinpay("购买惠民卡"+"-"+0, "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().multiply(bigDecimal).toString(),
                            "/base/huimin/callBack/weixinPayHuiminCallback", "APP", "");
                case 2:
                    return payMoneyUtil.alipay(smid,"购买惠民卡", "购买惠民卡", "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(),
                    String string = tPayHuimin.getSalesMoney().multiply(bigDecimal).setScale(2).toString();
                    return payMoneyUtil.alipay(smid,"购买惠民卡", "购买惠民卡", "", tPayHuimin.getCode(), string,
                            "/base/huimin/callBack/aliPayHuiminCallback");
            }
@@ -239,7 +252,8 @@
            pageNo = (pageNo - 1) * pageSize;
            HuiminAgreementVO huiminAgreementVO = new HuiminAgreementVO();
            List<THuiminCard> cardList = huiminCardService.getHuiminAgreementAndList(pageNo,pageSize,storeId);
            if (cardList.isEmpty()){
            List<THuiminCard> cardListNolimit = huiminCardService.getHuiminAgreementAndListNolimit(storeId);
            if (cardListNolimit.isEmpty()){
                // 没有配置惠民卡 展示富文本内容
                huiminAgreementVO.setShowType(1);
            }else{
@@ -369,7 +383,20 @@
            }
            if (tPayHuimin.getStatus()==3 && tPayHuimin.getRefundStatus()!=1){
                return ResultUtil.error("不可重复退款");
            }
            if (tPayHuimin.getEndTime().before(new Date())){
                // 已过期
                return ResultUtil.error("惠民卡已过期,不可退款");
            }
            int count = huiminRecordService.count(new LambdaQueryWrapper<THuiminRecord>()
                    .eq(THuiminRecord::getHuiminCardId, tPayHuimin.getCardId()));
            // 购卡7日内没有使用记录可退款。超过7日不管有没有使用记录都不能退款
            if (new Date().after(DateUtil.addDay(tPayHuimin.getPaymentTime(),7))){
                // 超过七天不可退款
                return ResultUtil.error("惠民卡购买超过七天,不可退款");
            }else if (count>=7){
                // 使用记录大于等于7次不可退款
                return ResultUtil.error("惠民卡使用记录大于等于7次,不可退款");
            }
            if (tPayHuimin.getPaymentType()==1){
                Map<String, String> map = payMoneyUtil.wxRefund(tPayHuimin.getOrderNumber(), tPayHuimin.getCode(),
@@ -421,8 +448,17 @@
            }
            THuiminCard byId = huiminCardService.getById(tPayHuimin.getCardId());
            MyHuiminCardDetailVO myHuiminCardDetailVO = new MyHuiminCardDetailVO();
            String storeIds = byId.getStoreIds();
            String temp ="{\"storeIds\":\"" +storeIds+"\","+"\"useWeeks:\"\""+byId.getUseWeeks()+"\","+"\"useTimes:\""+byId.getUseTimes()+"\","+"\"unUseTimes:\""+byId.getUnUseTimes()+"\"}";
            String siteIds = "";
            if (byId.getUseScope()==2){
                siteIds = byId.getUseIds();
            }else{
                siteIds = siteClient.querySiteByStoreIds(byId.getStoreIds())
                        .stream()
                        .map(Site::getId)
                        .map(String::valueOf)
                        .collect(Collectors.joining(","));
            }
            String temp ="{\"siteIds\":\"" +siteIds+"\","+"\"useTimes:\"\""+byId.getUseWeeks()+"\","+"\"unUseTimes:\""+byId.getUnUseTimes()+"\"}";
            myHuiminCardDetailVO.setQrCode(temp);
            myHuiminCardDetailVO.setCardId(tPayHuimin.getCardId());
            myHuiminCardDetailVO.setHuiminCard(byId);
@@ -437,5 +473,28 @@
            return ResultUtil.success(new MyHuiminCardDetailVO());
        }
    }
    /**
     * 获取添加人员、选择人员说明文案
     */
    @ResponseBody
    @PostMapping("/getContentForStudent")
    @ApiOperation(value = "获取添加人员、选择人员说明文案")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<THuiminAgreement> getContentForStudent() {
        try {
            Integer uid = tokenUtil.getUserIdFormRedis();
            if (null == uid) {
                return ResultUtil.tokenErr();
            }
            THuiminAgreement one = huiminAgreementService.lambdaQuery()
                    .isNull(THuiminAgreement::getOperatorId).last("limit 1").one();
            return ResultUtil.success(one);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.success(new THuiminAgreement());
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreement.java
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -23,6 +25,7 @@
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_huimin_agreement")
@ApiModel(value = "THuiminAgreement对象", description = "惠民卡协议管理")
public class THuiminAgreement extends Model<THuiminAgreement> {
    private static final long serialVersionUID = 1L;
    /**
@@ -34,21 +37,27 @@
     * 运营商id 选择默认传null
     */
    @TableField("operatorId")
    @ApiModelProperty("运营商id")
    private Integer operatorId;
    /**
     *添加人员说明文案
     */
    @TableField("addUserRemark")
    @ApiModelProperty("添加人员说明文案")
    private String addUserRemark;
    /**
     *选择人员说明文案
     */
    @ApiModelProperty("选择人员说明文案")
    @TableField("selectUserRemark")
    private String selectUserRemark;
    /**
     * 门店无惠民卡介绍页
     */
    @TableField("storeNoHuiminCardIntro")
    @ApiModelProperty("门店无惠民卡介绍页")
    private String storeNoHuiminCardIntro;
    @TableField(exist = false)
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
@@ -159,7 +159,7 @@
     */
    @ApiModelProperty(value = "排序")
    @TableField("sort")
    private String sort;
    private Integer sort;
    /**
     *门店id 当使用范围为场地的时候存储门店id
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/SiteClient.java
@@ -4,6 +4,8 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/7/18 11:38
@@ -20,4 +22,12 @@
     */
    @PostMapping("/site/querySiteById")
    Site querySiteById(Integer id);
    /**
     * 根据id获取场地数据
     *
     * @param ids
     * @return
     */
    @PostMapping("/site/querySiteByStoreIds")
    List<Site> querySiteByStoreIds(String ids);
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/HuiminCardMapper.java
@@ -16,6 +16,7 @@
public interface HuiminCardMapper extends BaseMapper<THuiminCard> {
    List<THuiminCard> getHuiminAgreementAndList(@Param("pageNo") Integer pageNo,@Param("pageSize") Integer pageSize , @Param("storeId")Integer storeId);
    List<THuiminCard> getHuiminAgreementAndListNolimit(@Param("storeId")Integer storeId);
    List<MyHuiminCardVO> getMyHuiminCardList(@Param("pageNo") Integer pageNo,@Param("pageSize") Integer pageSize ,@Param("appUserId")Integer appUserId);
}
cloud-server-activity/src/main/java/com/dsh/activity/model/response/MyHuiminCardVO.java
@@ -27,7 +27,7 @@
    private Integer isExpire;
    @ApiModelProperty("是否可以退款 0否1是")
    private Integer isRefund;
    @ApiModelProperty("状态 前端忽略")
    @ApiModelProperty("状态1待支付2使用中3已退款")
    private Integer status;
    @ApiModelProperty("有效期至")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
cloud-server-activity/src/main/java/com/dsh/activity/service/HuiminCardService.java
@@ -22,6 +22,7 @@
public interface HuiminCardService extends IService<THuiminCard> {
    List<THuiminCard> getHuiminAgreementAndList(Integer pageNo, Integer pageSize, Integer storeId);
    List<THuiminCard> getHuiminAgreementAndListNolimit(Integer storeId);
    List<MyHuiminCardVO> getMyHuiminCardList(Integer pageNo, Integer pageSize, Integer appUserId);
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/HuiminCardServiceImpl.java
@@ -28,6 +28,10 @@
    public List<THuiminCard> getHuiminAgreementAndList(Integer pageNo, Integer pageSize, Integer storeId) {
        return this.baseMapper.getHuiminAgreementAndList(pageNo,pageSize,storeId);
    }
    @Override
    public List<THuiminCard> getHuiminAgreementAndListNolimit(Integer storeId) {
        return this.baseMapper.getHuiminAgreementAndListNolimit(storeId);
    }
    @Override
    public List<MyHuiminCardVO> getMyHuiminCardList(Integer pageNo, Integer pageSize,Integer appUserId) {
cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java
@@ -157,6 +157,9 @@
    /**
     * 支付宝支付
     */
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
//        //构造client
//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
@@ -208,6 +211,8 @@
//        }  catch (AlipayApiException e ) {
//            e.printStackTrace();
//        }
        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
@@ -238,6 +243,7 @@
        model.setExtendParams(extendParams);
        request.setBizModel(model);
        request.setNotifyUrl(callbackPath + notifyUrl);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
cloud-server-activity/src/main/resources/mapper/HuiminCardMapper.xml
@@ -14,10 +14,21 @@
            limit #{pageNo}, #{pageSize}
    </select>
    <select id="getHuiminAgreementAndListNolimit" resultType="com.dsh.activity.entity.THuiminCard">
        select t1.* from t_huimin_card t1
        where
            find_in_set(#{storeId},t1.storeIds)
          and t1.endTime >= now()
        and t1.status = 1
            order by t1.sort desc
    </select>
    <select id="getMyHuiminCardList" resultType="com.dsh.activity.model.response.MyHuiminCardVO">
        select t1.* from t_pay_huimin t1
        where  t1.status = 2
            and t1.appUserId = #{appUserId}
        where
            t1.status!=1
            and
            t1.appUserId = #{appUserId}
            limit #{pageNo}, #{pageSize}
    </select>
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/account/StudentClient.java
@@ -5,7 +5,9 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Date;
import java.util.List;
/**
@@ -33,4 +35,6 @@
    @PostMapping("/student/queryById")
    TStudent queryById(Integer id);
}
cloud-server-competition/src/main/java/com/dsh/competition/feignclient/account/StudentClient.java
@@ -6,6 +6,7 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@@ -34,4 +35,11 @@
    @PostMapping("/student/queryById")
    TStudent queryById(Integer id);
    /**
     * 添加学员
     *
     * @return
     */
    @RequestMapping("/base/student/addStudent")
    public Object addStudent(@RequestBody TStudent student);
}
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
@@ -23,6 +23,7 @@
import com.dsh.competition.util.JuHeUtil;
import com.dsh.competition.util.ResultUtil;
import com.dsh.competition.util.ToolUtil;
import io.undertow.util.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -88,6 +89,26 @@
        participant.setState(1);
        participant.setInsertTime(new Date());
        this.save(participant);
        TStudent tStudent = new TStudent();
        tStudent.setAppUserId(uid);
        tStudent.setName(addParticipant.getName());
        tStudent.setPhone(addParticipant.getPhone());
        if (ToolUtil.isNotEmpty(addParticipant.getBirthday())){
            Date date = DateUtils.parseDate(addParticipant.getBirthday());
            tStudent.setBirthday(date);
        }else{
                String birthDateStr = addParticipant.getIdcard().substring(6, 14);
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
            Date parse = dateFormat.parse(birthDateStr);
            tStudent.setBirthday(parse);
        }
        tStudent.setSex(addParticipant.getGender());
        tStudent.setIdCard(addParticipant.getIdcard());
        tStudent.setState(1);
        tStudent.setInsertTime(new Date());
        tStudent.setHeadImg(addParticipant.getHeadImg());
        tStudent.setIsDefault(2);
        studentClient.addStudent(tStudent);
        return ResultUtil.success();
    }
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
@@ -126,7 +126,7 @@
     *使用范围1门店2场地
     */
    @TableField("useScope")
    private String useScope;
    private Integer useScope;
    /**
     *根据适用范围,存储门店id或场地id,多个逗号分隔
     */
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
@@ -184,12 +184,39 @@
    @PostMapping(value = "/add")
    @ResponseBody
    public Object add(THuiminCard tHuiminCard) {
        int a = 0;
        if (tHuiminCard.getUseScope()==1){
            tHuiminCard.setStoreIds(tHuiminCard.getUseIds());
        }else{
            StringBuilder storeIds = new StringBuilder();
            for (String s : tHuiminCard.getUseIds().split(",")) {
                TSite site = tSiteService.getById(s);
                if (site!=null){
                    storeIds.append(site.getStoreId()).append(",");
                }
            }
            StringBuilder stringBuilder = storeIds.deleteCharAt(storeIds.length() - 1);
            tHuiminCard.setStoreIds(stringBuilder.toString());
        }
        huiminCardClient.save(tHuiminCard);
        return SUCCESS_TIP;
    }
    @RequestMapping(value = "/update")
    @ResponseBody
    public Object update(THuiminCard tHuiminCard) {
        if (tHuiminCard.getUseScope()==1){
            tHuiminCard.setStoreIds(tHuiminCard.getUseIds());
        }else{
            StringBuilder storeIds = new StringBuilder();
            for (String s : tHuiminCard.getUseIds().split(",")) {
                TSite site = tSiteService.getById(s);
                if (site!=null){
                    storeIds.append(site.getStoreId()).append(",");
                }
            }
            StringBuilder stringBuilder = storeIds.deleteCharAt(storeIds.length() - 1);
            tHuiminCard.setStoreIds(stringBuilder.toString());
        }
        huiminCardClient.updateById(tHuiminCard);
        return SUCCESS_TIP;
    }
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -79,7 +79,8 @@
    @Resource
    private CourseRecordClient courseRecordClient;
@Resource
private StoreService storeService;
    @Autowired
    private RedisUtil redisUtil;
@@ -320,6 +321,22 @@
            return null;
        }
    }
    /**
     * 根据id获取数据
     *
     * @param ids
     * @return
     */
    @ResponseBody
    @PostMapping("/site/querySiteByStoreIds")
    public List<Site> querySiteByStoreIds(@RequestBody String ids) {
        try {
            return siteService.lambdaQuery().in(Site::getStoreId,Arrays.asList(ids.split(","))).list();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    @ResponseBody