无关风月
2025-03-30 bf6dec40a0fffeb65d698640a2ca1afdb7576754
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());
        }
    }
}