From 9486766c806fe1d9e082b2fd02ea1cc558f1b443 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 08 五月 2025 09:21:57 +0800 Subject: [PATCH] bug修改 --- cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminController.java | 704 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 595 insertions(+), 109 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 663def8..75b3aa0 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 @@ -1,6 +1,8 @@ package com.dsh.activity.controller; +import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -17,10 +19,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; @@ -39,8 +38,11 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.format.TextStyle; import java.util.*; import java.util.stream.Collectors; @@ -50,7 +52,7 @@ */ @RestController @RequestMapping("/huimin") -@Api(tags = "惠民卡新增") +@Api(tags = "玩湃惠民卡新增") public class HuiminController { @Autowired @@ -83,42 +85,50 @@ 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 = "购买惠民卡") + @ApiOperation(value = "购买玩湃惠民卡") @ApiImplicitParams({ - @ApiImplicitParam(value = "惠民卡id", name = "id", dataType = "int", required = true), + @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) { + 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); + if (huiminCard.getEndTime() != null && huiminCard.getEndTime().before(new Date())) { + return ResultUtil.error("该玩湃惠民卡已过期"); + } + 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()); + String[] split = studentIds.split(","); + + tPayHuimin.setSalesMoney(huiminCard.getSalesMoney().multiply(new BigDecimal(split.length)).setScale(2)); tPayHuimin.setAppUserId(uid); tPayHuimin.setStudentId(studentIds); - switch (huiminCard.getHuiMinType()){ + switch (huiminCard.getHuiMinType()) { case 1: // 年度卡 LocalDateTime localDateTime = LocalDateTime.now().plusDays(365); @@ -129,12 +139,11 @@ case 2: // 年内卡 Date date1 = new Date(); - date1.setMonth(11); date1.setDate(31); date1.setHours(23); date1.setMinutes(59); - date1.setSeconds(59); + date1.setSeconds(57); tPayHuimin.setEndTime(date1); break; } @@ -145,13 +154,17 @@ tPayHuimin.setCardId(huiminCard.getId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); tPayHuimin.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); - switch (payType){ + 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(), - "/huimin/callBack/weixinPayHuiminCallback", "APP", ""); + return payMoneyUtil.weixinpay("购买玩湃惠民卡" + "-" + 0, "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(), + "/base/huimin/callBack/weixinPayHuiminCallback", "APP", ""); case 2: - return payMoneyUtil.alipay(smid,"购买惠民卡", "购买惠民卡", "", tPayHuimin.getCode(), tPayHuimin.getSalesMoney().toString(), - "/huimin/callBack/aliPayHuiminCallback"); + String string = tPayHuimin.getSalesMoney().toString(); + return payMoneyUtil.alipay(smid, "购买玩湃惠民卡", "购买玩湃惠民卡", "", tPayHuimin.getCode(), string, + "/base/huimin/callBack/aliPayHuiminCallback"); } } catch (Exception e) { @@ -161,18 +174,19 @@ return ResultUtil.success(); } + /** - * 查看惠民卡详情 + * 查看玩湃惠民卡详情 */ @ResponseBody @PostMapping("/getHuiminCardDetail") - @ApiOperation(value = "查看惠民卡详情") + @ApiOperation(value = "查看玩湃惠民卡详情") @ApiImplicitParams({ - @ApiImplicitParam(value = "惠民卡id", name = "id", dataType = "int", required = true), + @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) { + public ResultUtil<THuiminCard> getHuiminCardDetail(Integer id, Integer storeId) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { @@ -181,45 +195,54 @@ THuiminCard huiminCard = huiminCardService.getById(id); List<TPayHuimin> payHuimins = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>() .eq(TPayHuimin::getAppUserId, uid) - .ge(TPayHuimin::getEndTime,new Date()) + .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()){ + if (!collect.isEmpty()) { huiminCard.setIsBuy(1); - }else{ + } 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>() + 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 { + THuiminAgreement huiminAgreement1 = huiminAgreementService.getOne(new LambdaQueryWrapper<THuiminAgreement>() .isNull(THuiminAgreement::getOperatorId)); - if (huiminAgreement!=null){ + if (huiminAgreement1 != null) { List<THuiminAgreementSetting> list = huiminAgreementSettingService.list(new LambdaQueryWrapper<THuiminAgreementSetting>() - .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement.getId())); + .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement1.getId())); huiminCard.setAgreementSettings(list); - }else { + } 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<>()); } + } else { + huiminCard.setAgreementSettings(new ArrayList<>()); + } return ResultUtil.success(huiminCard); } catch (Exception e) { @@ -227,79 +250,422 @@ return ResultUtil.success(); } } + /** - * 惠民卡富文本内容-惠民卡列表 + * 玩湃惠民卡富文本内容-玩湃惠民卡列表 */ @ResponseBody @PostMapping("/getHuiminAgreementAndList") - @ApiOperation(value = "惠民卡富文本内容-惠民卡列表") + @ApiOperation(value = "玩湃惠民卡富文本内容-玩湃惠民卡列表") @ApiImplicitParams({ @ApiImplicitParam(value = "页码,首页1", name = "pageSize", dataType = "int", required = true), @ApiImplicitParam(value = "页条数", name = "pageNo", 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<HuiminAgreementVO> getHuiminAgreementAndList(Integer pageSize, Integer pageNo,Integer storeId) { + public ResultUtil<HuiminAgreementVO> getHuiminAgreementAndList(Integer pageSize, Integer pageNo, Integer storeId) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } - pageNo = (pageNo - 1) * pageSize; HuiminAgreementVO huiminAgreementVO = new HuiminAgreementVO(); - List<THuiminCard> cardList = huiminCardService.getHuiminAgreementAndList(pageNo,pageSize,storeId); - if (cardList.isEmpty()){ - // 没有配置惠民卡 展示富文本内容 + List<THuiminCard> cardList = huiminCardService.getHuiminAgreementAndList(pageNo, pageSize, storeId); + List<THuiminCard> list = huiminCardService.list(); + + List<THuiminCard> cardListNolimit = huiminCardService.getHuiminAgreementAndListNolimit(storeId); + if (cardListNolimit.isEmpty()) { + // 没有配置玩湃惠民卡 展示富文本内容 huiminAgreementVO.setShowType(1); - }else{ + } else { huiminAgreementVO.setShowType(2); } List<Store> stores = storeClient.queryStoreByIds(Collections.singletonList(storeId)); Store store = stores.get(0); - if (store.getOperatorId()==null || store.getOperatorId()==0){ + if (store.getOperatorId() == null || store.getOperatorId() == 0) { // 平台 THuiminAgreement one = huiminAgreementService.getOne(new LambdaQueryWrapper<THuiminAgreement>() .isNull(THuiminAgreement::getOperatorId).last("limit 1")); huiminAgreementVO.setIntroduce(one.getStoreNoHuiminCardIntro()); - }else{ + } else { THuiminAgreement one = huiminAgreementService.getOne(new LambdaQueryWrapper<THuiminAgreement>() - .eq(THuiminAgreement::getOperatorId,store.getOperatorId()).last("limit 1")); - huiminAgreementVO.setIntroduce(one.getStoreNoHuiminCardIntro()); + .eq(THuiminAgreement::getOperatorId, store.getOperatorId()).last("limit 1")); + if (one == null) { + THuiminAgreement two = huiminAgreementService.getOne(new LambdaQueryWrapper<THuiminAgreement>() + .isNull(THuiminAgreement::getOperatorId).last("limit 1")); + huiminAgreementVO.setIntroduce(two.getStoreNoHuiminCardIntro()); + + } else { + huiminAgreementVO.setIntroduce(one.getStoreNoHuiminCardIntro()); + + } } List<TPayHuimin> payHuimins = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>() .eq(TPayHuimin::getAppUserId, uid) - .ge(TPayHuimin::getEndTime,new Date()) - .eq(TPayHuimin::getStatus, 1)); + .ge(TPayHuimin::getEndTime, new Date()) + .eq(TPayHuimin::getStatus, 2)); + + List<HuiminCardVO> huiminCardVOS = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List<TStudent> tStudents = studentClient.queryStudentList(uid); + List<Integer> integers = new ArrayList<>(); + + for (TPayHuimin payHuimin : payHuimins) { + if (integers.contains(payHuimin.getCardId())){ + continue; + } + THuiminCard huiminCard = list.stream().filter(e -> e.getId().equals(payHuimin.getCardId())).findFirst().orElse(null); + if (huiminCard == null) continue; + + HuiminCardVO huiminCardVO1 = new HuiminCardVO(); + huiminCardVO1.setId(huiminCard.getId()); + huiminCardVO1.setHuiminName(huiminCard.getHuiMinName()); + huiminCardVO1.setCover(huiminCard.getBuyCover()); + huiminCardVO1.setIsBuy(1); + int count = huiminRecordService.list(new LambdaQueryWrapper<THuiminRecord>() + .eq(THuiminRecord::getPayId, payHuimin.getId())).size(); + if (count>0){ + huiminCardVOS.add(huiminCardVO1); + integers.add(payHuimin.getCardId()); + continue; + } + String siteIds = ""; + if (huiminCard.getUseScope() == 2) { + siteIds = huiminCard.getUseIds(); + } else { + siteIds = siteClient.querySiteByStoreIds(huiminCard.getStoreIds()) + .stream() + .map(Site::getId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + } + String storeIds = huiminCard.getStoreIds(); + if (storeIds.contains("2024")) { + siteIds = siteIds + ",32"; + } + if (storeIds.contains("1001")) { + siteIds = siteIds + ",3"; + } + // 门店ids + JSONArray sid = JSONArray.parseArray(Arrays.toString(storeIds.split(","))); + // 场地ids + JSONArray rid = JSONArray.parseArray(Arrays.toString(siteIds.split(","))); + // 可用时间 + LocalDate today = LocalDate.now(); + + int week = today.getDayOfWeek().getValue(); + + JSONArray time = JSONArray.parseArray(huiminCard.getUseWeeks()); + JSONArray jsonArray = new JSONArray(); + String string = LocalDate.now().toString(); + Date date = new Date(); + if (date.before(huiminCard.getEndTime()) && date.after(huiminCard.getStartTime())) { + for (Object o : time) { + JSONObject jsonObject = (JSONObject) o; + for (Object days : jsonObject.getJSONArray("days")) { + JSONObject jsonObject1 = (JSONObject) days; + if (jsonObject1.getString("value").equals(String.valueOf(week)) && jsonObject1.getBoolean("checked")) { + JSONObject jsonObject2 = new JSONObject(); + String s1 = string + " " + jsonObject.getString("startTime") + ":00"; + String e1 = string + " " + jsonObject.getString("endTime") + ":00"; + // 转化为Date类型 + Date start = DateUtil.parse(s1, "yyyy-MM-dd HH:mm:ss"); + Date end = DateUtil.parse(e1, "yyyy-MM-dd HH:mm:ss"); + if (new Date().after(start) && new Date().before(end)) { +// jsonObject2.put("start_time", start.getTime() / 1000); + Date date1 = new Date(); + jsonObject2.put("start_time", date1.getTime() / 1000); + date1.setTime(date1.getTime() + 30 * 1000); + if (start.before(end)) { + jsonObject2.put("end_time", date1.getTime() / 1000); + jsonArray.add(jsonObject2); + } + } + } + } + } + } + if (!jsonArray.isEmpty()) { + huiminCardVO1.setEndTime(simpleDateFormat.format(payHuimin.getEndTime())); + TStudent tStudent = tStudents.stream().filter(e -> e.getId().equals(Integer.valueOf(payHuimin.getStudentId().split(",")[0]))).findFirst().orElse(null); + if (tStudent!=null){ + huiminCardVO1.setStudentName(tStudent.getName()); + } + String temp = "{\"id\":"+payHuimin.getId() + ","+"\"sid\":" + sid.toJSONString() + "," + "\"rid\":" + rid + "," + "\"uid\":\"" + payHuimin.getStudentId() + "\"," + "\"time\":" + jsonArray.toJSONString() + ",\"type\":" + 2 + "}"; + huiminCardVO1.setQrCode(temp); + huiminCardVOS.add(huiminCardVO1); + integers.add(payHuimin.getCardId()); + + } + } for (THuiminCard huiminCardVO : cardList) { HuiminCardVO huiminCardVO1 = new HuiminCardVO(); huiminCardVO1.setId(huiminCardVO.getId()); 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{ + if (!collect.isEmpty()) { + for (TPayHuimin tPayHuimin : collect) { + if (tPayHuimin.getStatus().equals(2)) { + huiminCardVO1.setCover(huiminCardVO.getBuyCover()); + huiminCardVO1.setIsBuy(1); + } else { + huiminCardVO1.setCover(huiminCardVO.getUnBuyCover()); + huiminCardVO1.setIsBuy(0); + } + } + } else { huiminCardVO1.setCover(huiminCardVO.getUnBuyCover()); huiminCardVO1.setIsBuy(0); } huiminCardVOS.add(huiminCardVO1); } - huiminAgreementVO.setCardList(huiminCardVOS); + // 手动对huiminCardVOS进行分页 + if (pageNo < 1) { + pageNo = 1; + } + if (pageSize < 1) { + pageSize = 10; // 默认每页10条 + } + + int startIndex = (pageNo - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, huiminCardVOS.size()); + // 防止 startIndex 超过 huiminCardVOS.size() + if (startIndex > huiminCardVOS.size()) { + startIndex = huiminCardVOS.size(); + } + List<HuiminCardVO> paginatedHuiminCardVOS = huiminCardVOS.subList(startIndex, endIndex); + // 将分页后的数据设置到 huiminAgreementVO 中 + huiminAgreementVO.setCardList(paginatedHuiminCardVOS); + // 将分页后的数据设置到 huiminAgreementVO 中 + huiminAgreementVO.setCardList(paginatedHuiminCardVOS); +// huiminAgreementVO.setCardList(huiminCardVOS); return ResultUtil.success(huiminAgreementVO); } catch (Exception e) { e.printStackTrace(); return ResultUtil.success(new HuiminAgreementVO()); } } + /** - * 惠民卡富文本内容-惠民卡列表 + * 玩湃惠民卡列表-根据玩湃惠民卡获取已购买绑定玩湃惠民卡的学员列表 + */ + @ResponseBody + @PostMapping("/getStudentListByCarId") + @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<TStudent>> getStudentListByCarId(Integer id) { + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if (null == uid) { + return ResultUtil.tokenErr(); + } + List<TPayHuimin> payHuimins = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>() + .eq(TPayHuimin::getAppUserId, uid) + .eq(TPayHuimin::getCardId, id) + .ge(TPayHuimin::getEndTime, new Date()) + .eq(TPayHuimin::getStatus, 2)); + List<THuiminCard> huiminCards = huiminCardService.list(); + List<Integer> studentIds = new ArrayList<>(); + for (TPayHuimin payHuimin : payHuimins) { + THuiminCard huiminCard = huiminCards.stream().filter(e -> e.getId().equals(payHuimin.getCardId())).findFirst().orElse(null); + if (huiminCard != null) { + String siteIds = ""; + if (huiminCard.getUseScope() == 2) { + siteIds = huiminCard.getUseIds(); + } else { + siteIds = siteClient.querySiteByStoreIds(huiminCard.getStoreIds()) + .stream() + .map(Site::getId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + } + String storeIds = huiminCard.getStoreIds(); + if (storeIds.contains("2024")) { + siteIds = siteIds + ",32"; + } + if (storeIds.contains("1001")) { + siteIds = siteIds + ",3"; + } + // 门店ids + JSONArray sid = JSONArray.parseArray(Arrays.toString(storeIds.split(","))); + // 场地ids + JSONArray rid = JSONArray.parseArray(Arrays.toString(siteIds.split(","))); + // 可用时间 + LocalDate today = LocalDate.now(); + + int week = today.getDayOfWeek().getValue(); + + JSONArray time = JSONArray.parseArray(huiminCard.getUseWeeks()); + JSONArray jsonArray = new JSONArray(); + String string = LocalDate.now().toString(); + + Date date = new Date(); + + if (date.before(huiminCard.getEndTime()) && date.after(huiminCard.getStartTime())) { + for (Object o : time) { + JSONObject jsonObject = (JSONObject) o; + for (Object days : jsonObject.getJSONArray("days")) { + JSONObject jsonObject1 = (JSONObject) days; + if (jsonObject1.getString("value").equals(String.valueOf(week)) && jsonObject1.getBoolean("checked")) { + JSONObject jsonObject2 = new JSONObject(); + String s1 = string + " " + jsonObject.getString("startTime") + ":00"; + String e1 = string + " " + jsonObject.getString("endTime") + ":00"; + // 转化为Date类型 + Date start = DateUtil.parse(s1, "yyyy-MM-dd HH:mm:ss"); + Date end = DateUtil.parse(e1, "yyyy-MM-dd HH:mm:ss"); + if (new Date().after(start) && new Date().before(end)) { +// jsonObject2.put("start_time", start.getTime() / 1000); + Date date1 = new Date(); + jsonObject2.put("start_time", date1.getTime() / 1000); + date1.setTime(date1.getTime() + 30 * 1000); + if (start.before(end)) { + jsonObject2.put("end_time", date1.getTime() / 1000); + jsonArray.add(jsonObject2); + } + } + } + } + } + } + if (!jsonArray.isEmpty()) { + // 将学员加入 + String[] split = payHuimin.getStudentId().split(","); + for (String s : split) { + studentIds.add(Integer.valueOf(s)); + } + } + } + } + String collect = studentIds.stream().map(String::valueOf).collect(Collectors.joining(",")); + List<TStudent> studentByIds = studentClient.getStudentByIds(collect); + return ResultUtil.success(studentByIds); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 玩湃惠民卡列表-选择学员后返回对应的二维码生成规则和有效期结束时间 + */ + @ResponseBody + @PostMapping("/getQrCodeByStudentId") + @ApiOperation(value = "玩湃惠民卡列表-选择学员后返回对应的二维码生成规则和有效期结束时间") + @ApiImplicitParams({ + @ApiImplicitParam(value = "玩湃惠民卡id", name = "cardId", dataType = "int", required = true), + @ApiImplicitParam(value = "学员id", name = "studentId", dataType = "int", required = true), + @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResultUtil<HuiminCardStudentVO> getQrCodeByStudentId(Integer cardId, Integer studentId) { + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if (null == uid) { + return ResultUtil.tokenErr(); + } + List<TStudent> tStudents = studentClient.queryStudentList(uid); + + List<TPayHuimin> payHuimins = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>() + .apply("FIND_IN_SET(" + studentId + ", studentId) > 0") +// .eq(TPayHuimin::getStudentId, studentId) + .eq(TPayHuimin::getCardId, cardId) + .ge(TPayHuimin::getEndTime, new Date()) + .eq(TPayHuimin::getStatus, 2) + + .orderByDesc(TPayHuimin::getEndTime)); + HuiminCardStudentVO huiminCardStudentVO = new HuiminCardStudentVO(); + + if (!payHuimins.isEmpty()) { + TPayHuimin tPayHuimin = payHuimins.get(0); + THuiminCard huiminCard = huiminCardService.getById(cardId); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + huiminCardStudentVO.setEndTime(simpleDateFormat.format(tPayHuimin.getEndTime())); + String siteIds = ""; + if (huiminCard.getUseScope() == 2) { + siteIds = huiminCard.getUseIds(); + } else { + siteIds = siteClient.querySiteByStoreIds(huiminCard.getStoreIds()) + .stream() + .map(Site::getId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + } + String storeIds = huiminCard.getStoreIds(); + if (storeIds.contains("2024")) { + siteIds = siteIds + ",32"; + } + if (storeIds.contains("1001")) { + siteIds = siteIds + ",3"; + } + // 门店ids + JSONArray sid = JSONArray.parseArray(Arrays.toString(storeIds.split(","))); + // 场地ids + JSONArray rid = JSONArray.parseArray(Arrays.toString(siteIds.split(","))); + // 可用时间 + LocalDate today = LocalDate.now(); + + int week = today.getDayOfWeek().getValue(); + + JSONArray time = JSONArray.parseArray(huiminCard.getUseWeeks()); + JSONArray jsonArray = new JSONArray(); + String string = LocalDate.now().toString(); + + Date date = new Date(); + + if (date.before(huiminCard.getEndTime()) && date.after(huiminCard.getStartTime())) { + for (Object o : time) { + JSONObject jsonObject = (JSONObject) o; + for (Object days : jsonObject.getJSONArray("days")) { + JSONObject jsonObject1 = (JSONObject) days; + if (jsonObject1.getString("value").equals(String.valueOf(week)) && jsonObject1.getBoolean("checked")) { + JSONObject jsonObject2 = new JSONObject(); + String s1 = string + " " + jsonObject.getString("startTime") + ":00"; + String e1 = string + " " + jsonObject.getString("endTime") + ":00"; + // 转化为Date类型 + Date start = DateUtil.parse(s1, "yyyy-MM-dd HH:mm:ss"); + Date end = DateUtil.parse(e1, "yyyy-MM-dd HH:mm:ss"); + jsonObject2.put("start_time", start.getTime() / 1000); + start.setTime(start.getTime() + 30 * 1000); + if (new Date().after(start) && new Date().before(end)) { +// jsonObject2.put("start_time", start.getTime() / 1000); + Date date1 = new Date(); + jsonObject2.put("start_time", date1.getTime() / 1000); + date1.setTime(date1.getTime() + 30 * 1000); + if (start.before(end)) { + jsonObject2.put("end_time", date1.getTime() / 1000); + jsonArray.add(jsonObject2); + } + } + } + } + } + } + + String temp = "{\"id\":"+tPayHuimin.getId() + ","+"\"sid\":" + sid.toJSONString() + "," + "\"rid\":" + rid + "," + "\"uid\":\"" + tPayHuimin.getStudentId() + "\"," + "\"time\":" + jsonArray.toJSONString() + ",\"type\":" + 2 + "}"; + huiminCardStudentVO.setQrCode(temp); + TStudent tStudent = tStudents.stream().filter(e -> e.getId().equals(studentId)).findFirst().orElse(null); + if (tStudent!=null){ + huiminCardStudentVO.setStudentName(tStudent.getName()); + } + } + + + return ResultUtil.success(huiminCardStudentVO); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 玩湃惠民卡富文本内容-玩湃惠民卡列表 */ @ResponseBody @PostMapping("/myHuiminCardList") - @ApiOperation(value = "个人中心-我的惠民卡") + @ApiOperation(value = "个人中心-我的玩湃惠民卡") @ApiImplicitParams({ @ApiImplicitParam(value = "页码,首页1", name = "pageSize", dataType = "int", required = true), @ApiImplicitParam(value = "页条数", name = "pageNo", dataType = "int", required = true), @@ -312,29 +678,40 @@ return ResultUtil.tokenErr(); } pageNo = (pageNo - 1) * pageSize; - List<MyHuiminCardVO> cardList = huiminCardService.getMyHuiminCardList(pageNo,pageSize,uid); + 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); - } + TPayHuimin byId = payHuiminService.getById(myHuiminCardVO.getId()); + myHuiminCardVO.setEndTime(byId.getEndTime()); + myHuiminCardVO.setSalesMoney(byId.getSalesMoney()); int count = huiminRecordService.count(new LambdaQueryWrapper<THuiminRecord>() - .eq(THuiminRecord::getHuiminCardId, myHuiminCardVO.getCardId())); + .eq(THuiminRecord::getPayId, byId.getId())); // 购卡7日内没有使用记录可退款。超过7日不管有没有使用记录都不能退款 - if (new Date().after(DateUtil.addDay(myHuiminCardVO.getPaymentTime(),7))){ + if (new Date().after(DateUtil.addDay(myHuiminCardVO.getPaymentTime(), 7))) { // 超过七天不可退款 myHuiminCardVO.setIsRefund(0); - }else if (count>=7){ + } else if (count > 0) { myHuiminCardVO.setIsRefund(0); - }else{ + } else { myHuiminCardVO.setIsRefund(1); } + if (byId.getStatus()==4){ + // 退款中 + myHuiminCardVO.setIsRefund(2); + + } THuiminCard huiminCard = list.stream().filter(e -> e.getId().equals(myHuiminCardVO.getCardId())).findFirst().orElse(null); - if (null!=huiminCard){ + if (null != huiminCard) { myHuiminCardVO.setCover(huiminCard.getBuyCover()); + } + if (myHuiminCardVO.getEndTime().before(new Date())) { + // 已过期 + myHuiminCardVO.setIsExpire(1); + if (null != huiminCard) { + myHuiminCardVO.setCover(huiminCard.getUnBuyCover()); + } + } else { + myHuiminCardVO.setIsExpire(0); } // 查询绑定人员列表 List<TStudent> studentByIds = studentClient.getStudentByIds(myHuiminCardVO.getStudentId()); @@ -346,12 +723,13 @@ return ResultUtil.success(new ArrayList<>()); } } + /** - * 个人中心-我的惠民卡-退款 + * 个人中心-我的玩湃惠民卡-退款 */ @ResponseBody @PostMapping("/refund") - @ApiOperation(value = "个人中心-我的惠民卡-退款") + @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.....") @@ -363,22 +741,38 @@ return ResultUtil.tokenErr(); } TPayHuimin tPayHuimin = payHuiminService.getById(id); - if (tPayHuimin==null){ + if (tPayHuimin == null) { return ResultUtil.error("订单不存在"); } - if (tPayHuimin.getStatus()==3 && tPayHuimin.getRefundStatus()!=1){ + if (tPayHuimin.getStatus() == 3 && tPayHuimin.getRefundStatus() != 1) { return ResultUtil.error("不可重复退款"); - } - if (tPayHuimin.getPaymentType()==1){ + + if (tPayHuimin.getEndTime().before(new Date())) { + // 已过期 + return ResultUtil.error("玩湃惠民卡已过期,不可退款"); + } + tPayHuimin.setStatus(4); + payHuiminService.updateById(tPayHuimin); + int count = huiminRecordService.list(new LambdaQueryWrapper<THuiminRecord>() + .eq(THuiminRecord::getPayId, tPayHuimin.getId())).size(); + + // 购卡7日内没有使用记录可退款。超过7日不管有没有使用记录都不能退款 + if (new Date().after(DateUtil.addDay(tPayHuimin.getPaymentTime(), 7))) { + // 超过七天不可退款 + return ResultUtil.error("玩湃惠民卡购买超过七天,不可退款"); + } else if (count > 0) { + 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"))){ + tPayHuimin.getSalesMoney().toString(), tPayHuimin.getSalesMoney().toString(), "/base/huimin/callBack/wxRefundHuiminCallback"); + if (!"SUCCESS".equals(map.get("return_code"))) { System.err.println("-------------微信退款失败---------"); System.err.println(map.get("return_msg")); return ResultUtil.error("微信退款失败"); } - }else{ + } else { Map<String, String> map = payMoneyUtil.aliRefund(tPayHuimin.getOrderNumber(), tPayHuimin.getSalesMoney().toString()); String return_code = map.get("code"); if (!"10000".equals(return_code)) { @@ -398,12 +792,15 @@ return ResultUtil.success(new ArrayList<>()); } } + + + /** - * 个人中心-我的惠民卡-查看详情 + * 个人中心-我的玩湃惠民卡-查看详情 */ @ResponseBody @PostMapping("/myHuiminCardDetail") - @ApiOperation(value = "个人中心-我的惠民卡-查看详情") + @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.....") @@ -415,16 +812,81 @@ return ResultUtil.tokenErr(); } TPayHuimin tPayHuimin = payHuiminService.getById(id); - if (tPayHuimin==null){ - return ResultUtil.error("惠民卡不存在"); + 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()); + List<TStudent> studentByIds1 = studentClient.getStudentByIds(tPayHuimin.getStudentId()); + if (CollUtil.isNotEmpty(studentByIds1)) { + myHuiminCardDetailVO.setStudentName(studentByIds1.get(0).getName()); } + 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 storeIds = byId.getStoreIds(); + if (storeIds.contains("2024")) { + siteIds = siteIds + ",32"; + } + if (storeIds.contains("1001")) { + siteIds = siteIds + ",3"; + } + // 门店ids + JSONArray sid = JSONArray.parseArray(Arrays.toString(storeIds.split(","))); + // 场地ids + JSONArray rid = JSONArray.parseArray(Arrays.toString(siteIds.split(","))); + // 可用时间 + LocalDate today = LocalDate.now(); + + int week = today.getDayOfWeek().getValue(); + + JSONArray time = JSONArray.parseArray(byId.getUseWeeks()); + JSONArray jsonArray = new JSONArray(); + String string = LocalDate.now().toString(); + + Date date = new Date(); + + if (date.before(byId.getEndTime()) && date.after(byId.getStartTime())) { + for (Object o : time) { + JSONObject jsonObject = (JSONObject) o; + for (Object days : jsonObject.getJSONArray("days")) { + JSONObject jsonObject1 = (JSONObject) days; + if (jsonObject1.getString("value").equals(String.valueOf(week)) && jsonObject1.getBoolean("checked")) { + JSONObject jsonObject2 = new JSONObject(); + String s1 = string + " " + jsonObject.getString("startTime") + ":00"; + String e1 = string + " " + jsonObject.getString("endTime") + ":00"; + // 转化为Date类型 + Date start = DateUtil.parse(s1, "yyyy-MM-dd HH:mm:ss"); + Date end = DateUtil.parse(e1, "yyyy-MM-dd HH:mm:ss"); + jsonObject2.put("start_time", start.getTime() / 1000); + start.setTime(start.getTime() + 30 * 1000); + if (new Date().after(start) && new Date().before(end)) { +// jsonObject2.put("start_time", start.getTime() / 1000); + Date date1 = new Date(); + jsonObject2.put("start_time", date1.getTime() / 1000); + date1.setTime(date1.getTime() + 30 * 1000); + if (start.before(end)) { + jsonObject2.put("end_time", date1.getTime() / 1000); + jsonArray.add(jsonObject2); + } + } + } + } + } + } + + String temp = "{\"id\":"+tPayHuimin.getId() + ","+"\"sid\":" + sid.toJSONString() + "," + "\"rid\":" + rid + "," + "\"uid\":\"" + tPayHuimin.getStudentId() + "\"," + "\"time\":" + jsonArray.toJSONString() + ",\"type\":" + 2 + "}"; + myHuiminCardDetailVO.setQrCode(temp); + myHuiminCardDetailVO.setCardId(tPayHuimin.getCardId()); + myHuiminCardDetailVO.setHuiminCard(byId); + myHuiminCardDetailVO.setIntroduce(byId.getIntroduce()); myHuiminCardDetailVO.setEndTime(tPayHuimin.getEndTime()); // 查询绑定人员列表 List<TStudent> studentByIds = studentClient.getStudentByIds(tPayHuimin.getStudentId()); @@ -436,4 +898,28 @@ } } + /** + * 获取添加人员、选择人员说明文案 + */ + @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()); + } + } + } -- Gitblit v1.7.1