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; import com.dsh.activity.entity.*; import com.dsh.activity.feignclient.account.AppUserClient; import com.dsh.activity.feignclient.account.CityClient; import com.dsh.activity.feignclient.account.StoreStaffClient; import com.dsh.activity.feignclient.account.StudentClient; import com.dsh.activity.feignclient.account.model.AppUserByNameAndPhoneDTO; import com.dsh.activity.feignclient.model.CouponExamineListSearch; import com.dsh.activity.feignclient.model.CouponListOfSearch; 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.*; import com.dsh.activity.model.CouponListVo; import com.dsh.activity.model.CouponRecordQuery; 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.*; import com.dsh.activity.service.*; 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.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; /** * @author zhibing.pu * @date 2023/6/24 11:27 */ @RestController @RequestMapping("/huimin") @Api(tags = "玩湃惠民卡新增") public class HuiminController { @Autowired private ICouponService couponService; @Autowired private HuiminAgreementService huiminAgreementService; @Autowired private HuiminAgreementSettingService huiminAgreementSettingService; @Resource 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";//平台支付宝商户号 /** * 查看玩湃惠民卡详情 */ @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 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(); String[] split = studentIds.split(","); tPayHuimin.setSalesMoney(huiminCard.getSalesMoney().multiply(new BigDecimal(split.length)).setScale(2)); 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(57); 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)); 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(), "/base/huimin/callBack/weixinPayHuiminCallback", "APP", ""); case 2: String string = tPayHuimin.getSalesMoney().toString(); return payMoneyUtil.alipay(smid, "购买玩湃惠民卡", "购买玩湃惠民卡", "", tPayHuimin.getCode(), string, "/base/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 getHuiminCardDetail(Integer id, Integer storeId) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } THuiminCard huiminCard = huiminCardService.getById(id); List payHuimins = payHuiminService.list(new LambdaQueryWrapper() .eq(TPayHuimin::getAppUserId, uid) .ge(TPayHuimin::getEndTime, new Date()) .eq(TPayHuimin::getStatus, 1)); List collect = payHuimins.stream().filter(e -> e.getCardId().equals(huiminCard.getId())).collect(Collectors.toList()); if (!collect.isEmpty()) { huiminCard.setIsBuy(1); } else { huiminCard.setIsBuy(0); } List 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() .isNull(THuiminAgreement::getOperatorId)); if (huiminAgreement != null) { List list = huiminAgreementSettingService.list(new LambdaQueryWrapper() .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement.getId())); huiminCard.setAgreementSettings(list); } else { huiminCard.setAgreementSettings(new ArrayList<>()); } } else { // 运营商门店 THuiminAgreement huiminAgreement = huiminAgreementService.getOne(new LambdaQueryWrapper() .eq(THuiminAgreement::getOperatorId, operatorId)); if (huiminAgreement != null) { List list = huiminAgreementSettingService.list(new LambdaQueryWrapper() .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement.getId())); huiminCard.setAgreementSettings(list); } else { THuiminAgreement huiminAgreement1 = huiminAgreementService.getOne(new LambdaQueryWrapper() .isNull(THuiminAgreement::getOperatorId)); if (huiminAgreement1 != null) { List list = huiminAgreementSettingService.list(new LambdaQueryWrapper() .eq(THuiminAgreementSetting::getAgreementId, huiminAgreement1.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") @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 getHuiminAgreementAndList(Integer pageSize, Integer pageNo, Integer storeId) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } HuiminAgreementVO huiminAgreementVO = new HuiminAgreementVO(); List cardList = huiminCardService.getHuiminAgreementAndList(pageNo, pageSize, storeId); List list = huiminCardService.list(); List cardListNolimit = huiminCardService.getHuiminAgreementAndListNolimit(storeId); if (cardListNolimit.isEmpty()) { // 没有配置玩湃惠民卡 展示富文本内容 huiminAgreementVO.setShowType(1); } else { huiminAgreementVO.setShowType(2); } List stores = storeClient.queryStoreByIds(Collections.singletonList(storeId)); Store store = stores.get(0); if (store.getOperatorId() == null || store.getOperatorId() == 0) { // 平台 THuiminAgreement one = huiminAgreementService.getOne(new LambdaQueryWrapper() .isNull(THuiminAgreement::getOperatorId).last("limit 1")); huiminAgreementVO.setIntroduce(one.getStoreNoHuiminCardIntro()); } else { THuiminAgreement one = huiminAgreementService.getOne(new LambdaQueryWrapper() .eq(THuiminAgreement::getOperatorId, store.getOperatorId()).last("limit 1")); if (one == null) { THuiminAgreement two = huiminAgreementService.getOne(new LambdaQueryWrapper() .isNull(THuiminAgreement::getOperatorId).last("limit 1")); huiminAgreementVO.setIntroduce(two.getStoreNoHuiminCardIntro()); } else { huiminAgreementVO.setIntroduce(one.getStoreNoHuiminCardIntro()); } } List payHuimins = payHuiminService.list(new LambdaQueryWrapper() .eq(TPayHuimin::getAppUserId, uid) .ge(TPayHuimin::getEndTime, new Date()) .eq(TPayHuimin::getStatus, 2)); List huiminCardVOS = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); List tStudents = studentClient.queryStudentList(uid); List 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() .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 collect = payHuimins.stream().filter(e -> e.getCardId().equals(huiminCardVO.getId())).collect(Collectors.toList()); 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); } // 手动对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 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> getStudentListByCarId(Integer id) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } List payHuimins = payHuiminService.list(new LambdaQueryWrapper() .eq(TPayHuimin::getAppUserId, uid) .eq(TPayHuimin::getCardId, id) .ge(TPayHuimin::getEndTime, new Date()) .eq(TPayHuimin::getStatus, 2)); List huiminCards = huiminCardService.list(); List 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 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 getQrCodeByStudentId(Integer cardId, Integer studentId) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } List tStudents = studentClient.queryStudentList(uid); List payHuimins = payHuiminService.list(new LambdaQueryWrapper() .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 = "个人中心-我的玩湃惠民卡") @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> myHuiminCardList(Integer pageSize, Integer pageNo) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } pageNo = (pageNo - 1) * pageSize; List cardList = huiminCardService.getMyHuiminCardList(pageNo, pageSize, uid); List list = huiminCardService.list(); for (MyHuiminCardVO myHuiminCardVO : cardList) { TPayHuimin byId = payHuiminService.getById(myHuiminCardVO.getId()); myHuiminCardVO.setEndTime(byId.getEndTime()); myHuiminCardVO.setSalesMoney(byId.getSalesMoney()); int count = huiminRecordService.count(new LambdaQueryWrapper() .eq(THuiminRecord::getPayId, byId.getId())); // 购卡7日内没有使用记录可退款。超过7日不管有没有使用记录都不能退款 if (new Date().after(DateUtil.addDay(myHuiminCardVO.getPaymentTime(), 7))) { // 超过七天不可退款 myHuiminCardVO.setIsRefund(0); } else if (count > 0) { myHuiminCardVO.setIsRefund(0); } 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) { 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 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> 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.getEndTime().before(new Date())) { // 已过期 return ResultUtil.error("玩湃惠民卡已过期,不可退款"); } tPayHuimin.setStatus(4); payHuiminService.updateById(tPayHuimin); int count = huiminRecordService.list(new LambdaQueryWrapper() .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 map = payMoneyUtil.wxRefund(tPayHuimin.getOrderNumber(), tPayHuimin.getCode(), 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 { Map 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 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(); List 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 studentByIds = studentClient.getStudentByIds(tPayHuimin.getStudentId()); myHuiminCardDetailVO.setStudentList(studentByIds); return ResultUtil.success(myHuiminCardDetailVO); } catch (Exception e) { e.printStackTrace(); 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 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()); } } }