From bf6dec40a0fffeb65d698640a2ca1afdb7576754 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期日, 30 三月 2025 22:45:11 +0800
Subject: [PATCH] 惠民卡代码

---
 cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java |  315 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 302 insertions(+), 13 deletions(-)

diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java
index 3173671..2c4eab8 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java
@@ -15,6 +15,7 @@
 import com.dsh.activity.feignclient.model.TAppUser;
 import com.dsh.activity.feignclient.other.OperatorClient;
 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;
@@ -25,23 +26,21 @@
 import com.dsh.activity.model.request.CommodityRequest;
 import com.dsh.activity.model.request.CouponDataVo;
 import com.dsh.activity.model.request.CouponPackageReq;
-import com.dsh.activity.model.response.CouponPackageResp;
-import com.dsh.activity.model.response.HuiminAgreementVO;
-import com.dsh.activity.model.response.HuiminCardVO;
+import com.dsh.activity.model.response.*;
 import com.dsh.activity.service.*;
-import com.dsh.activity.util.GDMapGeocodingUtil;
-import com.dsh.activity.util.ResultUtil;
-import com.dsh.activity.util.TokenUtil;
-import com.dsh.activity.util.ToolUtil;
+import com.dsh.activity.util.*;
 import com.google.gson.Gson;
 import io.swagger.annotations.*;
+import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.tags.EditorAwareTag;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -68,18 +67,168 @@
     private HuiminCardService huiminCardService;
     @Resource
     private PayHuiminService payHuiminService;
+    @Resource
+    private SiteClient siteClient;
+    @Resource
+    private StoreClient storeClient;
+    @Resource
+    private PayMoneyUtil payMoneyUtil;
+    @Resource
+    private HuiminRecordService huiminRecordService;
+    @Resource
+    private StudentClient studentClient;
 
 
     @Autowired
     private TokenUtil tokenUtil;
+    private String smid = "2088330203191220";//平台支付宝商户号
 
+    public static void main(String[] args) {
+        Date date = new Date();
 
+        date.setMonth(11);
+        date.setDate(31);
+        date.setHours(23);
+        date.setMinutes(59);
+        date.setSeconds(59);
+        System.err.println(date);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        System.err.println(simpleDateFormat.format(date));
+    }
+    /**
+     * 查看惠民卡详情
+     */
+    @ResponseBody
+    @PostMapping("/payHuiminCard")
+    @ApiOperation(value = "购买惠民卡")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "惠民卡id", name = "id", dataType = "int", required = true),
+            @ApiImplicitParam(value = "支付方式1微信2支付宝", name = "payType", dataType = "int", required = true),
+            @ApiImplicitParam(value = "绑定学员ids多,个逗号拼接", name = "studentIds", dataType = "String", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<THuiminCard> payHuiminCard(Integer id,Integer payType,String studentIds) {
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if (null == uid) {
+                return ResultUtil.tokenErr();
+            }
+            THuiminCard huiminCard = huiminCardService.getById(id);
+            TPayHuimin tPayHuimin = new TPayHuimin();
+            tPayHuimin.setSalesMoney(huiminCard.getSalesMoney());
+            tPayHuimin.setAppUserId(uid);
+            tPayHuimin.setStudentId(studentIds);
+            switch (huiminCard.getHuiMinType()){
+                case 1:
+                    // 年度卡
+                    LocalDateTime localDateTime = LocalDateTime.now().plusDays(365);
+                    // 将LocalDateTime转换为Date类型
+                    Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
+                    tPayHuimin.setEndTime(date);
+                    break;
+                case 2:
+                    // 年内卡
+                    Date date1 = new Date();
 
+                    date1.setMonth(11);
+                    date1.setDate(31);
+                    date1.setHours(23);
+                    date1.setMinutes(59);
+                    date1.setSeconds(59);
+                    tPayHuimin.setEndTime(date1);
+                    break;
+            }
+            tPayHuimin.setInsertTime(new Date());
+            tPayHuimin.setStatus(1);
+            tPayHuimin.setPaymentType(payType);
+            tPayHuimin.setRefundStatus(1);
+            tPayHuimin.setCardId(huiminCard.getId());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+            tPayHuimin.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5));
+            switch (payType){
+                case 1:
+                    return payMoneyUtil.weixinpay("购买惠民卡"+"-"+0, "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(),
+                            "/huimin/callBack/weixinPayHuiminCallback", "APP", "");
+                case 2:
+                    return payMoneyUtil.alipay(smid,"购买惠民卡", "购买惠民卡", "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(),
+                            "/huimin/callBack/aliPayHuiminCallback");
+            }
 
-
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResultUtil.success();
+        }
+        return ResultUtil.success();
+    }
 
     /**
-     * 查询注册赠送优惠券 判断当前优惠券限领数量
+     * 查看惠民卡详情
+     */
+    @ResponseBody
+    @PostMapping("/getHuiminCardDetail")
+    @ApiOperation(value = "查看惠民卡详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "惠民卡id", name = "id", dataType = "int", required = true),
+            @ApiImplicitParam(value = "门店id", name = "storeId", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<THuiminCard> getHuiminCardDetail(Integer id,Integer storeId) {
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if (null == uid) {
+                return ResultUtil.tokenErr();
+            }
+            THuiminCard huiminCard = huiminCardService.getById(id);
+            List<TPayHuimin> payHuimins = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>()
+                    .eq(TPayHuimin::getAppUserId, uid)
+                    .ge(TPayHuimin::getEndTime,new Date())
+                    .eq(TPayHuimin::getStatus, 1));
+            List<TPayHuimin> collect = payHuimins.stream().filter(e -> e.getCardId().equals(huiminCard.getId())).collect(Collectors.toList());
+            if (!collect.isEmpty()){
+                huiminCard.setIsBuy(1);
+            }else{
+                huiminCard.setIsBuy(0);
+            }
+                List<Store> stores = storeClient.queryStoreByIds(Collections.singletonList(storeId));
+                if (!stores.isEmpty()){
+                    Store store = stores.get(0);
+                    Integer operatorId = store.getOperatorId();
+                    if (operatorId==null||operatorId==0){
+                        // 平台门店
+                        THuiminAgreement huiminAgreement = huiminAgreementService.getOne(new LambdaQueryWrapper<THuiminAgreement>()
+                                .isNull(THuiminAgreement::getOperatorId));
+                        if (huiminAgreement!=null){
+                            List<THuiminAgreementSetting> list = huiminAgreementSettingService.list(new LambdaQueryWrapper<THuiminAgreementSetting>()
+                                    .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement.getId()));
+                            huiminCard.setAgreementSettings(list);
+                        }else {
+                            huiminCard.setAgreementSettings(new ArrayList<>());
+
+                        }
+                    }else{
+                        // 运营商门店
+                        THuiminAgreement huiminAgreement = huiminAgreementService.getOne(new LambdaQueryWrapper<THuiminAgreement>()
+                                .eq(THuiminAgreement::getOperatorId,operatorId));
+                        if (huiminAgreement!=null){
+                            List<THuiminAgreementSetting> list = huiminAgreementSettingService.list(new LambdaQueryWrapper<THuiminAgreementSetting>()
+                                    .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement.getId()));
+                            huiminCard.setAgreementSettings(list);
+                        }else {
+                            huiminCard.setAgreementSettings(new ArrayList<>());
+                        }
+                    }
+                }else{
+                    huiminCard.setAgreementSettings(new ArrayList<>());
+                }
+
+            return ResultUtil.success(huiminCard);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResultUtil.success();
+        }
+    }
+    /**
+     * 惠民卡富文本内容-惠民卡列表
      */
     @ResponseBody
     @PostMapping("/getHuiminAgreementAndList")
@@ -98,15 +247,13 @@
             }
             pageNo = (pageNo - 1) * pageSize;
             HuiminAgreementVO huiminAgreementVO = new HuiminAgreementVO();
-            List<THuiminCard> list = huiminCardService.list(new LambdaQueryWrapper<THuiminCard>()
-                    .eq(THuiminCard::getStoreId, storeId));
-            if (list.isEmpty()){
+            List<THuiminCard> cardList = huiminCardService.getHuiminAgreementAndList(pageNo,pageSize,storeId);
+            if (cardList.isEmpty()){
                 // 没有配置惠民卡 展示富文本内容
                 huiminAgreementVO.setShowType(1);
             }else{
                 huiminAgreementVO.setShowType(2);
             }
-            List<THuiminCard> cardList = huiminCardService.getHuiminAgreementAndList(pageNo,pageSize,storeId);
             List<TPayHuimin> payHuimins = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>()
                     .eq(TPayHuimin::getAppUserId, uid)
                     .ge(TPayHuimin::getEndTime,new Date())
@@ -118,8 +265,10 @@
                 List<TPayHuimin> collect = payHuimins.stream().filter(e -> e.getCardId().equals(huiminCardVO.getId())).collect(Collectors.toList());
                 if (!collect.isEmpty()){
                     huiminCardVO1.setCover(huiminCardVO.getBuyCover());
+                    huiminCardVO1.setIsBuy(1);
                 }else{
                     huiminCardVO1.setCover(huiminCardVO.getUnBuyCover());
+                    huiminCardVO1.setIsBuy(0);
                 }
                 huiminCardVOS.add(huiminCardVO1);
             }
@@ -130,6 +279,146 @@
             return ResultUtil.success(new HuiminAgreementVO());
         }
     }
+    /**
+     * 惠民卡富文本内容-惠民卡列表
+     */
+    @ResponseBody
+    @PostMapping("/myHuiminCardList")
+    @ApiOperation(value = "个人中心-我的惠民卡")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "页码,首页1", name = "pageSize", dataType = "int", required = true),
+            @ApiImplicitParam(value = "页条数", name = "pageNo", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<List<MyHuiminCardVO>> myHuiminCardList(Integer pageSize, Integer pageNo) {
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if (null == uid) {
+                return ResultUtil.tokenErr();
+            }
+            pageNo = (pageNo - 1) * pageSize;
+            List<MyHuiminCardVO> cardList = huiminCardService.getMyHuiminCardList(pageNo,pageSize,uid);
+            List<THuiminCard> list = huiminCardService.list();
+            for (MyHuiminCardVO myHuiminCardVO : cardList) {
+                if (myHuiminCardVO.getEndTime().before(new Date())){
+                    // 已过期
+                    myHuiminCardVO.setIsExpire(1);
+                }else{
+                    myHuiminCardVO.setIsExpire(0);
+                }
+                int count = huiminRecordService.count(new LambdaQueryWrapper<THuiminRecord>()
+                        .eq(THuiminRecord::getHuiminCardId, myHuiminCardVO.getCardId()));
+                // 购卡7日内没有使用记录可退款。超过7日不管有没有使用记录都不能退款
+                if (new Date().after(DateUtil.addDay(myHuiminCardVO.getPaymentTime(),7))){
+                    // 超过七天不可退款
+                    myHuiminCardVO.setIsRefund(0);
+                }else if (count>=7){
+                    myHuiminCardVO.setIsRefund(0);
+                }else{
+                    myHuiminCardVO.setIsRefund(1);
+                }
+                THuiminCard huiminCard = list.stream().filter(e -> e.getId().equals(myHuiminCardVO.getCardId())).findFirst().orElse(null);
+                if (null!=huiminCard){
+                    myHuiminCardVO.setCover(huiminCard.getBuyCover());
+                }
+                // 查询绑定人员列表
+                List<TStudent> studentByIds = studentClient.getStudentByIds(myHuiminCardVO.getStudentId());
+                myHuiminCardVO.setStudentList(studentByIds);
+            }
+            return ResultUtil.success(cardList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResultUtil.success(new ArrayList<>());
+        }
+    }
+    /**
+     * 个人中心-我的惠民卡-退款
+     */
+    @ResponseBody
+    @PostMapping("/refund")
+    @ApiOperation(value = "个人中心-我的惠民卡-退款")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "支付记录id", name = "id", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<List<MyHuiminCardVO>> refund(Integer id) {
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if (null == uid) {
+                return ResultUtil.tokenErr();
+            }
+            TPayHuimin tPayHuimin = payHuiminService.getById(id);
+            if (tPayHuimin==null){
+                return ResultUtil.error("订单不存在");
+            }
+            if (tPayHuimin.getStatus()==3 && tPayHuimin.getRefundStatus()!=1){
+                return ResultUtil.error("不可重复退款");
 
+            }
+            if (tPayHuimin.getPaymentType()==1){
+                Map<String, String> map = payMoneyUtil.wxRefund(tPayHuimin.getOrderNumber(), tPayHuimin.getCode(),
+                        tPayHuimin.getSalesMoney().toString(), tPayHuimin.getSalesMoney().toString(), "/base/worldCup/wxRefundWorldCupCallback");
+                if(!"SUCCESS".equals(map.get("return_code"))){
+                    System.err.println("-------------微信退款失败---------");
+                    System.err.println(map.get("return_msg"));
+                    return ResultUtil.error("微信退款失败");
+                }
+            }else{
+                Map<String, String> map = payMoneyUtil.aliRefund(tPayHuimin.getOrderNumber(), tPayHuimin.getSalesMoney().toString());
+                String return_code = map.get("code");
+                if (!"10000".equals(return_code)) {
+                    return ResultUtil.error(map.get("msg"));
+                }
+                String refund_id = map.get("trade_no");
+                tPayHuimin.setRefundNumber(refund_id);
+                tPayHuimin.setRefundTime(new Date());
+                tPayHuimin.setStatus(3);
+                tPayHuimin.setRefundStatus(2);
+                payHuiminService.updateById(tPayHuimin);
+            }
+
+            return ResultUtil.success();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResultUtil.success(new ArrayList<>());
+        }
+    }
+    /**
+     * 个人中心-我的惠民卡-查看详情
+     */
+    @ResponseBody
+    @PostMapping("/myHuiminCardDetail")
+    @ApiOperation(value = "个人中心-我的惠民卡-查看详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "支付记录id", name = "id", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<MyHuiminCardDetailVO> myHuiminCardDetail(Integer id) {
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if (null == uid) {
+                return ResultUtil.tokenErr();
+            }
+            TPayHuimin tPayHuimin = payHuiminService.getById(id);
+            if (tPayHuimin==null){
+                return ResultUtil.error("惠民卡不存在");
+            }
+            THuiminCard byId = huiminCardService.getById(tPayHuimin.getCardId());
+            MyHuiminCardDetailVO myHuiminCardDetailVO = new MyHuiminCardDetailVO();
+//            myHuiminCardDetailVO.setQrCode();
+            myHuiminCardDetailVO.setCardId(tPayHuimin.getCardId());
+            if (byId!=null){
+                myHuiminCardDetailVO.setIntroduce(byId.getIntroduce());
+            }
+            myHuiminCardDetailVO.setEndTime(tPayHuimin.getEndTime());
+            // 查询绑定人员列表
+            List<TStudent> studentByIds = studentClient.getStudentByIds(tPayHuimin.getStudentId());
+            myHuiminCardDetailVO.setStudentList(studentByIds);
+            return ResultUtil.success(myHuiminCardDetailVO);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResultUtil.success(new MyHuiminCardDetailVO());
+        }
+    }
 
 }

--
Gitblit v1.7.1