diff --git a/modules/common/system/controller/WxOfficialController.java b/modules/common/system/controller/WxOfficialController.java index fab9a90..b264617 100644 --- a/modules/common/system/controller/WxOfficialController.java +++ b/modules/common/system/controller/WxOfficialController.java @@ -246,7 +246,7 @@ public class WxOfficialController extends BaseController { .execute().body(); JSONObject jsonObject = JSONObject.parseObject(result); - System.out.println("jsonObject = " + jsonObject); +// System.out.println("jsonObject = " + jsonObject); if(jsonObject != null){ return success(jsonObject); } diff --git a/pom.xml b/pom.xml index 76e8f91..b231a39 100644 --- a/pom.xml +++ b/pom.xml @@ -233,6 +233,12 @@ commons-logging 1.2 + + + commons-net + commons-net + 3.9.0 + com.alibaba diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java index 1ef1103..a262e4f 100644 --- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java @@ -136,6 +136,7 @@ public class MybatisPlusConfig { "think_wechat_bill", "think_wechat_bill_log", "think_wechat_deposit", + "think_card_balance", "sys_log" // "booking_user", diff --git a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java index 8b0b82d..5cfb786 100644 --- a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java @@ -79,7 +79,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { "/api/think/think-order/check-code-only", "/api/think/think-vip-cards-bills/make-bill", "/api/think/think-cards-bills/make-bill", - "/api/think/think-recharge-log/refund-notify" + "/api/think/think-recharge-log/refund-notify", + "/api/think/think-ftp-check-bill/async", + "/api/think/think-card-balance/set-data" // "/api/think/think-order/fixInvoiceData" ) .permitAll() diff --git a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java index 65d72db..1ff53d0 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java @@ -48,6 +48,25 @@ public class RequestUtil { } + public User getOrgAdmin(Integer orgId) { + String path = "/system/user/org-admin/" + orgId; + try { + // 链式构建请求 + String result = HttpRequest.get(host.concat(path)) + .header("Authorization", ACCESS_TOKEN) + .header("Tenantid", TENANT_ID) + .timeout(20000)//超时,毫秒 + .execute().body(); + + JSONObject jsonObject = JSONObject.parseObject(result); + final String data = jsonObject.getString("data"); + return JSONObject.parseObject(data, User.class); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public User getUserByPhone(String phone) { String path = "/system/user/getByPhone/" + phone; try { @@ -78,7 +97,7 @@ public class RequestUtil { .execute().body(); JSONObject jsonObject = JSONObject.parseObject(result); - System.out.println("jsonObject = " + jsonObject); +// System.out.println("jsonObject = " + jsonObject); final String data = jsonObject.getString("data"); return JSONObject.parseObject(data, User.class); } catch (Exception e) { diff --git a/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java b/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java index eab091a..7972c4d 100644 --- a/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java +++ b/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java @@ -21,6 +21,9 @@ public class ApiResult implements Serializable { @ApiModelProperty(value = "状态信息") private String message; + @ApiModelProperty(value = "内容") + private T content; + @ApiModelProperty(value = "返回数据") private T data; @@ -66,6 +69,15 @@ public class ApiResult implements Serializable { return this; } + public T getContent() { + return this.content; + } + + public ApiResult setContent(T content) { + this.content = content; + return this; + } + public T getData() { return this.data; } diff --git a/src/main/java/com/gxwebsoft/common/core/web/BaseController.java b/src/main/java/com/gxwebsoft/common/core/web/BaseController.java index 22dff4f..de80cf1 100644 --- a/src/main/java/com/gxwebsoft/common/core/web/BaseController.java +++ b/src/main/java/com/gxwebsoft/common/core/web/BaseController.java @@ -27,10 +27,10 @@ import java.util.Map; * @since 2017-06-10 10:10:19 */ public class BaseController { - @Resource - private HttpServletRequest request; - @Resource - private RedisUtil redisUtil; + @Resource + private HttpServletRequest request; + @Resource + private RedisUtil redisUtil; /** * 获取当前登录的user @@ -68,27 +68,27 @@ public class BaseController { * @return tenantId */ public Integer getTenantId() { - // 1 从登录用户拿tenantId - User loginUser = getLoginUser(); - if (loginUser != null) { - return loginUser.getTenantId(); - } - // 2 从域名拿ID - String Domain = request.getHeader("Domain"); - if (StrUtil.isNotBlank(Domain)) { - String key = "Domain:" + Domain; - String tenantId = redisUtil.get(key); - if(tenantId != null){ - System.out.println("从域名拿ID = " + tenantId); - return Integer.valueOf(tenantId); + // 1 从登录用户拿tenantId + User loginUser = getLoginUser(); + if (loginUser != null) { + return loginUser.getTenantId(); } - } - // 3 从请求头拿ID - String tenantId = request.getHeader("tenantId"); - if(StrUtil.isNotBlank(tenantId)){ - return Integer.valueOf(tenantId); - } - return null; + // 2 从域名拿ID + String Domain = request.getHeader("Domain"); + if (StrUtil.isNotBlank(Domain)) { + String key = "Domain:" + Domain; + String tenantId = redisUtil.get(key); + if (tenantId != null) { + System.out.println("从域名拿ID = " + tenantId); + return Integer.valueOf(tenantId); + } + } + // 3 从请求头拿ID + String tenantId = request.getHeader("tenantId"); + if (StrUtil.isNotBlank(tenantId)) { + return Integer.valueOf(tenantId); + } + return null; } /** @@ -130,6 +130,11 @@ public class BaseController { return success(data).setMessage(message); } + + public ApiResult success(String message, T data, T content) { + return success(data).setMessage(message).setContent(content); + } + /** * 返回分页查询数据 * @@ -200,20 +205,20 @@ public class BaseController { } // 自定义函数 - public String getAuthorization(){ - return request.getHeader("Authorization"); + public String getAuthorization() { + return request.getHeader("Authorization"); } public String getAppId() { - // 兼容小写 - if(request.getHeader("appid") != null){ - return request.getHeader("appid"); - } - return request.getHeader("AppId"); + // 兼容小写 + if (request.getHeader("appid") != null) { + return request.getHeader("appid"); + } + return request.getHeader("AppId"); } public String getSign() { - return request.getParameter("sign"); + return request.getParameter("sign"); } /** @@ -221,49 +226,49 @@ public class BaseController { * 存在签名信息则需要验证 */ public void isCheckSign() { - if (StrUtil.isNotBlank(getSign())) { - if(getTenantId() == null){ - throw new BusinessException("签名失败:TenantId不能为空"); + if (StrUtil.isNotBlank(getSign())) { + if (getTenantId() == null) { + throw new BusinessException("签名失败:TenantId不能为空"); + } + + String timestamp1 = request.getParameter("timestamp"); + long timestamp2 = System.currentTimeMillis(); + long time = timestamp2 - Long.parseLong(timestamp1); + if (time > 600000L) { + throw new BusinessException("签名失败:请求超时"); + } + + Enumeration names = request.getParameterNames(); + //2.遍历正文名称的枚举获得请求参数 + Map params = new HashMap<>(); + while (names.hasMoreElements()) { + String name = names.nextElement(); + String value = request.getParameter(name); + params.put(name, value); + } + String signString = SignCheckUtil.getSignString(params, getAppSecret()); + System.out.println("请求的参数 = " + params); + System.out.println("正确的签名 = " + signString); + System.out.println("签名是否正确 = " + SignCheckUtil.signCheck(params, getAppSecret())); + + if (!SignCheckUtil.signCheck(params, getAppSecret())) { + throw new BusinessException("签名失败"); + } } - String timestamp1 = request.getParameter("timestamp"); - long timestamp2 = System.currentTimeMillis(); - long time = timestamp2 - Long.parseLong(timestamp1); - if(time > 600000L){ - throw new BusinessException("签名失败:请求超时"); - } + // 模拟提交参数 + // String key = "FRbMx1FkG4Qz6GZxY"; + // Map param0 = new HashMap<>(); + // param0.put("orderId", "D2018062976332656413"); + // param0.put("MainAccountID", "DC3NHPJ73S"); + // param0.put("MainAccountSN", "320"); + // param0.put("payStatus", "2"); + // param0.put("title","测试"); + // System.out.println("请求的参数 = " + param0); + // String signString0 = SignCheckUtil.getSignString(param0, key); + // System.out.println("signString0 = " + signString0); - Enumeration names = request.getParameterNames(); - //2.遍历正文名称的枚举获得请求参数 - Map params = new HashMap<>(); - while(names.hasMoreElements()){ - String name = names.nextElement(); - String value = request.getParameter(name); - params.put(name,value); - } - String signString = SignCheckUtil.getSignString(params, getAppSecret()); - System.out.println("请求的参数 = " + params); - System.out.println("正确的签名 = " + signString); - System.out.println("签名是否正确 = " + SignCheckUtil.signCheck(params, getAppSecret())); - - if (!SignCheckUtil.signCheck(params, getAppSecret())) { - throw new BusinessException("签名失败"); - } - } - - // 模拟提交参数 - // String key = "FRbMx1FkG4Qz6GZxY"; - // Map param0 = new HashMap<>(); - // param0.put("orderId", "D2018062976332656413"); - // param0.put("MainAccountID", "DC3NHPJ73S"); - // param0.put("MainAccountSN", "320"); - // param0.put("payStatus", "2"); - // param0.put("title","测试"); - // System.out.println("请求的参数 = " + param0); - // String signString0 = SignCheckUtil.getSignString(param0, key); - // System.out.println("signString0 = " + signString0); - - // return SignCheckUtil.signCheck(params, getAppSecret()); + // return SignCheckUtil.signCheck(params, getAppSecret()); } /** @@ -272,9 +277,9 @@ public class BaseController { * @return AppSecret */ public String getAppSecret() { - String key = "cache5:AppSecret:" + Integer.valueOf(getAppId()); - System.out.println("key = " + key); - return redisUtil.get(key); + String key = "cache5:AppSecret:" + Integer.valueOf(getAppId()); + System.out.println("key = " + key); + return redisUtil.get(key); } /** diff --git a/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java b/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java index 115e557..19bf601 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java @@ -66,7 +66,9 @@ public class AreaController extends BaseController { if (level != null) str += "-" + level; List topList; String topListString = redisTemplate.opsForValue().get(str); - if (topListString == null) { + System.out.println("str: " + str); + System.out.println("topListString: " + topListString); +// if (topListString == null || topListString.equals("[]")) { topList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 1)); for (Area top : topList) { List secondList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 2).eq(Area::getFid, top.getId())); @@ -79,7 +81,7 @@ public class AreaController extends BaseController { top.setChildren(secondList); } redisTemplate.opsForValue().set(str, JSON.toJSONString(topList)); - } else topList = JSON.parseArray(topListString, Area.class); +// } else topList = JSON.parseArray(topListString, Area.class); return success(topList); // 使用关联查询 //return success(areaService.listRel(param)); diff --git a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java index 404cfbd..a89ef69 100644 --- a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java +++ b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java @@ -1,5 +1,7 @@ package com.gxwebsoft.think.controller; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -21,8 +23,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -53,91 +54,158 @@ public class SchedulingController extends BaseController { @Scheduled(cron = "* * * * * *") public void task() { - // 15分钟取消订单 - List orderList = thinkOrderService.list( - new LambdaUpdateWrapper() - .eq(ThinkOrder::getPayStatus, 2) - .eq(ThinkOrder::getOrderStatus, 2) - .apply("UNIX_TIMESTAMP() > `create_time` + " + 15 * 60) - ); - if (!orderList.isEmpty()) { - List orderInfoList = new ArrayList<>(); - for (ThinkOrder thinkOrder : orderList) { - thinkOrder.setOrderStatus(3); - List orderInfoListTmp = thinkOrderInfoService.listInOrder(thinkOrder.getId()); - orderInfoList.addAll(orderInfoListTmp); - thinkOrder.setUpdateTime(System.currentTimeMillis() / 1000); - } - for (ThinkOrderInfo thinkOrderInfo : orderInfoList) { - thinkOrderInfo.setPayStatus(0); - } - thinkOrderService.updateBatchById(orderList); - thinkOrderInfoService.updateBatchById(orderInfoList); - } - - //每天0点清空人数 - if (DateUtil.format(LocalDateTime.now(), "HH:mm:ss").equals("00:00:00")) { - thinkSiteService.update( - new LambdaUpdateWrapper() - .set(ThinkSite::getDailyNum, 0) + String newTime = DateUtil.format(LocalDateTime.now(), "HH:mm"); + if ((newTime.equals("21:30") || newTime.equals("21:45")) && redisUtil.get("swimmingCheck") == null) { + redisUtil.set("swimmingCheck", 1, 3L, TimeUnit.HOURS); + // 每天21:30后核销游泳馆订单 + List swimmingOrderList = thinkOrderService.list( + new LambdaQueryWrapper() + .eq(ThinkOrder::getSid, 37) + .eq(ThinkOrder::getPayStatus, 1) + .in(ThinkOrder::getOrderStatus, 2) ); - } - - // 每天21:30后核销游泳馆订单 - if (DateUtil.format(LocalDateTime.now(), "HH:mm:ss").equals("21:30:10")) { - // 今天0点时间戳 - final long dayStart = DateUtil.beginOfDay(DateUtil.date()).getTime() / 1000; - List orderInfoList = thinkOrderInfoService.list( - new LambdaQueryWrapper() - .select(ThinkOrderInfo::getOid) - .eq(ThinkOrderInfo::getSid, 37) - .eq(ThinkOrderInfo::getPayStatus, 1) - .between(ThinkOrderInfo::getStartTime, dayStart, (int) (System.currentTimeMillis() / 1000)) - ); - if (!orderInfoList.isEmpty()) { - List orderIdList = orderInfoList.stream().map(ThinkOrderInfo::getOid).toList(); + if (!swimmingOrderList.isEmpty()) { + List orderIdList = swimmingOrderList.stream().map(ThinkOrder::getId).toList(); thinkOrderService.update( new LambdaUpdateWrapper() .in(ThinkOrder::getId, orderIdList) - .eq(ThinkOrder::getOrderStatus, 2) - .eq(ThinkOrder::getPayStatus, 1) .set(ThinkOrder::getOrderStatus, 1) + .set(ThinkOrder::getUpdateTime, DateUtil.currentSeconds()) ); } - } + } else { + // 2分钟取消订单 + List orderList = thinkOrderService.list( + new LambdaUpdateWrapper() + .eq(ThinkOrder::getPayStatus, 2) + .eq(ThinkOrder::getOrderStatus, 2) + .apply("UNIX_TIMESTAMP() > `create_time` + " + (2 * 60)) + ); + if (!orderList.isEmpty()) { + List orderInfoList = new ArrayList<>(); + for (ThinkOrder thinkOrder : orderList) { + thinkOrder.setOrderStatus(3); + List orderInfoListTmp = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + orderInfoList.addAll(orderInfoListTmp); + thinkOrder.setUpdateTime(System.currentTimeMillis() / 1000); + } + for (ThinkOrderInfo thinkOrderInfo : orderInfoList) { + thinkOrderInfo.setPayStatus(0); + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); + } + thinkOrderService.updateBatchById(orderList); + thinkOrderInfoService.updateBatchById(orderInfoList); + } - // 核销订单 - List otherOrderList = thinkOrderService.list( - new LambdaUpdateWrapper() - .ne(ThinkOrder::getSid, 37) - .eq(ThinkOrder::getPayStatus, 1) - .eq(ThinkOrder::getOrderStatus, 2) - ); - for (ThinkOrder thinkOrder : otherOrderList) { - List orderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); - ThinkOrderInfo lastOne = orderInfoList.get(orderInfoList.size() - 1); - if ((int) (System.currentTimeMillis() / 1000) > (lastOne.getStartTime() + 1800)) { - thinkOrder.setOrderStatus(1); - thinkOrderService.updateById(thinkOrder); + // 清除占场redis + List cancelOrderList = thinkOrderService.list( + new LambdaUpdateWrapper() + .in(ThinkOrder::getOrderStatus, 3, 4, 5, 6) + .between(ThinkOrder::getCreateTime, DateUtil.beginOfDay(DateUtil.date()).getTime() / 1000, (int) (System.currentTimeMillis() / 1000)) + ); + if (!cancelOrderList.isEmpty()) { + List orderIdList = cancelOrderList.stream().map(ThinkOrder::getId).toList(); + List orderInfoListTmp = thinkOrderInfoService.listByOrderIds(orderIdList); + for (ThinkOrderInfo thinkOrderInfo : orderInfoListTmp) { + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); + } + } + + //每天0点清空人数 + if (DateUtil.format(LocalDateTime.now(), "HH:mm:ss").equals("00:00:00")) { + thinkSiteService.update( + new LambdaUpdateWrapper() + .set(ThinkSite::getDailyNum, 0) + ); + } + + // 核销订单 + List otherOrderList = thinkOrderService.list( + new LambdaUpdateWrapper() + .ne(ThinkOrder::getSid, 37) + .eq(ThinkOrder::getPayStatus, 1) + .eq(ThinkOrder::getOrderStatus, 2) + ); + for (ThinkOrder thinkOrder : otherOrderList) { + List orderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + ThinkOrderInfo lastOne = orderInfoList.get(orderInfoList.size() - 1); + if ((int) (System.currentTimeMillis() / 1000) > (lastOne.getStartTime() + 1800)) { + thinkOrder.setOrderStatus(1); + thinkOrder.setCheckBy(1); + thinkOrder.setCheckTime(new Date()); + thinkOrderService.updateById(thinkOrder); + } + } + + // 查询开票 + String invoiceFlag = redisUtil.get("invoiceFlag"); + if (invoiceFlag == null) { + redisUtil.set("invoiceFlag", "1", 3L, TimeUnit.MINUTES); + ThinkInvoice thinkInvoice = thinkInvoiceService.getOne( + new LambdaUpdateWrapper() + .gt(ThinkInvoice::getId, 5481) + .eq(ThinkInvoice::getIsOpen, 2) + .eq(ThinkInvoice::getType, 2) + .eq(ThinkInvoice::getDeleted, 0) + .groupBy(ThinkInvoice::getIncoiveNum) + .last("order by RAND() limit 1") + ); +// for (ThinkInvoice thinkInvoice : invoiceList) { + if (thinkInvoice != null) + thinkInvoiceController.getRes(thinkInvoice.getId()); +// } + } + + // 每2分钟检测撞场 + if (redisUtil.get("sameOrderCheck") == null) { + redisUtil.set("sameOrderCheck", 1, 2L, TimeUnit.MINUTES); + List checkOrderList = thinkOrderService.list( + new LambdaQueryWrapper() + .ne(ThinkOrder::getSid, 37) + .in(ThinkOrder::getOrderStatus, 1, 2) + .eq(ThinkOrder::getPayStatus, 1) + .gt(ThinkOrder::getCreateTime, 1748707200) + .orderByAsc(ThinkOrder::getCreateTime) + ); + Set refundOrderIdList = new HashSet<>(); + if (!checkOrderList.isEmpty()) { + for (ThinkOrder thinkOrder : checkOrderList) { + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + List checkThinkOrderInfoList = thinkOrderInfoService.list( + new LambdaQueryWrapper() + .ne(ThinkOrderInfo::getOid, thinkOrder.getId()) + .eq(ThinkOrderInfo::getFid, thinkOrderInfo.getFid()) + .eq(ThinkOrderInfo::getSid, thinkOrderInfo.getSid()) + .eq(ThinkOrderInfo::getStartTime, thinkOrderInfo.getStartTime()) + ); + if (!checkThinkOrderInfoList.isEmpty()) { + for (ThinkOrderInfo checkThinkOrderInfo : checkThinkOrderInfoList) { + ThinkOrder sameOrder = thinkOrderService.getOne( + new LambdaQueryWrapper() + .eq(ThinkOrder::getId, checkThinkOrderInfo.getOid()) + ); + if (sameOrder.getPayStatus().equals(1) && (sameOrder.getOrderStatus().equals(1) || sameOrder.getOrderStatus().equals(2))) { + refundOrderIdList.add(sameOrder.getId()); + } + } + } + } + } + } + if (!refundOrderIdList.isEmpty()) { + List doCancelOrderList = thinkOrderService.listByIds(refundOrderIdList.stream().toList()); + for (ThinkOrder refundOrder : doCancelOrderList) { + System.out.println("撞场订单: " + refundOrder.getOrderNum()); + thinkOrderService.cancelOrder(refundOrder, true, 2); + refundOrder.setOrderStatus(6); + refundOrder.setRefundTime((int) (System.currentTimeMillis() / 1000)); + thinkOrderService.updateById(refundOrder); + } + } } } - // 查询开票 - String invoiceFlag = redisUtil.get("invoiceFlag"); - if (invoiceFlag == null) { - redisUtil.set("invoiceFlag", "1", 5L, TimeUnit.MINUTES); - ThinkInvoice thinkInvoice = thinkInvoiceService.getOne( - new LambdaUpdateWrapper() - .gt(ThinkInvoice::getId, 5481) - .eq(ThinkInvoice::getIsOpen, 2) - .eq(ThinkInvoice::getType, 2) - .groupBy(ThinkInvoice::getIncoiveNum) - .last("order by id asc limit 1") - ); -// for (ThinkInvoice thinkInvoice : invoiceList) { - thinkInvoiceController.getRes(thinkInvoice.getId()); -// } - } } } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardBalanceController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardBalanceController.java new file mode 100644 index 0000000..f4910ed --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardBalanceController.java @@ -0,0 +1,319 @@ +package com.gxwebsoft.think.controller; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.think.entity.*; +import com.gxwebsoft.think.service.*; +import com.gxwebsoft.think.param.ThinkCardBalanceParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jacoco.agent.rt.RT; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.websocket.server.PathParam; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; + +/** + * 卡余额记录控制器 + * + * @author 科技小王子 + * @since 2025-06-20 20:58:38 + */ +@Api(tags = "卡余额记录管理") +@RestController +@RequestMapping("/api/think/think-card-balance") +public class ThinkCardBalanceController extends BaseController { + @Resource + private ThinkCardBalanceService thinkCardBalanceService; + @Resource + private ThinkCardService thinkCardService; + @Resource + private ThinkUsersVipService thinkUsersVipService; + @Resource + private ThinkVipService thinkVipService; + @Resource + private ThinkOrderService thinkOrderService; + + @GetMapping("/set-data") + public ApiResult setData() { + List thinkCardList = thinkCardService.list( + new LambdaQueryWrapper().gt(ThinkCard::getExpireTime, DateUtil.currentSeconds()) + ); + List thinkUsersVipList = thinkUsersVipService.list( + new LambdaQueryWrapper().gt(ThinkUsersVip::getExpireTime, DateUtil.currentSeconds()) + ); + List thinkVipList = thinkVipService.list(); + for (ThinkCard thinkCard : thinkCardList) { + ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(thinkCard.getVid())).findFirst().orElse(null); + if (thinkVip == null) return fail(thinkCard.getVid() + "NOT FOUND"); + BigDecimal reduceEach = BigDecimal.ZERO; + BigDecimal balance = BigDecimal.ZERO; + if (thinkVip.getMode().equals(0)) { + reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip); + if (thinkVip.getType().equals(1) || thinkVip.getType().equals(3) || thinkVip.getType().equals(4)) { + DateTime dateTime = DateUtil.date(thinkCard.getExpireTime() * 1000); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis(); + double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000)); + balance = reduceEach.multiply(BigDecimal.valueOf(remainDay)); + + } else if (thinkVip.getType().equals(2)) { + balance = reduceEach.multiply(BigDecimal.valueOf(thinkCard.getNum())); + } else if (thinkVip.getType().equals(5)) { + balance = thinkCard.getRemainingMoney(); + } + } else { + long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); + DateTime dateTime = DateUtil.date(time); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - (thinkCard.getCreateTime() * 1000); + double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000)); + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP); + + double remainToNowTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis(); + double remainToNowDay = Math.ceil(remainToNowTimestampD / (24 * 60 * 60 * 1000)); + BigDecimal usedMoney = reduceEach.multiply(BigDecimal.valueOf(remainDay).subtract(BigDecimal.valueOf(remainToNowDay))); + balance = thinkVip.getPrice().subtract(usedMoney); + } + ThinkCardBalance thinkCardBalance = new ThinkCardBalance(); + thinkCardBalance.setCid(thinkCard.getId()); + thinkCardBalance.setUid(thinkCard.getUid()); + thinkCardBalance.setBalance(balance); + thinkCardBalance.setReduceEach(reduceEach); + thinkCardBalance.setType(thinkVip.getType()); + thinkCardBalance.setDiscount(thinkVip.getDiscount()); + thinkCardBalance.setVipId(thinkVip.getId()); + thinkCardBalance.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance.setCreateTime(DateUtil.currentSeconds()); + thinkCardBalanceService.save(thinkCardBalance); + } + for (ThinkUsersVip thinkCard : thinkUsersVipList) { + ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(thinkCard.getVid())).findFirst().orElse(null); + if (thinkVip == null) return fail(thinkCard.getVid() + "NOT FOUND"); + BigDecimal reduceEach = BigDecimal.ZERO; + BigDecimal balance = BigDecimal.ZERO; + if (thinkVip.getMode().equals(0)) { + reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip); + if (thinkVip.getType().equals(1) || thinkVip.getType().equals(3) || thinkVip.getType().equals(4)) { + DateTime dateTime = DateUtil.date(thinkCard.getExpireTime() * 1000); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis(); + double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000)); + balance = reduceEach.multiply(BigDecimal.valueOf(remainDay)); + + } else if (thinkVip.getType().equals(2)) { + balance = reduceEach.multiply(BigDecimal.valueOf(thinkCard.getNum())); + } else if (thinkVip.getType().equals(5)) { + balance = thinkCard.getRemainingMoney(); + } + } else { + long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); + DateTime dateTime = DateUtil.date(time); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - (thinkCard.getCreateTime() * 1000); + double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000)); + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP); + + double remainToNowTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis(); + double remainToNowDay = Math.ceil(remainToNowTimestampD / (24 * 60 * 60 * 1000)); + BigDecimal usedMoney = reduceEach.multiply(BigDecimal.valueOf(remainDay).subtract(BigDecimal.valueOf(remainToNowDay))); + balance = thinkVip.getPrice().subtract(usedMoney); + } + + ThinkCardBalance thinkCardBalance = new ThinkCardBalance(); + thinkCardBalance.setVid(thinkCard.getId()); + thinkCardBalance.setUid(thinkCard.getUid()); + thinkCardBalance.setBalance(balance); + thinkCardBalance.setReduceEach(reduceEach); + thinkCardBalance.setDiscount(thinkVip.getDiscount()); + thinkCardBalance.setVipId(thinkVip.getId()); + thinkCardBalance.setType(thinkVip.getType()); + thinkCardBalance.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance.setCreateTime(DateUtil.currentSeconds()); + thinkCardBalanceService.save(thinkCardBalance); + } + return success(); + } + + @GetMapping("/set-order-data") + public ApiResult setOrderData(@PathParam("page") Integer page) { +// IPage cardBalanceListNot5 = thinkCardBalanceService.page( +// new Page<>(page, 1000), +// new LambdaQueryWrapper() +// .ne(ThinkCardBalance::getType, 5) +// ); +// for (ThinkCardBalance thinkCardBalance : cardBalanceListNot5.getRecords()) { +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper() +// .eq(ThinkOrder::getUid, thinkCardBalance.getUid()) +// .eq(ThinkOrder::getPayStatus, 1); +// if (thinkCardBalance.getCid() != null) wrapper.eq(ThinkOrder::getCid, thinkCardBalance.getCid()); +// else wrapper.eq(ThinkOrder::getVid, thinkCardBalance.getVid()); +// List orderList = thinkOrderService.list(wrapper); +// if (!orderList.isEmpty()) { +// for (ThinkOrder thinkOrder : orderList) { +// thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(thinkCardBalance.getReduceEach())); +// thinkOrder.setPayPrice(thinkCardBalance.getReduceEach()); +// thinkOrderService.updateById(thinkOrder); +// } +// } +// } +// +// List cardBalanceList5 = thinkCardBalanceService.list( +// new LambdaQueryWrapper() +// .eq(ThinkCardBalance::getType, 5) +// ); +// for (ThinkCardBalance thinkCardBalance : cardBalanceList5) { +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper() +// .eq(ThinkOrder::getUid, thinkCardBalance.getUid()) +// .eq(ThinkOrder::getPayStatus, 1); +// if (thinkCardBalance.getCid() != null) wrapper.eq(ThinkOrder::getCid, thinkCardBalance.getCid()); +// else wrapper.eq(ThinkOrder::getVid, thinkCardBalance.getVid()); +// List orderList = thinkOrderService.list(wrapper); +// if (!orderList.isEmpty()) { +// for (ThinkOrder thinkOrder : orderList) { +// BigDecimal discount = thinkCardBalance.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP); +// BigDecimal payPrice = thinkOrder.getTotalPrice().multiply(discount); +// thinkOrder.setPayPrice(payPrice); +// thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(payPrice)); +// thinkOrderService.updateById(thinkOrder); +// } +// } +// +// } + +// List thinkCardBalanceList = thinkCardBalanceService.list( +// new LambdaQueryWrapper() +// .isNotNull(ThinkCardBalance::getVid) +// ); +// for (ThinkCardBalance thinkCardBalance : thinkCardBalanceList) { +// ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkCardBalance.getVid()); +// if (thinkUsersVip != null) { +// thinkCardBalance.setType(thinkUsersVip.getType()); +// thinkCardBalanceService.updateById(thinkCardBalance); +// } +// } + + List orderList = thinkOrderService.list( + new LambdaQueryWrapper() + .eq(ThinkOrder::getPayStatus, 1) + .eq(ThinkOrder::getPayPrice, 0) + .gt(ThinkOrder::getCreateTime, 1742400000) + .in(ThinkOrder::getPayType, 6, 7, 8, 9, 10, 11, 16, 17) + ); + + for (ThinkOrder thinkOrder : orderList) { + ThinkCardBalance thinkCardBalance = null; + if (!thinkOrder.getCid().equals(0)) { + thinkCardBalance = thinkCardBalanceService.getByCid(thinkOrder.getCid()); + } + if (thinkOrder.getVid() != null) { + thinkCardBalance = thinkCardBalanceService.getByVid(thinkOrder.getVid()); + } + if (thinkCardBalance != null) { + if (!thinkCardBalance.getType().equals(5)) { + thinkOrder.setPayPrice(thinkCardBalance.getReduceEach()); + thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(thinkCardBalance.getReduceEach())); + thinkOrderService.updateById(thinkOrder); + } else { + BigDecimal discount = thinkCardBalance.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP); + BigDecimal payPrice = thinkOrder.getTotalPrice().multiply(discount); + thinkOrder.setPayPrice(payPrice); + thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(payPrice)); + thinkOrderService.updateById(thinkOrder); + } + } + } + return success(); + } + + @ApiOperation("分页查询卡余额记录") + @GetMapping("/page") + public ApiResult> page(ThinkCardBalanceParam param) { + // 使用关联查询 + return success(thinkCardBalanceService.pageRel(param)); + } + + @ApiOperation("查询全部卡余额记录") + @GetMapping() + public ApiResult> list(ThinkCardBalanceParam param) { + // 使用关联查询 + return success(thinkCardBalanceService.listRel(param)); + } + + @PreAuthorize("hasAuthority('think:thinkCardBalance:list')") + @ApiOperation("根据id查询卡余额记录") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(thinkCardBalanceService.getByIdRel(id)); + } + + @ApiOperation("添加卡余额记录") + @PostMapping() + public ApiResult save(@RequestBody ThinkCardBalance thinkCardBalance) { + if (thinkCardBalanceService.save(thinkCardBalance)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改卡余额记录") + @PutMapping() + public ApiResult update(@RequestBody ThinkCardBalance thinkCardBalance) { + if (thinkCardBalanceService.updateById(thinkCardBalance)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除卡余额记录") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (thinkCardBalanceService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加卡余额记录") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (thinkCardBalanceService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改卡余额记录") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(thinkCardBalanceService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除卡余额记录") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (thinkCardBalanceService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java index 9d56936..c2b739f 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java @@ -2,9 +2,11 @@ package com.gxwebsoft.think.controller; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; @@ -20,6 +22,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; @@ -47,6 +50,10 @@ public class ThinkCardController extends BaseController { private ThinkVipCardsBillsService thinkVipCardsBillsService; @Resource private ThinkSiteService thinkSiteService; + @Resource + private ThinkLogService thinkLogService; + @Resource + private ThinkCardBalanceService thinkCardBalanceService; @ApiOperation("用户卡") @PostMapping("/user-card") @@ -182,20 +189,41 @@ public class ThinkCardController extends BaseController { return fail("卡号已存在"); } if (thinkCard.getCode() == null) thinkCard.setCode(RandomUtil.randomString(8)); + BigDecimal reduceEach = BigDecimal.ZERO; ThinkVip thinkVip = thinkVipService.getById(thinkCard.getVid()); - if (thinkVip.getMode().equals(0)) - thinkCard.setExpireTime(DateUtil.currentSeconds() + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30)); - else{ - long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); - thinkCard.setExpireTime(time / 1000); + if (thinkCard.getIsChange() == null) { + if (thinkVip.getMode().equals(0)) { + reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip); + thinkCard.setExpireTime(DateUtil.currentSeconds() + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30) + (thinkVip.getDay() * 86400)); + } else { + long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); + DateTime dateTime = DateUtil.date(time); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + thinkCard.setExpireTime(DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() / 1000L); + double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis(); + double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000)); + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP); + } + thinkCard.setCreateTime(DateUtil.currentSeconds()); + thinkCard.setUpdateTime(DateUtil.currentSeconds()); + thinkCard.setRemainingMoney(thinkVip.getPrice()); + thinkCard.setNum(thinkVip.getCount()); + thinkCard.setCount(thinkVip.getCount()); + thinkCard.setDiscount(thinkVip.getDiscount()); + thinkCard.setAid(getLoginUserId()); } - thinkCard.setCreateTime(DateUtil.currentSeconds()); - thinkCard.setUpdateTime(DateUtil.currentSeconds()); - thinkCard.setRemainingMoney(thinkVip.getPrice()); - thinkCard.setNum(thinkVip.getCount()); - thinkCard.setCount(thinkVip.getCount()); - thinkCard.setDiscount(thinkVip.getDiscount()); if (thinkCardService.save(thinkCard)) { + ThinkCardBalance thinkCardBalance = new ThinkCardBalance(); + thinkCardBalance.setCid(thinkCard.getId()); + thinkCardBalance.setUid(thinkCard.getUid()); + thinkCardBalance.setBalance(thinkVip.getPrice()); + thinkCardBalance.setReduceEach(reduceEach); + thinkCardBalance.setType(thinkVip.getType()); + thinkCardBalance.setDiscount(thinkVip.getDiscount()); + thinkCardBalance.setVipId(thinkVip.getId()); + thinkCardBalance.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance.setCreateTime(DateUtil.currentSeconds()); + thinkCardBalanceService.save(thinkCardBalance); return success("添加成功", thinkCard.getId()); } return fail("添加失败"); @@ -221,11 +249,35 @@ public class ThinkCardController extends BaseController { @ApiOperation("修改") @PutMapping() - public ApiResult update(@RequestBody ThinkCard thinkCard) { + public ApiResult update(@RequestBody ThinkCard thinkCard, HttpServletRequest request) { + ThinkLog thinkLog = null; + if (thinkCard.getSaveLog() != null && thinkCard.getSaveLog()) { + ThinkCard thinkCard1 = thinkCardService.getById(thinkCard.getId()); + thinkLog = new ThinkLog(); + // 实体类转json + String json = JSON.toJSONString(thinkCard1); + String desc = "修改IC卡:".concat(thinkCard1.getCode()).concat(".修改后数据:").concat(json); + thinkLog.setAdminId(getLoginUserId()); + thinkLog.setAdminName(getLoginUser().getRealName()); + thinkLog.setDescription(desc); + thinkLog.setIp(request.getRemoteAddr()); + thinkLog.setStatus(1); + thinkLog.setAddTime(System.currentTimeMillis() / 1000); + thinkLog.setLogType(0); + thinkLog.setOperateType(4); + } if (thinkCardService.updateById(thinkCard)) { thinkVipCardsBillsService.setCardUid(thinkCard.getId(), thinkCard.getUid()); + if (thinkLog != null) { + thinkLog.setDescription(thinkLog.getDescription() + ".成功"); + thinkLogService.save(thinkLog); + } return success("修改成功"); } + if (thinkLog != null) { + thinkLog.setDescription(thinkLog.getDescription() + ".失败"); + thinkLogService.save(thinkLog); + } return fail("修改失败"); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java index d1609d5..1dc44bf 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java @@ -2,7 +2,11 @@ package com.gxwebsoft.think.controller; import cn.hutool.core.date.DateUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.FileRecord; import com.gxwebsoft.think.entity.ThinkCard; +import com.gxwebsoft.think.entity.ThinkCardBalance; +import com.gxwebsoft.think.entity.ThinkVip; +import com.gxwebsoft.think.service.ThinkCardBalanceService; import com.gxwebsoft.think.service.ThinkCardLogService; import com.gxwebsoft.think.entity.ThinkCardLog; import com.gxwebsoft.think.param.ThinkCardLogParam; @@ -13,14 +17,23 @@ import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.think.service.ThinkCardService; +import com.gxwebsoft.think.service.ThinkVipService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; +import com.gxwebsoft.common.core.config.ConfigProperties; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFRow; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Date; /** * 控制器 @@ -36,6 +49,12 @@ public class ThinkCardLogController extends BaseController { private ThinkCardLogService thinkCardLogService; @Resource private ThinkCardService thinkCardService; + @Resource + private ThinkVipService thinkVipService; + @Resource + private ThinkCardBalanceService thinkCardBalanceService; + @Resource + private ConfigProperties config; @ApiOperation("分页查询") @GetMapping("/page") @@ -65,24 +84,41 @@ public class ThinkCardLogController extends BaseController { thinkCardLog.setAid(getLoginUserId()); if (thinkCardLogService.save(thinkCardLog)) { ThinkCard thinkCard = thinkCardService.getByCode(thinkCardLog.getCode()); - if (thinkCard.getExpireTime() > (DateUtil.currentSeconds() / 1000)) { - thinkCard.setExpireTime((DateUtil.currentSeconds() / 1000) + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30)); + ThinkVip thinkVip = thinkVipService.getById(thinkCard.getVid()); + + if (thinkCard.getExpireTime() < DateUtil.currentSeconds()) { + thinkCard.setExpireTime((DateUtil.currentSeconds()) + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30) + (thinkVip.getDay() * 86400)); } else { - thinkCard.setExpireTime(thinkCard.getExpireTime() + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30)); + thinkCard.setExpireTime(thinkCard.getExpireTime() + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30) + (thinkVip.getDay() * 86400)); } + + ThinkCardBalance thinkCardBalance = new ThinkCardBalance(); + thinkCardBalance.setCid(thinkCard.getId()); + thinkCardBalance.setUid(thinkCard.getUid()); + thinkCardBalance.setBalance(thinkVip.getPrice()); + thinkCardBalance.setReduceEach(thinkCardBalanceService.getThinkCardBalance(thinkVip)); + thinkCardBalance.setType(thinkVip.getType()); + thinkCardBalance.setDiscount(thinkVip.getDiscount()); + thinkCardBalance.setVipId(thinkVip.getId()); + thinkCardBalance.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance.setCreateTime(DateUtil.currentSeconds()); + thinkCardBalanceService.save(thinkCardBalance); + + if (thinkCard.getExpireTime() < (DateUtil.currentSeconds())) { + thinkCard.setRemainingMoney(thinkCardLog.getMoney()); + } else { + thinkCard.setRemainingMoney(thinkCardLog.getMoney().add(thinkCard.getRemainingMoney())); + } + // 充值卡 if (thinkCard.getType().equals(4) || thinkCard.getType().equals(5)) { // 是否已过期,过期的清空,未过期的在旧卡基础上叠加 - if (thinkCard.getExpireTime() < (DateUtil.currentSeconds() / 1000)) { - thinkCard.setRemainingMoney(thinkCardLog.getMoney()); - } else { - thinkCard.setRemainingMoney(thinkCardLog.getMoney().add(thinkCard.getRemainingMoney())); - } + } else { - if (thinkCard.getExpireTime() < (DateUtil.currentSeconds() / 1000)) { + if (thinkCard.getExpireTime() < (DateUtil.currentSeconds())) { thinkCard.setNum(thinkCardLog.getCount()); } else { - thinkCard.setNum(thinkCardLog.getCount() + thinkCard.getCount()); + thinkCard.setNum(thinkCardLog.getCount() + thinkCard.getNum()); } // thinkCard.setNum(thinkCard.getCount() + thinkCard.getCount()); } @@ -139,4 +175,49 @@ public class ThinkCardLogController extends BaseController { return fail("删除失败"); } + @ApiOperation("导出") + @PostMapping("/export") + public ApiResult export(@RequestBody ThinkCardLogParam param) throws IOException { + List logList = thinkCardLogService.listRel(param); + String filename = "excel/卡充值记录-" + new Date().getTime() + ".xlsx"; + String path = config.getUploadPath() + filename; + SXSSFWorkbook workbook = new SXSSFWorkbook(); + SXSSFSheet sheet = workbook.createSheet(); + String[] headers = {"卡号", "姓名", "手机号", "会员卡名称", "支付方式", "充值金额", "充值次数", "操作员", "第三方订单号", "充值时间"}; + for (int i = 0; i < headers.length; i++) { + sheet.setColumnWidth(i, 20 * 256); + } + SXSSFRow row = sheet.createRow(0); + for (int i = 0; i < headers.length; i++) { + row.createCell(i).setCellValue(headers[i]); + } + String[] payTypeArr = {"", "微信支付", "支付宝支付", "现金支付", "POS机支付"}; + int rowNum = 1; + for (ThinkCardLog log : logList) { + SXSSFRow dataRow = sheet.createRow(rowNum); + dataRow.createCell(0).setCellValue(log.getCode() != null ? log.getCode() : ""); + dataRow.createCell(1).setCellValue(log.getUsername() != null ? log.getUsername() : ""); + dataRow.createCell(2).setCellValue(log.getPhone() != null ? log.getPhone() : ""); + dataRow.createCell(3).setCellValue(log.getCardName() != null ? log.getCardName() : ""); + String payTypeStr = (log.getPayType() != null && log.getPayType() > 0 && log.getPayType() < payTypeArr.length) ? payTypeArr[log.getPayType()] : ""; + dataRow.createCell(4).setCellValue(payTypeStr); + dataRow.createCell(5).setCellValue(log.getMoney() != null ? log.getMoney().toString() : ""); + dataRow.createCell(6).setCellValue(log.getCount() != null ? log.getCount() : 0); + dataRow.createCell(7).setCellValue(log.getAdminName() != null ? log.getAdminName() : ""); + dataRow.createCell(8).setCellValue(log.getWechatOrder() != null ? log.getWechatOrder() : ""); + dataRow.createCell(9).setCellValue(log.getCreateTime() != null ? DateUtil.format(DateUtil.date(log.getCreateTime() * 1000), "yyyy-MM-dd HH:mm:ss") : ""); + rowNum++; + } + FileOutputStream output = new FileOutputStream(path); + workbook.write(output); + output.flush(); + + FileRecord result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName(filename); + result.setPath(path); + result.setUrl(config.getServerUrl() + "/file/" + filename); + return success(result); + } + } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java index 07e6e23..cb30d1b 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java @@ -1,5 +1,6 @@ package com.gxwebsoft.think.controller; +import cn.hutool.core.date.DateUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.think.service.ThinkFieldService; import com.gxwebsoft.think.entity.ThinkField; @@ -63,6 +64,8 @@ public class ThinkFieldController extends BaseController { @ApiOperation("添加") @PostMapping() public ApiResult save(@RequestBody ThinkField thinkField) { + thinkField.setCreateTime((int) DateUtil.currentSeconds()); + thinkField.setUpdateTime((int) DateUtil.currentSeconds()); if (thinkFieldService.save(thinkField)) { return success("添加成功"); } @@ -72,6 +75,7 @@ public class ThinkFieldController extends BaseController { @ApiOperation("修改") @PutMapping() public ApiResult update(@RequestBody ThinkField thinkField) { + thinkField.setUpdateTime((int) DateUtil.currentSeconds()); if (thinkFieldService.updateById(thinkField)) { return success("修改成功"); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkFtpCheckBillController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkFtpCheckBillController.java new file mode 100644 index 0000000..0e2af39 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkFtpCheckBillController.java @@ -0,0 +1,401 @@ +package com.gxwebsoft.think.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.io.FileUtil; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.think.entity.ThinkOrder; +import com.gxwebsoft.think.service.ThinkFtpCheckBillService; +import com.gxwebsoft.think.entity.ThinkFtpCheckBill; +import com.gxwebsoft.think.param.ThinkFtpCheckBillParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.think.service.ThinkOrderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPFile; +import org.apache.commons.net.ftp.FTPReply; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 控制器 + * + * @author 科技小王子 + * @since 2025-05-21 11:58:28 + */ +@Api(tags = "管理") +@RestController +@RequestMapping("/api/think/think-ftp-check-bill") +public class ThinkFtpCheckBillController extends BaseController { + @Resource + private ThinkFtpCheckBillService thinkFtpCheckBillService; + @Resource + private ThinkOrderService thinkOrderService; + + @Value("${config.upload-path}") + private String uploadPath; + + @ApiOperation("分页查询") + @GetMapping("/page") + public ApiResult> page(ThinkFtpCheckBillParam param) { + // 使用关联查询 + return success(thinkFtpCheckBillService.pageRel(param)); + } + + @ApiOperation("查询全部") + @GetMapping() + public ApiResult> list(ThinkFtpCheckBillParam param) { + // 使用关联查询 + return success(thinkFtpCheckBillService.listRel(param)); + } + + @PreAuthorize("hasAuthority('think:thinkFtpCheckBill:list')") + @ApiOperation("根据id查询") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(thinkFtpCheckBillService.getByIdRel(id)); + } + + @ApiOperation("添加") + @PostMapping() + public ApiResult save(@RequestBody ThinkFtpCheckBill thinkFtpCheckBill) { + if (thinkFtpCheckBillService.save(thinkFtpCheckBill)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改") + @PutMapping() + public ApiResult update(@RequestBody ThinkFtpCheckBill thinkFtpCheckBill) { + if (thinkFtpCheckBillService.updateById(thinkFtpCheckBill)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (thinkFtpCheckBillService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (thinkFtpCheckBillService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(thinkFtpCheckBillService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (thinkFtpCheckBillService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("FTP同步") + @GetMapping("/async") + public ApiResult async() { + FTPClient ftpClient = new FTPClient(); + try { + // 配置FTP连接参数 + ftpClient.connect("uisftp.chinaums.com", 21); + ftpClient.login("103000-8984501651390AT", "651390At!"); + ftpClient.enterLocalPassiveMode(); + ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + ftpClient.setControlEncoding("UTF-8"); + + // 连接到FTP服务器 + int replyCode = ftpClient.getReplyCode(); + if (!FTPReply.isPositiveCompletion(replyCode)) { + throw new RuntimeException("FTP服务器连接失败"); + } + ftpClient.changeWorkingDirectory("/build"); + // 文件列表 + for (FTPFile file : ftpClient.listFiles()) { + if (file.isFile()) { + // 获取文件名 + String fileName = file.getName(); + // 下载文件 + String remoteFilePath = "/build/" + fileName; + String localFilePath = uploadPath + "excel/" + fileName; + if (!FileUtil.exist(localFilePath)) { + FileOutputStream outputStream = new FileOutputStream(localFilePath); + ftpClient.retrieveFile(remoteFilePath, outputStream); + outputStream.flush(); + outputStream.close(); + System.out.println("对账文件: " + fileName); + FileInputStream fileInputStream = new FileInputStream(localFilePath); + HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); + Sheet sheet = workbook.getSheetAt(0); + List thinkFtpCheckBillList = new ArrayList<>(); + for (Row row : sheet) { + if (row.getRowNum() > 3 && + (row.getCell(4).toString().equals("消费") || row.getCell(5).toString().equals("消费"))) { + String deviceNo = ""; + String cardNo = ""; + double amount = 0; + double settleAmount = 0; + double feeAmount = 0; + double paidAmount = 0; + String refNo = ""; + String flowNo = ""; + String cardType = ""; + String postCardType = ""; + String payType = ""; + String orderNo = ""; + LocalDateTime payTime = null; + if (row.getCell(4).toString().equals("消费")) { + cardNo = row.getCell(3).toString(); + amount = row.getCell(5).getNumericCellValue(); + deviceNo = row.getCell(6).toString(); + settleAmount = Double.parseDouble(row.getCell(7).toString()); + feeAmount = Double.parseDouble(row.getCell(8).toString()); + refNo = row.getCell(9).toString(); + flowNo = row.getCell(10).toString(); + paidAmount = Double.parseDouble(row.getCell(16).toString()); + cardType = row.getCell(11).toString(); + orderNo = row.getCell(12).toString(); + postCardType = row.getCell(21).toString(); + payType = row.getCell(13).toString(); + } else { + deviceNo = row.getCell(3).toString(); + cardNo = row.getCell(4).toString(); + amount = row.getCell(6).getNumericCellValue(); + settleAmount = Double.parseDouble(row.getCell(7).toString()); + feeAmount = Double.parseDouble(row.getCell(8).toString()); + paidAmount = Double.parseDouble(row.getCell(9).toString()); + refNo = row.getCell(10).toString(); + flowNo = row.getCell(11).toString(); + cardType = row.getCell(12).toString(); + postCardType = row.getCell(13).toString(); + payType = row.getCell(14).toString(); + orderNo = row.getCell(15).toString(); + } + Date dateItem = row.getCell(1).getDateCellValue(); + String date = DateUtil.format(dateItem, "yyyy-MM-dd"); + long startTime = dateItem.getTime() / 1000; + long endTime = DateUtil.parse(date + " 23:59:59", "yyyy-MM-dd HH:mm:ss").getTime() / 1000; + payTime = LocalDateTimeUtil.parse(date + " " + row.getCell(2).toString(), "yyyy-MM-dd HH:mm:ss"); + if (!flowNo.isEmpty() && !orderNo.isEmpty()) { + ThinkFtpCheckBill check = thinkFtpCheckBillService.getByOrderNo(orderNo); + if (check == null) { + ThinkFtpCheckBill thinkFtpCheckBill = new ThinkFtpCheckBill(); + thinkFtpCheckBill.setDeviceNo(deviceNo); + thinkFtpCheckBill.setCardNo(cardNo); + thinkFtpCheckBill.setOrderNo(orderNo); + thinkFtpCheckBill.setAmount(BigDecimal.valueOf(amount)); + thinkFtpCheckBill.setSettleAmount(BigDecimal.valueOf(settleAmount)); + thinkFtpCheckBill.setFeeAmount(BigDecimal.valueOf(feeAmount)); + thinkFtpCheckBill.setPaidAmount(BigDecimal.valueOf(paidAmount)); + thinkFtpCheckBill.setRefNo(refNo); + thinkFtpCheckBill.setFlowNo(flowNo); + thinkFtpCheckBill.setCardType(cardType); + thinkFtpCheckBill.setPostCardType(postCardType); + thinkFtpCheckBill.setPayType(payType); + thinkFtpCheckBill.setPayTime(payTime); + if (payTime != null) { + thinkFtpCheckBill.setPayTime(payTime); + } + thinkFtpCheckBillList.add(thinkFtpCheckBill); + } + ThinkOrder thinkOrder = thinkOrderService.getUnCheckBillByWechatCode(flowNo, startTime, endTime); + if (thinkOrder != null) { + BigDecimal price = BigDecimal.valueOf(amount); + if (thinkOrder.getPayPrice().compareTo(price) == 0) { + System.out.println("check bill: " + thinkOrder.getOrderNum()); + thinkOrder.setCheckBill(1); + thinkOrderService.updateById(thinkOrder); + } + } + } + } + } + if (!thinkFtpCheckBillList.isEmpty()) { + thinkFtpCheckBillService.saveBatch(thinkFtpCheckBillList); + } + } + } + } + // 断开与FTP服务器的连接 + ftpClient.logout(); + ftpClient.disconnect(); + return success(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("PDF文件下载失败"); + return fail(e.getMessage()); + } + } + + + @ApiOperation("FTP同步") + public void ftpAsync() { + FTPClient ftpClient = new FTPClient(); + try { + // 配置FTP连接参数 + ftpClient.connect("uisftp.chinaums.com", 21); + ftpClient.login("103000-8984501651390AT", "651390At!"); + ftpClient.enterLocalPassiveMode(); + ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + ftpClient.setControlEncoding("UTF-8"); + + // 连接到FTP服务器 + int replyCode = ftpClient.getReplyCode(); + if (!FTPReply.isPositiveCompletion(replyCode)) { + throw new RuntimeException("FTP服务器连接失败"); + } + ftpClient.changeWorkingDirectory("/build"); + // 文件列表 + for (FTPFile file : ftpClient.listFiles()) { + if (file.isFile()) { + // 获取文件名 + String fileName = file.getName(); + // 下载文件 + String remoteFilePath = "/build/" + fileName; + String localFilePath = uploadPath + "excel/" + fileName; + if (!FileUtil.exist(localFilePath)) { + FileOutputStream outputStream = new FileOutputStream(localFilePath); + ftpClient.retrieveFile(remoteFilePath, outputStream); + outputStream.flush(); + outputStream.close(); + System.out.println("对账文件: " + fileName); + FileInputStream fileInputStream = new FileInputStream(localFilePath); + HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); + Sheet sheet = workbook.getSheetAt(0); + List thinkFtpCheckBillList = new ArrayList<>(); + for (Row row : sheet) { + if (row.getRowNum() > 3 && + (row.getCell(4).toString().equals("消费") || row.getCell(5).toString().equals("消费"))) { + String deviceNo = ""; + String cardNo = ""; + double amount = 0; + double settleAmount = 0; + double feeAmount = 0; + double paidAmount = 0; + String refNo = ""; + String flowNo = ""; + String cardType = ""; + String postCardType = ""; + String payType = ""; + String orderNo = ""; + LocalDateTime payTime = null; + if (row.getCell(4).toString().equals("消费")) { + cardNo = row.getCell(3).toString(); + amount = row.getCell(5).getNumericCellValue(); + deviceNo = row.getCell(6).toString(); + settleAmount = Double.parseDouble(row.getCell(7).toString()); + feeAmount = Double.parseDouble(row.getCell(8).toString()); + refNo = row.getCell(9).toString(); + flowNo = row.getCell(10).toString(); + paidAmount = Double.parseDouble(row.getCell(16).toString()); + cardType = row.getCell(11).toString(); + orderNo = row.getCell(12).toString(); + postCardType = row.getCell(21).toString(); + payType = row.getCell(13).toString(); + } else { + deviceNo = row.getCell(3).toString(); + cardNo = row.getCell(4).toString(); + amount = row.getCell(6).getNumericCellValue(); + settleAmount = Double.parseDouble(row.getCell(7).toString()); + feeAmount = Double.parseDouble(row.getCell(8).toString()); + paidAmount = Double.parseDouble(row.getCell(9).toString()); + refNo = row.getCell(10).toString(); + flowNo = row.getCell(11).toString(); + cardType = row.getCell(12).toString(); + postCardType = row.getCell(13).toString(); + payType = row.getCell(14).toString(); + orderNo = row.getCell(15).toString(); + } + Date dateItem = row.getCell(1).getDateCellValue(); + String date = DateUtil.format(dateItem, "yyyy-MM-dd"); + long startTime = dateItem.getTime() / 1000; + long endTime = DateUtil.parse(date + " 23:59:59", "yyyy-MM-dd HH:mm:ss").getTime() / 1000; + payTime = LocalDateTimeUtil.parse(date + " " + row.getCell(2).toString(), "yyyy-MM-dd HH:mm:ss"); + if (!flowNo.isEmpty() && !orderNo.isEmpty()) { + ThinkFtpCheckBill check = thinkFtpCheckBillService.getByOrderNo(orderNo); + if (check == null) { + ThinkFtpCheckBill thinkFtpCheckBill = new ThinkFtpCheckBill(); + thinkFtpCheckBill.setDeviceNo(deviceNo); + thinkFtpCheckBill.setCardNo(cardNo); + thinkFtpCheckBill.setOrderNo(orderNo); + thinkFtpCheckBill.setAmount(BigDecimal.valueOf(amount)); + thinkFtpCheckBill.setSettleAmount(BigDecimal.valueOf(settleAmount)); + thinkFtpCheckBill.setFeeAmount(BigDecimal.valueOf(feeAmount)); + thinkFtpCheckBill.setPaidAmount(BigDecimal.valueOf(paidAmount)); + thinkFtpCheckBill.setRefNo(refNo); + thinkFtpCheckBill.setFlowNo(flowNo); + thinkFtpCheckBill.setCardType(cardType); + thinkFtpCheckBill.setPostCardType(postCardType); + thinkFtpCheckBill.setPayType(payType); + thinkFtpCheckBill.setPayTime(payTime); + if (payTime != null) { + thinkFtpCheckBill.setPayTime(payTime); + } + thinkFtpCheckBillList.add(thinkFtpCheckBill); + } + ThinkOrder thinkOrder = thinkOrderService.getUnCheckBillByWechatCode(flowNo, startTime, endTime); + if (thinkOrder != null) { + BigDecimal price = BigDecimal.valueOf(amount); + if (thinkOrder.getPayPrice().compareTo(price) == 0) { + System.out.println("check bill: " + thinkOrder.getOrderNum()); + thinkOrder.setCheckBill(1); + thinkOrderService.updateById(thinkOrder); + } + } + } + } + } + if (!thinkFtpCheckBillList.isEmpty()) { + thinkFtpCheckBillService.saveBatch(thinkFtpCheckBillList); + } + } + } + } + // 断开与FTP服务器的连接 + ftpClient.logout(); + ftpClient.disconnect(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("PDF文件下载失败"); + } + } +} diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java index 44804fd..ca1849c 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java @@ -172,7 +172,8 @@ public class ThinkGoodsOrderController extends BaseController { // 微信统一下单接口 if (order.getPayType().equals(PAY_TYPE_WECHAT)) { String desc = order.getInfoList().get(0).getTitle(); - return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), desc, getLoginUser().getOpenid())); + return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), + desc, getLoginUser().getOpenid(), "https://gxtyzx-api2.websoft.top/api/think/think-order/notify")); } if (order.getPayType().equals(2)) { updatePay(order, null, order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue()); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java index 83a3951..dd2e51e 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java @@ -55,7 +55,11 @@ public class ThinkInvoiceController extends BaseController { @Resource private ThinkSiteService thinkSiteService; @Resource + private ThinkCardService thinkCardService; + @Resource private RedisUtil redisUtil; + @Resource + private ThinkRechargeLogService thinkRechargeLogService; // private final String taxnum = "339901999999142"; // private final String appKey = "SD56531018"; @@ -68,12 +72,17 @@ public class ThinkInvoiceController extends BaseController { private final String appSecret = "D51901886E454FEF"; private final String sellerTel = "18907712789"; private final String url = "https://sdk.nuonuo.com/open/v1/services"; + private final String clerk = "刘绍仪"; + private final String extensionNumber = "6192"; +// private final String clerk = "赵裕璐"; +// private final String extensionNumber = "7426"; @ApiOperation("分页查询") @GetMapping("/page") public ApiResult> page(ThinkInvoiceParam param) { if (param.getForAdmin() == null) param.setUid(getLoginUser().getUid()); // 使用关联查询 + param.setDeleted(0); return success(thinkInvoiceService.pageRel(param)); } @@ -85,7 +94,9 @@ public class ThinkInvoiceController extends BaseController { @ApiOperation("查询全部") @GetMapping() public ApiResult> list(ThinkInvoiceParam param) { + if (param.getForAdmin() == null) param.setUid(getLoginUser().getUid()); // 使用关联查询 + param.setDeleted(0); return success(thinkInvoiceService.listRel(param)); } @@ -100,9 +111,11 @@ public class ThinkInvoiceController extends BaseController { @ApiOperation("添加") @PostMapping() public ApiResult save(@RequestBody ThinkInvoice thinkInvoice) { + if (thinkInvoice.getCode() == null || thinkInvoice.getCode().isEmpty()) + return fail("请输入税号"); thinkInvoice.setIncoiveNum(""); thinkInvoice.setUid(getLoginUser().getUid()); - thinkInvoice.setCode(thinkInvoice.getIncoiveCode()); +// thinkInvoice.setCode(thinkInvoice.getIncoiveCode()); thinkInvoice.setIncoiveNum(RandomUtil.randomString(20)); if (!thinkInvoice.getIsOpen().equals(1)) thinkInvoice.setIsOpen(2); thinkInvoice.setCreateTime(DateUtil.currentSeconds()); @@ -115,8 +128,10 @@ public class ThinkInvoiceController extends BaseController { } } else if (thinkInvoice.getItype().equals(2)) { if (thinkInvoice.getOid() != null) { - ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid()); - thinkInvoice.setInfo(thinkUsersVip.getName() + " 微信订单号: " + thinkUsersVip.getWechatOrder()); +// ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid()); +// thinkInvoice.setInfo(thinkUsersVip.getName() + " 微信订单号: " + thinkUsersVip.getWechatOrder()); + ThinkRechargeLog thinkRechargeLog = thinkRechargeLogService.getById(thinkInvoice.getOid()); + thinkInvoice.setInfo("订单号: " + thinkRechargeLog.getOrderNum()); } } else if (thinkInvoice.getItype().equals(4)) { thinkInvoice.setInfo("租赁发票"); @@ -175,6 +190,9 @@ public class ThinkInvoiceController extends BaseController { @ApiOperation("发票合开") @PostMapping("/doInvoiceByList") public ApiResult doInvoiceByList(@RequestBody ThinkInvoice thinkInvoice) { + if (thinkInvoice.getCode() == null) return fail("请输入税号"); + String taxCode = thinkInvoice.getCode().replaceAll(" ", ""); + thinkInvoice.setCode(taxCode); List thinkInvoiceList = new ArrayList<>(); List thinkOrderList = thinkOrderService.listByIds(thinkInvoice.getOrderIdList()); List thinkOrderInfoList = thinkOrderInfoService.listByOrderIds(thinkInvoice.getOrderIdList()); @@ -182,13 +200,9 @@ public class ThinkInvoiceController extends BaseController { // startTimeList排序 ThinkOrder firstOrder = thinkOrderList.get(0); ThinkSite thinkSite = thinkSiteService.getById(firstOrder.getSid()); - String rentStartTime = thinkSite.getRentStartDate(); - String rentEndTime = thinkSite.getRentEndDate(); - if (!startTimeList.isEmpty()) { - startTimeList.sort(Integer::compareTo); - rentStartTime = DateUtil.format(DateUtil.date((startTimeList.get(0) * 1000L)), "yyyy-MM-dd"); - rentEndTime = DateUtil.format(DateUtil.date((startTimeList.get(startTimeList.size() - 1) * 1000L)), "yyyy-MM-dd"); - } + startTimeList = startTimeList.stream().sorted().toList(); + String rentStartTime = DateUtil.format(DateUtil.date((startTimeList.get(0) * 1000L)), "yyyy-MM-dd"); + String rentEndTime = DateUtil.format(DateUtil.date((startTimeList.get(startTimeList.size() - 1) * 1000L)), "yyyy-MM-dd"); String invoiceNum = RandomUtil.randomString(20); for (Integer orderId : thinkInvoice.getOrderIdList()) { ThinkOrder thinkOrder = thinkOrderList.stream().filter(o -> o.getId().equals(orderId)).findFirst().orElse(null); @@ -220,6 +234,10 @@ public class ThinkInvoiceController extends BaseController { thinkInvoiceList.add(thinkInvoice1); } } + for (ThinkOrder thinkOrder : thinkOrderList) { + thinkOrder.setIsInvoice(1); + } + thinkOrderService.updateBatchById(thinkOrderList); thinkInvoiceService.saveBatch(thinkInvoiceList); NNOpenSDK sdk = NNOpenSDK.getIntance(); String method = "nuonuo.OpeMplatform.requestBillingNew";//API方法名 @@ -234,7 +252,7 @@ public class ThinkInvoiceController extends BaseController { order.setSalerTel(sellerTel); order.setOrderNo(invoiceNum); order.setInvoiceDate(DateUtil.now()); - order.setClerk("赵裕璐"); + order.setClerk(clerk); order.setPayee("班嘉良"); order.setChecker("蓝蕙孚"); order.setShowCheckerType("1"); @@ -244,10 +262,8 @@ public class ThinkInvoiceController extends BaseController { goods.setGoodsName("*经营租赁*场地费"); goods.setGoodsCode("3040502029902"); - // 不含税单价 - final BigDecimal taxExcludedAmount = thinkInvoice.getPrice().multiply(new BigDecimal("0.95")).setScale(2, RoundingMode.HALF_UP); - goods.setPrice(taxExcludedAmount.toString()); - goods.setNum("1"); +// goods.setPrice(thinkInvoice.getPrice().toString()); + goods.setNum(thinkSite.getSize().toString()); goods.setWithTaxFlag("0"); goods.setDField1("无"); goods.setDField2("无"); @@ -256,21 +272,29 @@ public class ThinkInvoiceController extends BaseController { goods.setDField5("无"); goods.setTaxRate("0.05"); goods.setFavouredPolicyFlag("09"); - final BigDecimal tax = thinkInvoice.getPrice().multiply(new BigDecimal("0.05")).setScale(2, RoundingMode.HALF_UP); + + BigDecimal taxRate = BigDecimal.valueOf(0.05); + goods.setPrice(thinkInvoice.getPrice() + .divide(BigDecimal.valueOf(1.05), 8, RoundingMode.HALF_UP) + .divide(thinkSite.getSize(), 8, RoundingMode.HALF_UP).toString()); + final BigDecimal tax = thinkInvoice.getPrice().divide(BigDecimal.valueOf(1.05), 2, RoundingMode.HALF_UP) + .multiply(taxRate).setScale(2, RoundingMode.DOWN); goods.setTax(tax.toString()); + goods.setTaxIncludedAmount(thinkInvoice.getPrice().toString()); + goods.setTaxExcludedAmount(thinkInvoice.getPrice().subtract(tax).toString()); order.setInvoiceDetail(goods); NuoNuoRealPropertyRentInfo nuoNuoRealPropertyRentInfo = new NuoNuoRealPropertyRentInfo(); nuoNuoRealPropertyRentInfo.setRealPropertyAddress(thinkSite.getProvince() + thinkSite.getCity() + thinkSite.getRegion()); nuoNuoRealPropertyRentInfo.setDetailAddress(thinkSite.getAddress()); - nuoNuoRealPropertyRentInfo.setRealPropertyCertificate(thinkSite.getRealPropertyCertificate()); + nuoNuoRealPropertyRentInfo.setRealPropertyCertificate("无"); nuoNuoRealPropertyRentInfo.setRentStartDate(rentStartTime); nuoNuoRealPropertyRentInfo.setRentEndDate(rentEndTime); nuoNuoRealPropertyRentInfo.setCrossCityFlag("0"); nuoNuoRealPropertyRentInfo.setUnit("2"); order.setRealPropertyRentInfo(nuoNuoRealPropertyRentInfo); order.setSpecificFactor("6"); - order.setExtensionNumber("7426"); + order.setExtensionNumber(extensionNumber); nuoNuo.setOrder(order); @@ -278,12 +302,12 @@ public class ThinkInvoiceController extends BaseController { String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码 String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API - System.out.println("json = " + json); +// System.out.println("json = " + json); if (StrUtil.isNotBlank(json)) { final JSONObject jsonObject = JSONObject.parseObject(json); final String code = jsonObject.getString("code"); final String result = jsonObject.getString("result"); - System.out.println("jsonObject = " + jsonObject); +// System.out.println("jsonObject = " + jsonObject); if (code.equals("E0000")) { final JSONObject resNo = JSONObject.parseObject(result); final String invoiceSerialNum = resNo.getString("invoiceSerialNum"); @@ -296,20 +320,27 @@ public class ThinkInvoiceController extends BaseController { } thinkInvoiceService.updateBatchById(thinkInvoiceList); return success("发票开具成功", json); + } else { + return fail(jsonObject.getString("describe")); } } return fail("开票失败"); } - @ApiOperation("开具发票") @PostMapping("/doInvoice") public ApiResult doInvoice(@RequestBody ThinkInvoice thinkInvoice) { + if (thinkInvoice.getCode() != null) { + String code = thinkInvoice.getCode().replaceAll(" ", ""); + thinkInvoice.setCode(code); + } thinkInvoice.setStatus(1); if (thinkInvoice.getId() != null) thinkInvoiceService.updateById(thinkInvoice); else { if (thinkInvoice.getOrderNum() == null) return fail("非法请求"); - ThinkInvoice check = thinkInvoiceService.getByOrderNum(thinkInvoice.getOrderNum()); + if (thinkInvoice.getOid() == null) return fail("非法请求"); + if (thinkInvoice.getItype() == null) return fail("非法请求"); + ThinkInvoice check = thinkInvoiceService.getByOidNType(thinkInvoice.getOid(), thinkInvoice.getItype()); if (check != null) return fail("该订单已开过发票"); thinkInvoice.setIncoiveCode("91450100737617400R"); thinkInvoice.setCreateTime(System.currentTimeMillis() / 1000); @@ -317,10 +348,12 @@ public class ThinkInvoiceController extends BaseController { if (thinkInvoice.getIncoiveNum() == null) thinkInvoice.setIncoiveNum(""); if (thinkInvoice.getEmail() == null) thinkInvoice.setEmail(""); if (thinkInvoice.getIsOpen() == null) thinkInvoice.setIsOpen(2); +// thinkInvoice.setOrderNum(RandomUtil.randomString(20)); thinkInvoiceService.save(thinkInvoice); } String json = newInvoice(thinkInvoice); if (!json.isEmpty()) return success("开票成功", json); + return fail("发票开具失败"); } @@ -343,6 +376,11 @@ public class ThinkInvoiceController extends BaseController { System.out.println("invoice retry res:" + result); } + @PostMapping("/getRes") + public ApiResult getRes(@RequestBody ThinkInvoice thinkInvoice) { + return success("查询成功", getRes(thinkInvoice.getId())); + } + public String getRes(Integer id) { final ThinkInvoice thinkInvoice = thinkInvoiceService.getById(id); NNOpenSDK sdk = NNOpenSDK.getIntance(); @@ -367,29 +405,53 @@ public class ThinkInvoiceController extends BaseController { JSONArray jsonArray = JSONArray.parseArray(body); for (int i = 0; i < jsonArray.size(); i++) { String status = jsonArray.getJSONObject(i).getString("status"); + String pdfUrl = jsonArray.getJSONObject(i).getString("pdfUrl"); + String xmlUrl = jsonArray.getJSONObject(i).getString("xmlUrl"); if (status.equals("2")) { thinkInvoiceService.update( new LambdaUpdateWrapper() .eq(ThinkInvoice::getIncoiveNum, thinkInvoice.getIncoiveNum()) .set(ThinkInvoice::getIsOpen, 1) + .set(ThinkInvoice::getUrl, pdfUrl) + .set(ThinkInvoice::getXmlUrl, xmlUrl) ); } else if (status.equals("22")) { retry(id); } } return body; - }else if(code.equals("E9500")) { + } else if (code.equals("E9500")) { newInvoice(thinkInvoice); } return result; } + @ApiOperation("发票红冲") + @PostMapping("/invoiceRed") + public ApiResult invoiceRed(@RequestBody ThinkInvoice thinkInvoice) { + NNOpenSDK sdk = NNOpenSDK.getIntance(); + String method = "nuonuo.OpeMplatform.fastInvoiceRed";//API方法名 + String token = getInvoiceToken(); + ThinkInvoice thinkInvoice1 = thinkInvoiceService.getById(thinkInvoice.getId()); + final NuoNuo nuoNuo = new NuoNuo(); + final NuoNuoOrder order = new NuoNuoOrder(); + order.setOrderNo(thinkInvoice1.getOrderNum()); + order.setTaxNum(taxnum); + order.setBillNo(taxnum); + String content = JSONUtil.toJSONString(nuoNuo);//API私有请求参数 + String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码 + + String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API +// System.out.println("json = " + json); + return success("操作成功"); + } + private String newInvoice(ThinkInvoice thinkInvoice) { // 开票接口 NNOpenSDK sdk = NNOpenSDK.getIntance(); String method = "nuonuo.OpeMplatform.requestBillingNew";//API方法名 String token = getInvoiceToken(); - +// String invoiceNum = RandomUtil.randomString(20); final NuoNuo nuoNuo = new NuoNuo(); final NuoNuoOrder order = new NuoNuoOrder(); order.setBuyerName(thinkInvoice.getName()); @@ -399,7 +461,7 @@ public class ThinkInvoiceController extends BaseController { order.setSalerTel(sellerTel); order.setOrderNo((thinkInvoice.getOrderNum() == null || thinkInvoice.getOrderNum().isEmpty()) ? thinkInvoice.getIncoiveNum() : thinkInvoice.getOrderNum()); order.setInvoiceDate(DateUtil.now()); - order.setClerk("赵裕璐"); + order.setClerk(clerk); order.setPayee("班嘉良"); order.setChecker("蓝蕙孚"); order.setShowCheckerType("1"); @@ -412,7 +474,6 @@ public class ThinkInvoiceController extends BaseController { goods.setGoodsName("*预付卡销售*预付卡"); } - goods.setWithTaxFlag("1"); goods.setDField1("无"); goods.setDField2("无"); goods.setDField3("无"); @@ -420,20 +481,22 @@ public class ThinkInvoiceController extends BaseController { goods.setDField5("无"); BigDecimal taxRate = BigDecimal.valueOf(0.05); - if (thinkInvoice.getItype().equals(1)) { List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkInvoice.getOid()); String startTime = DateUtil.format(DateUtil.date((thinkOrderInfoList.get(0).getStartTime() * 1000L)), "yyyy-MM-dd"); goods.setTaxRate(taxRate.toString()); - final BigDecimal tax = thinkInvoice.getPrice().multiply(taxRate).setScale(2, RoundingMode.HALF_UP); + final BigDecimal tax = thinkInvoice.getPrice().divide(BigDecimal.valueOf(1.05), 2, RoundingMode.HALF_UP) + .multiply(taxRate).setScale(2, RoundingMode.DOWN); goods.setFavouredPolicyFlag("09"); final ThinkOrder thinkOrder = thinkOrderService.getById(thinkInvoice.getOid()); ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid()); goods.setPrice(thinkInvoice.getPrice() - .divide(BigDecimal.valueOf(1.05), 2, RoundingMode.HALF_UP) - .divide(thinkSite.getSize(), 2, RoundingMode.HALF_UP) - .setScale(2, RoundingMode.HALF_UP).toString()); + .divide(BigDecimal.valueOf(1.05), 8, RoundingMode.HALF_UP) + .divide(thinkSite.getSize(), 8, RoundingMode.HALF_UP).toString()); +// goods.setPrice(thinkInvoice.getPrice().toString()); goods.setTax(tax.toString()); + goods.setTaxIncludedAmount(thinkInvoice.getPrice().toString()); + goods.setTaxExcludedAmount(thinkInvoice.getPrice().subtract(tax).toString()); goods.setGoodsCode("3040502029902"); NuoNuoRealPropertyRentInfo nuoNuoRealPropertyRentInfo = new NuoNuoRealPropertyRentInfo(); goods.setNum(thinkSite.getSize().toString()); @@ -446,6 +509,7 @@ public class ThinkInvoiceController extends BaseController { nuoNuoRealPropertyRentInfo.setUnit("2"); order.setRealPropertyRentInfo(nuoNuoRealPropertyRentInfo); order.setSpecificFactor("6"); + goods.setWithTaxFlag("0"); } else { goods.setTaxRate("0.00"); goods.setZeroRateFlag("2"); @@ -454,9 +518,10 @@ public class ThinkInvoiceController extends BaseController { goods.setPrice(thinkInvoice.getPrice().setScale(2, RoundingMode.HALF_UP).toString()); goods.setTax("0.00"); goods.setGoodsCode("6010000000000000000"); + goods.setWithTaxFlag("1"); } order.setInvoiceDetail(goods); - order.setExtensionNumber("7426"); + order.setExtensionNumber(extensionNumber); // 13807717477 nuoNuo.setOrder(order); @@ -464,12 +529,12 @@ public class ThinkInvoiceController extends BaseController { String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码 String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API - System.out.println("json = " + json); +// System.out.println("json = " + json); if (StrUtil.isNotBlank(json)) { final JSONObject jsonObject = JSONObject.parseObject(json); final String code = jsonObject.getString("code"); final String result = jsonObject.getString("result"); - System.out.println("jsonObject = " + jsonObject); + System.out.println("invoice jsonObject = " + jsonObject); if (code.equals("E0000")) { final JSONObject resNo = JSONObject.parseObject(result); final String invoiceSerialNum = resNo.getString("invoiceSerialNum"); @@ -478,11 +543,15 @@ public class ThinkInvoiceController extends BaseController { thinkOrder.setIsInvoice(1); thinkOrderService.updateById(thinkOrder); } else if (thinkInvoice.getItype().equals(2)) { - final ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid()); - thinkUsersVip.setIsInvoice(1); - thinkUsersVipService.updateById(thinkUsersVip); + final ThinkRechargeLog thinkRechargeLog = thinkRechargeLogService.getById(thinkInvoice.getOid()); + thinkRechargeLog.setIsInvoice(1); + thinkRechargeLogService.updateById(thinkRechargeLog); + } else if (thinkInvoice.getItype().equals(3)) { + ThinkCard thinkCard = thinkCardService.getById(thinkInvoice.getOid()); + thinkCard.setIsInvoice(1); + thinkCardService.updateById(thinkCard); } - System.out.println("invoiceSerialNum = " + invoiceSerialNum); +// System.out.println("invoiceSerialNum = " + invoiceSerialNum); thinkInvoice.setIncoiveNum(invoiceSerialNum); getRes(thinkInvoice.getId()); // thinkInvoice.setIsOpen(1); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java index f70eb42..da94895 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java @@ -66,7 +66,7 @@ public class ThinkMachineOpenLogController extends BaseController { String[] qrcode = thinkMachineOpenLog.getQrcode().split(","); for (String s : qrcode) { Map res = thinkOrderService.getByQrCode(s, false); - System.out.println(res); +// System.out.println(res); ThinkOrder thinkOrder = (ThinkOrder) res.get("data"); if (thinkOrder != null) { ThinkMachineOpenLog openLog = thinkMachineOpenLogService.getByOrderId(thinkOrder.getId()); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java index cc5c90d..5d904ce 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java @@ -21,6 +21,7 @@ import com.gxwebsoft.common.system.entity.FileRecord; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.param.ThinkOrderParam; +import com.gxwebsoft.think.param.ThinkVipParam; import com.gxwebsoft.think.service.*; import com.wechat.pay.java.core.notification.NotificationConfig; import com.wechat.pay.java.core.notification.NotificationParser; @@ -50,6 +51,7 @@ import java.text.DecimalFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static com.gxwebsoft.think.consts.OrderStatusConsts.PAY_TYPE_WECHAT; @@ -88,6 +90,10 @@ public class ThinkOrderController extends BaseController { private ThinkVipService thinkVipService; @Resource private ThinkOrderRefundLogService thinkOrderRefundLogService; + @Resource + private ThinkOrderOffCheckService thinkOrderOffCheckService; + @Resource + private ThinkCardBalanceService thinkCardBalanceService; @Autowired private RedisUtil redisUtil; @@ -102,50 +108,36 @@ public class ThinkOrderController extends BaseController { // private NotificationConfig config; - @Deprecated @ApiOperation("修复数据") - @GetMapping("/fixInvoiceData") + @GetMapping("/fixCardData") public ApiResult fixInvoiceData() { List thinkOrderList = thinkOrderService.list( new LambdaQueryWrapper() .eq(ThinkOrder::getPayStatus, 1) - .eq(ThinkOrder::getOrderStatus, 1) - .eq(ThinkOrder::getIsInvoice, 3) + .isNull(ThinkOrder::getCode) .gt(ThinkOrder::getCreateTime, 1742400000) - .ne(ThinkOrder::getUid, 0) + .ne(ThinkOrder::getCid, 0) + .last("limit 500") ); List updateList = new ArrayList<>(); - for (ThinkOrder thinkOrder : thinkOrderList) { - if (thinkOrder.getCid() != 0) { - ThinkCard thinkCard = thinkCardService.getById(thinkOrder.getCid()); - if (thinkCard != null && thinkCard.getIsInvoice() == 2) { - thinkOrder.setIsInvoice(2); + Set cidList = new HashSet<>(); + if (!thinkOrderList.isEmpty()) { + for (ThinkOrder thinkOrder : thinkOrderList) { + cidList.add(thinkOrder.getCid()); + } + List thinkCardList = thinkCardService.listByIds(cidList.stream().toList()); + for (ThinkOrder thinkOrder : thinkOrderList) { + ThinkCard thinkCard = thinkCardList.stream().filter(d -> d.getId().equals(thinkOrder.getCid())).findFirst().orElse(null); + if (thinkCard != null) { + thinkOrder.setCode(thinkCard.getCode()); + if (thinkOrder.getPhone() == null) { + thinkOrder.setPhone(thinkCard.getPhone()); + } updateList.add(thinkOrder); } - } else { - if (thinkOrder.getCode() != null) { - ThinkCard thinkCard = thinkCardService.getByCode(thinkOrder.getCode()); - if (thinkCard != null && thinkCard.getIsInvoice() == 2) { - thinkOrder.setIsInvoice(2); - updateList.add(thinkOrder); - } - } else { - if (thinkOrder.getVid() != 0) { - ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkOrder.getVid()); - if (thinkUsersVip != null && thinkUsersVip.getIsInvoice() == 2) { - thinkOrder.setIsInvoice(2); - updateList.add(thinkOrder); - } - } else { - if (thinkOrder.getWechatOrder() != null) { - thinkOrder.setIsInvoice(2); - updateList.add(thinkOrder); - } - } - } } + if (!updateList.isEmpty()) thinkOrderService.updateBatchById(updateList); } - if (!updateList.isEmpty()) thinkOrderService.updateBatchById(updateList); return success(); } @@ -153,7 +145,6 @@ public class ThinkOrderController extends BaseController { @ApiOperation("微信通知") @PostMapping("/notify") public String notify(@RequestBody String body, @RequestHeader Map header) { - System.out.println("支付通知 >>>>> "); com.wechat.pay.java.core.notification.RequestParam requestParam = new RequestParam.Builder() .serialNumber(header.get("wechatpay-serial").toString()) .nonce(header.get("wechatpay-nonce").toString()) @@ -164,11 +155,26 @@ public class ThinkOrderController extends BaseController { NotificationConfig config = wechatConfigService.getNotificationConfig(); NotificationParser parser = new NotificationParser(config); com.wechat.pay.java.service.payments.model.Transaction transaction = parser.parse(requestParam, com.wechat.pay.java.service.payments.model.Transaction.class); + System.out.println("支付通知 >>>>> " + transaction.toString()); // 查询订单信息 final ThinkOrder order = thinkOrderService.getByOrderNum(transaction.getOutTradeNo()); if (order == null) return "订单不存在"; if (order.getPayStatus().equals(2)) { - updatePay(order, transaction.getTransactionId(), transaction.getAmount().getPayerTotal()); + // 已取消的退回 + if (order.getOrderStatus().equals(3)) { + ThinkOrderRefundLog thinkOrderRefundLog = new ThinkOrderRefundLog(); + thinkOrderRefundLog.setOid(order.getId()); + thinkOrderRefundLog.setRefundNo("R" + order.getOrderNum()); + thinkOrderRefundLog.setType(0); + thinkOrderRefundLog.setRefundAmount(order.getPayPrice()); + thinkOrderRefundLog.setUid(order.getUid()); + thinkOrderRefundLog.setCreateTime(LocalDateTimeUtil.now()); + thinkOrderRefundLogService.save(thinkOrderRefundLog); + thinkOrderRefundLog.setOrder(order); + thinkOrderService.refund(thinkOrderRefundLog); + } else { + updatePay(order, transaction.getTransactionId(), transaction.getAmount().getPayerTotal()); + } } return "订单已支付"; } @@ -208,20 +214,69 @@ public class ThinkOrderController extends BaseController { thinkVipCardsBills.setUsed(1); thinkVipCardsBills.setDate(DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); // VIP卡 - if (order.getVid() != null) { + if (order.getVid() != null && !order.getVid().equals(0)) { ThinkUsersVip usersVip = thinkUsersVipService.getById(order.getVid()); + ThinkCardBalance thinkCardBalance = thinkCardBalanceService.getByVid(usersVip.getId()); + if (thinkCardBalance != null) { + if (!thinkCardBalance.getType().equals(5)) { + BigDecimal payPrice = thinkCardBalance.getReduceEach().multiply(BigDecimal.valueOf(num)); + order.setPayPrice(payPrice); + order.setReducePrice(order.getTotalPrice().subtract(payPrice)); + thinkOrderService.updateById(order); + } + thinkCardBalance.setBalance(thinkCardBalance.getBalance().subtract(order.getPayPrice())); + thinkCardBalanceService.updateById(thinkCardBalance); + } else { + ThinkVip thinkVip = thinkVipService.getById(usersVip.getVid()); + BigDecimal reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip); + + ThinkCardBalance thinkCardBalance1 = new ThinkCardBalance(); + thinkCardBalance1.setVid(usersVip.getId()); + thinkCardBalance1.setUid(usersVip.getUid()); + thinkCardBalance1.setBalance(usersVip.getRemainingMoney().subtract(reduceEach)); + thinkCardBalance1.setReduceEach(reduceEach); + thinkCardBalance1.setType(usersVip.getType()); + thinkCardBalance1.setDiscount(usersVip.getDiscount()); + thinkCardBalance1.setVipId(usersVip.getVid()); + thinkCardBalance1.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance1.setCreateTime(DateUtil.currentSeconds()); + thinkCardBalanceService.save(thinkCardBalance1); + if (!thinkCardBalance1.getType().equals(5)) { + BigDecimal payPrice = thinkCardBalance1.getReduceEach().multiply(BigDecimal.valueOf(num)); + order.setPayPrice(payPrice); + order.setReducePrice(order.getTotalPrice().subtract(payPrice)); + } + thinkOrderService.updateById(order); + } if (usersVip.getType().equals(5)) { BigDecimal newBalance = usersVip.getRemainingMoney().subtract(order.getPayPrice()); usersVip.setRemainingMoney(newBalance); thinkVipCardsBills.setAmount(order.getPayPrice()); - } else if (usersVip.getType().equals(4)) { - BigDecimal newBalance = usersVip.getRemainingMoney().subtract(usersVip.getEachMoney()); - usersVip.setRemainingMoney(newBalance); - usersVip.setNum(usersVip.getNum() - num); - thinkVipCardsBills.setAmount(usersVip.getEachMoney()); } else { - usersVip.setNum(usersVip.getNum() - num); - thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP)); + int remainNum = usersVip.getNum() - num; + if (remainNum < 0) remainNum = 0; + usersVip.setNum(remainNum); + if (usersVip.getCount() > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP)); + } else if (usersVip.getCount() == 0) { + if (usersVip.getMode().equals(0)) { + if (usersVip.getMonth() > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getMonth() * 30), RoundingMode.HALF_UP)); + } else { + if (usersVip.getTerm() > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getTerm() * 365L), RoundingMode.HALF_UP)); + } + } + } else { + long remainDay = DateUtil.betweenDay(new Date(), DateUtil.date(usersVip.getExpireTime() * 1000), false); + if (remainDay > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP)); + } + } + thinkVipCardsBills.setAmount(BigDecimal.ZERO); + } else { + thinkVipCardsBills.setAmount(usersVip.getEachMoney()); + } } // 更新会员卡使用时间 usersVip.setUseTime(DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000); @@ -240,13 +295,69 @@ public class ThinkOrderController extends BaseController { } } if (card != null) { + ThinkVip usersVip = thinkVipService.getById(card.getVid()); + ThinkCardBalance thinkCardBalance = thinkCardBalanceService.getByCid(card.getId()); + if (thinkCardBalance != null) { + if (!thinkCardBalance.getType().equals(5)) { + BigDecimal payPrice = thinkCardBalance.getReduceEach().multiply(BigDecimal.valueOf(num)); + order.setPayPrice(payPrice); + order.setReducePrice(order.getTotalPrice().subtract(payPrice)); + thinkOrderService.updateById(order); + } + thinkCardBalance.setBalance(thinkCardBalance.getBalance().subtract(order.getPayPrice())); + thinkCardBalanceService.updateById(thinkCardBalance); + } else { + BigDecimal reduceEach = thinkCardBalanceService.getThinkCardBalance(usersVip); + ThinkCardBalance thinkCardBalance1 = new ThinkCardBalance(); + thinkCardBalance1.setCid(card.getId()); + thinkCardBalance1.setUid(card.getUid()); + thinkCardBalance1.setBalance(card.getRemainingMoney().subtract(reduceEach)); + thinkCardBalance1.setReduceEach(reduceEach); + thinkCardBalance1.setType(usersVip.getType()); + thinkCardBalance1.setDiscount(usersVip.getDiscount()); + thinkCardBalance1.setVipId(card.getVid()); + thinkCardBalance1.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance1.setCreateTime(DateUtil.currentSeconds()); + thinkCardBalanceService.save(thinkCardBalance1); + + if (!thinkCardBalance1.getType().equals(5)) { + BigDecimal payPrice = thinkCardBalance1.getReduceEach().multiply(BigDecimal.valueOf(num)); + order.setPayPrice(payPrice); + order.setReducePrice(order.getTotalPrice().subtract(payPrice)); + } + thinkOrderService.updateById(order); + } + if (card.getType().equals(5) || card.getType().equals(4)) { BigDecimal newBalance = card.getRemainingMoney().subtract(order.getPayPrice()); thinkVipCardsBills.setAmount(order.getPayPrice()); card.setRemainingMoney(newBalance); } else if (card.getType().equals(2)) { - card.setNum(card.getNum() - num); - thinkVipCardsBills.setAmount(card.getPrice().divide(BigDecimal.valueOf(card.getCount()), RoundingMode.HALF_UP)); + int remainNum = card.getNum() - num; + if (remainNum < 0) remainNum = 0; + card.setNum(remainNum); +// thinkVipCardsBills.setAmount(card.getPrice().divide(BigDecimal.valueOf(card.getCount()), RoundingMode.HALF_UP)); + if (usersVip.getCount() > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP)); + } else if (usersVip.getCount() == 0) { + if (usersVip.getMode().equals(0)) { + if (usersVip.getMonth() > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getMonth() * 30), RoundingMode.HALF_UP)); + } else { + if (usersVip.getTerm() > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getTerm() * 365L), RoundingMode.HALF_UP)); + } + } + } else { + long remainDay = DateUtil.betweenDay(new Date(), DateUtil.date(card.getExpireTime() * 1000), false); + if (remainDay > 0) { + thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP)); + } + } + thinkVipCardsBills.setAmount(BigDecimal.ZERO); + } else { + thinkVipCardsBills.setAmount(usersVip.getEachMoney()); + } } // 更新会员卡使用时间 card.setUseTime(DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000); @@ -256,9 +367,24 @@ public class ThinkOrderController extends BaseController { saveBill = true; } + if (order.getPayType().equals(12)) { + order.setPayPrice(BigDecimal.ZERO); + order.setReducePrice(order.getTotalPrice()); + thinkOrderService.updateById(order); + } + if (saveBill) thinkVipCardsBillsService.addLog(thinkVipCardsBills); } + @ApiOperation("设置下单延时") + @PostMapping("/setInterval") + public ApiResult setInterval() { + User user = getLoginUser(); + if (user == null) return fail("请先登录"); + redisUtil.set("think:order:setPause:" + user.getUid(), DateUtil.currentSeconds(), 7L, TimeUnit.SECONDS); + return success(); + } + @ApiOperation("分页查询") @GetMapping("/page") public ApiResult page(ThinkOrderParam param) { @@ -296,7 +422,11 @@ public class ThinkOrderController extends BaseController { @ApiOperation("查询全部") @GetMapping() - public ApiResult> list(ThinkOrderParam param) { + public ApiResult list(ThinkOrderParam param) { + if (param.getForAdmin() == null) { + if (getLoginUser() == null) return fail("请先登录"); + param.setUid(getLoginUser().getUid()); + } // 使用关联查询 return success(thinkOrderService.listRel(param)); } @@ -312,8 +442,8 @@ public class ThinkOrderController extends BaseController { if (order.getVid() != null && !order.getVid().equals(0)) { order.setThinkVip(thinkUsersVipService.getById(order.getVid())); } + String secretKey = redisUtil.get("secretKey_10150"); if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) { - String secretKey = redisUtil.get("secretKey_10150"); byte[] key = null; if (secretKey == null) { key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded(); @@ -332,6 +462,8 @@ public class ThinkOrderController extends BaseController { order.setSiteName(thinkSite.getName()); List thinkOrderInfoList = thinkOrderInfoService.listInOrder(order.getId()); StringBuilder dateTimeList = new StringBuilder(); + int num = 0; + List qrCodeList = new ArrayList<>(); if (!thinkOrderInfoList.isEmpty()) { for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { String dateTime = thinkOrderInfo.getDateTime(); @@ -341,9 +473,26 @@ public class ThinkOrderController extends BaseController { } else { dateTimeList.append(",").append(dateTime); } + num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum() - thinkOrderInfo.getUsedNum(); } order.setDateTime(dateTimeList.toString()); } + if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) { + for (int i = 0; i < num; i++) { + byte[] key = null; + if (secretKey == null) { + key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded(); + redisUtil.set("secretKey_10150", Base64.getEncoder().encodeToString(key)); + } else { + key = Base64.getDecoder().decode(secretKey); + } + SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key); + long timestamp = (int) (System.currentTimeMillis() / 1000) + i; + String qr = id + "_" + timestamp + "_none_forDevice"; + qrCodeList.add(aes.encryptHex(qr)); + } + order.setQrCodeList(qrCodeList); + } return success(order); } @@ -366,8 +515,8 @@ public class ThinkOrderController extends BaseController { User admin = requestUtil.getByUserId(order.getAid()); if (admin != null) order.setAdminName(admin.getRealName()); } + String secretKey = redisUtil.get("secretKey_10150"); if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) { - String secretKey = redisUtil.get("secretKey_10150"); byte[] key = null; if (secretKey == null) { key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded(); @@ -386,6 +535,8 @@ public class ThinkOrderController extends BaseController { order.setSiteName(thinkSite.getName()); List thinkOrderInfoList = thinkOrderInfoService.listInOrder(order.getId()); StringBuilder dateTimeList = new StringBuilder(); + List qrCodeList = new ArrayList<>(); + int num = 0; if (!thinkOrderInfoList.isEmpty()) { for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { String dateTime = thinkOrderInfo.getDateTime(); @@ -395,9 +546,28 @@ public class ThinkOrderController extends BaseController { } else { dateTimeList.append(",").append(dateTime); } + num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum() - thinkOrderInfo.getUsedNum(); } order.setDateTime(dateTimeList.toString()); } + for (int i = 0; i < num; i++) { + byte[] key = null; + if (secretKey == null) { + key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded(); + redisUtil.set("secretKey_10150", Base64.getEncoder().encodeToString(key)); + } else { + key = Base64.getDecoder().decode(secretKey); + } + SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key); + long timestamp = (int) (System.currentTimeMillis() / 1000) + i; + String qr = id + "_" + timestamp + "_none_forDevice"; + qrCodeList.add(aes.encryptHex(qr)); + } + order.setQrCodeList(qrCodeList); + ThinkOrderOffCheck thinkOrderOffCheck = thinkOrderOffCheckService.getByOrderId(order.getId()); + if (thinkOrderOffCheck != null) { + order.setThinkOrderOffCheck(thinkOrderOffCheck); + } return success(order); } @@ -405,26 +575,50 @@ public class ThinkOrderController extends BaseController { @PostMapping("/check-code") public ApiResult getByQrCode(@RequestBody ThinkOrder order) { if (order.getQrcode() == null || order.getQrcode().isEmpty()) return fail("二维码不能为空"); - if (order.getQrcode().equals("7b3bb393c6434c63553dc42a456b3a2aa215933d4c4621fc8f62b4632913e77c")) { - return success("核销成功", order.getQrcode()); - } // 使用关联查询 Map res = thinkOrderService.getByQrCode(order.getQrcode()); if (!(Boolean) res.get("res")) return fail(res.get("msg")); // 核销动作 ThinkOrder thinkOrder = (ThinkOrder) res.get("data"); - thinkOrder.setOrderStatus(1); - thinkOrderService.updateById(thinkOrder); - return success("核销成功", order.getQrcode()); + int usedNum = 0; + int totalNum = 0; + redisUtil.set(order.getQrcode(), 1, 1L, TimeUnit.HOURS); + String typeStr = ""; + for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { + usedNum += thinkOrderInfo.getUsedNum() + 1; + totalNum += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum(); + thinkOrderInfo.setUsedNum(thinkOrderInfo.getUsedNum() + 1); + thinkOrderInfoService.updateById(thinkOrderInfo); + + if (thinkOrderInfo.getSid() != null && thinkOrderInfo.getSid().equals(37)) { + if (thinkOrderInfo.getAdultNum() > 0) typeStr = "adult"; + else typeStr = "child"; + } + } + if (usedNum == totalNum) { + thinkOrder.setOrderStatus(1); + thinkOrderService.updateById(thinkOrder); + } + return success("核销成功", order.getQrcode(), typeStr); } - @ApiOperation("检查有消息") + @ApiOperation("仅检查code有效") @PostMapping("/check-code-only") public ApiResult checkCodeOnly(@RequestBody ThinkOrder order) { if (order.getQrcode() == null || order.getQrcode().isEmpty()) return fail("二维码不能为空"); Map res = thinkOrderService.getByQrCode(order.getQrcode()); if (!(Boolean) res.get("res")) return fail(res.get("msg")); - return success("核销成功", order.getQrcode()); + ThinkOrder thinkOrder = (ThinkOrder) res.get("data"); + redisUtil.set(order.getQrcode(), 1, 1L, TimeUnit.HOURS); + String typeStr = ""; + for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { + if (thinkOrderInfo.getSid() != null && thinkOrderInfo.getSid().equals(37)) { + if (thinkOrderInfo.getAdultNum() > 0) typeStr = "adult"; + else typeStr = "child"; + } + } + + return success("核销成功", order.getQrcode(), typeStr); } @ApiOperation("根据code查询") @@ -441,40 +635,92 @@ public class ThinkOrderController extends BaseController { if (user == null) return fail("请先登录"); if (thinkOrder.getPostTime() == null) return fail("非法请求.code:-1"); if (thinkOrder.getSign() == null) return fail("非法请求.code:-1"); + if (redisUtil.get("think:order:setPause:" + user.getUid()) != null) return fail("请勿频繁操作.code:0"); + redisUtil.delete("think:order:setPause:" + user.getUid()); + if (redisUtil.get(thinkOrder.getSign()) != null) return fail("请勿重复提交"); String sign = SecureUtil.md5(thinkOrder.getPostTime() + "wxd38cc38c54fa7370" + thinkOrder.getStartTime() + user.getUid()); if (!Objects.equals(sign, thinkOrder.getSign())) return fail("非法请求.code:-2"); + if (thinkOrder.getThinkOrderInfos().get(0).getDateTime().contains(";") || thinkOrder.getThinkOrderInfos().get(0).getDateTime().contains(")") || thinkOrder.getThinkOrderInfos().get(0).getDateTime().contains("(")) + return fail("非法请求.code:-3"); + redisUtil.set(thinkOrder.getSign(), sign, 1L, TimeUnit.DAYS); + String lastSubmitTime = redisUtil.get(thinkOrder.getSign() + "_lastSubmitTime"); + if (lastSubmitTime != null) { + if (DateUtil.currentSeconds() - Integer.parseInt(lastSubmitTime) < 160) + return fail("请勿频繁操作.code:1"); + } + redisUtil.set(thinkOrder.getSign() + "_lastSubmitTime", DateUtil.currentSeconds(), 1L, TimeUnit.DAYS); + if (!thinkOrder.getSid().equals(37)) { + if (redisUtil.get(user.getUid() + "_lastPayOrderTime") != null) { + if (DateUtil.currentSeconds() - Integer.parseInt(redisUtil.get(user.getUid() + "_lastPayOrderTime")) < 180) + return fail("每次预订需间隔3分钟.code:1"); + } + } + redisUtil.set(user.getUid() + "_lastPayOrderTime", DateUtil.currentSeconds(), 3L, TimeUnit.MINUTES); ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid()); // 8:00 ~ 23:00 不能定 String today = DateUtil.format(new Date(), "yyyy-MM-dd"); if (LocalDateTimeUtil.now().isAfter(LocalDateTime.parse(today + " 23:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) || LocalDateTimeUtil.now().isBefore(LocalDateTime.parse(today + " 08:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))) { + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("场地预定时间为:8:00-23:00。"); } + if (thinkOrder.getThinkOrderInfos().isEmpty()) { + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求.code:5"); + } + if (!thinkOrder.getSid().equals(37)) { + for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) { + if (redisUtil.get(info.getStartTime().toString() + info.getFid().toString()) != null) { + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("该场地已被预定.code:0"); + } else { + redisUtil.set(info.getStartTime().toString() + info.getFid().toString(), user.getUid(), 1L, TimeUnit.MINUTES); + } + } + } if (thinkOrder.getSid().equals(37)) { // 只能定当天 if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum()) return fail("已达上限,无法预定"); } else { // 只能定7天 - if (thinkOrder.getThinkOrderInfos().isEmpty()) return fail("非法请求.code:5"); Date date = DateUtil.parse(thinkOrder.getThinkOrderInfos().get(0).getTimePeriod(), "yyyy-MM-dd"); long secDiff = DateUtil.between(DateUtil.beginOfDay(DateUtil.date()), date, DateUnit.SECOND); - if (secDiff >= 604800 && !thinkOrder.getSid().equals(28)) return fail("只能预定7天内的场地"); + if (secDiff >= 604800 && !thinkOrder.getSid().equals(28)) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("只能预定7天内的场地"); + } // 用户限制订单,单个用户(每个id)每个时段只能订两个场地,每次预订间隔要3分钟 // 今天的订单 ThinkOrder todayOrder = thinkOrderService.getTodayOrder(user.getUid()); if (todayOrder != null) { if ((System.currentTimeMillis() / 1000) - todayOrder.getCreateTime() < 180) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("每次预订需间隔3分钟"); } } // 周末场地需要周四17点后才能预定 if (DateUtil.dayOfWeek(date) == 6 || DateUtil.dayOfWeek(date) == 7 || DateUtil.dayOfWeek(date) == 1) { - if (DateUtil.dayOfWeek(new Date()) == 5 && DateUtil.hour(new Date(), true) < 17) + int dayOfWeek = DateUtil.dayOfWeek(new Date()); + if (dayOfWeek == 5 && DateUtil.hour(new Date(), true) < 17) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("周末场地需要周四17点后才能预定"); - if (DateUtil.dayOfWeek(new Date()) == 2 || DateUtil.dayOfWeek(new Date()) == 3 || DateUtil.dayOfWeek(new Date()) == 4) { + } + if (dayOfWeek == 2 || dayOfWeek == 3 || dayOfWeek == 4) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("周四17点后才能预定"); } + if (dayOfWeek == 6 || dayOfWeek == 7 || dayOfWeek == 1) { + if (secDiff > 259200) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("周四17点后才能预定"); + } + } } Map siteTimeNumMap = new HashMap<>(); siteTimeNumMap.put(thinkOrder.getThinkOrderInfos().get(0).getStartTime(), 1); @@ -507,12 +753,14 @@ public class ThinkOrderController extends BaseController { } } // 250327规则修改 - // 周1~周4晚上的18-22时间段、周五~周日全天进行限制。 (限制规则:每个账号订场规则调整成这样,每个时段只能定2个场地) + // 周1~周5晚上的18-22时间段、周六~周日全天进行限制。 (限制规则:每个账号订场规则调整成这样,每个时段只能定2个场地) int day = DateUtil.dayOfWeek(date); - if ((day == 1 || day == 6 || day == 7)) { + if ((day == 1 || day == 7)) { for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) { if (bookingNumMap.get(info.getStartTime()) != null) { if (bookingNumMap.get(info.getStartTime()) + siteTimeNumMap.get(info.getStartTime()) > 2) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("每个时段只能预定两个场地"); } } @@ -524,6 +772,8 @@ public class ThinkOrderController extends BaseController { if (hourInt >= 18) { if (bookingNumMap.get(info.getStartTime()) != null) { if (bookingNumMap.get(info.getStartTime()) + siteTimeNumMap.get(info.getStartTime()) > 2) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("每个时段只能预定两个场地"); } } @@ -535,14 +785,25 @@ public class ThinkOrderController extends BaseController { ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info); if (checkOrder != null) { ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid()); - if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2))) - return fail("该场地已被预定"); + if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2))) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("该场地已被预定.code:1"); + } } } } - if (thinkOrder.getPayType().equals(2) && thinkOrder.getVid() == null) return fail("请选择会员卡"); - if (thinkOrder.getPayType().equals(5) && thinkOrder.getCode() == null) return fail("请选择IC卡"); + if (thinkOrder.getPayType().equals(2) && thinkOrder.getVid() == null) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("请选择会员卡"); + } + if (thinkOrder.getPayType().equals(5) && thinkOrder.getCode() == null) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("请选择IC卡"); + } thinkOrder.setCanInvoice(true); thinkOrder.setOrderNum(IdUtil.getSnowflake().nextIdStr()); BigDecimal totalPrice = BigDecimal.ZERO; @@ -565,9 +826,9 @@ public class ThinkOrderController extends BaseController { // 半场 price = siteTime.getPrice(); halfPrice = siteTime.getHalfPrice(); + String month = DateUtil.format(DateUtil.date((thinkOrderInfo.getStartTime() * 1000L)), "yyyy-MM"); if (siteTime.getPrices() != null && siteTime.getPrices().contains("{")) { JSONObject prices = JSONUtil.parseObj(siteTime.getPrices()); - String month = DateUtil.format(new Date(), "yyyy-MM"); if (prices.getJSONArray(month) != null) { String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay()); if (priceStr != null && !priceStr.isEmpty()) price = new BigDecimal(priceStr); @@ -575,7 +836,6 @@ public class ThinkOrderController extends BaseController { } if (siteTime.getHalfPrices() != null && siteTime.getHalfPrices().contains("{")) { JSONObject prices = JSONUtil.parseObj(siteTime.getHalfPrices()); - String month = DateUtil.format(new Date(), "yyyy-MM"); if (prices.getJSONArray(month) != null) { String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay()); if (priceStr != null && !priceStr.isEmpty()) halfPrice = new BigDecimal(priceStr); @@ -586,14 +846,22 @@ public class ThinkOrderController extends BaseController { thinkOrderInfo.setTimeFlag(now); // thinkOrderInfo.setIsChildren(0); if (thinkOrderInfo.getIsChildren().equals(2)) { - if (thinkOrderInfo.getAdultNum() < 1) return fail("非法请求,code:1"); + if (thinkOrderInfo.getAdultNum() < 1) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求,code:1"); + } if (thinkOrderInfo.getType().equals(2)) totalPrice = totalPrice.add(halfPrice.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); else totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); num += thinkOrderInfo.getAdultNum(); } else { - if (thinkOrderInfo.getChildrenNum() < 1) return fail("非法请求,code:2"); + if (thinkOrderInfo.getChildrenNum() < 1) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求,code:2"); + } thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice()); totalPrice = totalPrice.add(siteTime.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum()))); num += thinkOrderInfo.getChildrenNum(); @@ -604,7 +872,11 @@ public class ThinkOrderController extends BaseController { thinkOrderInfo.setPrice(price); } // reducePrice = reducePrice.add(thinkOrderInfo.getChildrenPrice()); - } else return fail("非法请求,code:3"); + } else { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求,code:3"); + } } } thinkOrder.setTotalPrice(totalPrice); @@ -612,26 +884,59 @@ public class ThinkOrderController extends BaseController { // VIP卡 if (thinkOrder.getVid() != null) { ThinkUsersVip usersVip = thinkUsersVipService.getById(thinkOrder.getVid()); - if (usersVip == null) return fail("非法请求,code:4"); - if (usersVip.getExpireTime() < timestamp) return fail("会员卡已过期"); - if (!usersVip.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1"); + if (usersVip == null) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求,code:4"); + } + if (usersVip.getExpireTime() < timestamp) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("会员卡已过期"); + } + if (!usersVip.getUid().equals(getLoginUser().getUid())) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求,code:1"); + } if (usersVip.getType().equals(5)) { - if (usersVip.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); + if (usersVip.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("余额不足"); + } BigDecimal discount = usersVip.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP); BigDecimal payPrice = totalPrice.multiply(discount); thinkOrder.setReducePrice(totalPrice.subtract(payPrice)); thinkOrder.setPayPrice(payPrice); - if (usersVip.getRemainingMoney().compareTo(payPrice) < 0) return fail("余额不足"); + if (usersVip.getRemainingMoney().compareTo(payPrice) < 0) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("余额不足"); + } } else if (usersVip.getType().equals(2)) { - if (usersVip.getNum() < num) return fail("次数不足"); + if (usersVip.getNum() < num) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("次数不足"); + } thinkOrder.setReducePrice(totalPrice); thinkOrder.setPayPrice(BigDecimal.ZERO); } else { // if (usersVip.getNum() < num) return fail("次数不足"); long todayTime = DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000; if (usersVip.getUseTime().equals(todayTime)) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("今天已使用"); } + if (thinkOrder.getSid().equals(37)) { + if (num > 1) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("年卡/季卡/月卡仅能一人使用"); + } + } // 上次使用的订单 // ThinkOrder lastOrder = thinkOrderService.getLastOrderByVid(usersVip.getId()); // if (lastOrder != null) { @@ -681,27 +986,56 @@ public class ThinkOrderController extends BaseController { // IC卡 if (thinkOrder.getCode() != null) { ThinkCard card = thinkCardService.getByCode(thinkOrder.getCode()); - if (card == null) return fail("非法请求,code:0"); + if (card == null) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("非法请求,code:0"); + } // if (!card.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1"); thinkOrder.setCid(card.getId()); - if (card.getExpireTime() < timestamp) return fail("会员卡已过期"); + if (card.getExpireTime() < timestamp) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("会员卡已过期"); + } if (card.getType().equals(5)) { - if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); + if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("余额不足"); + } BigDecimal discount = card.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP); BigDecimal payPrice = totalPrice.multiply(discount); BigDecimal reducePrice = totalPrice.subtract(payPrice); thinkOrder.setReducePrice(reducePrice); thinkOrder.setPayPrice(payPrice); - if (card.getRemainingMoney().compareTo(payPrice) < 0) return fail("余额不足"); + if (card.getRemainingMoney().compareTo(payPrice) < 0) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("余额不足"); + } } else if (card.getType().equals(2)) { - if (card.getNum() < num) return fail("次数不足"); + if (card.getNum() < num) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("次数不足"); + } thinkOrder.setReducePrice(totalPrice); thinkOrder.setPayPrice(BigDecimal.ZERO); } else { long todayTime = DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000; if (card.getUseTime().equals(todayTime)) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); return fail("今天已使用"); } + if (thinkOrder.getSid().equals(37)) { + if (num > 1) { + clearSiteRedis(thinkOrder.getThinkOrderInfos()); + redisUtil.delete(user.getUid() + "_lastPayOrderTime"); + return fail("年卡/季卡/月卡仅能一人使用"); + } + } // 上次使用的订单 // ThinkOrder lastOrder = thinkOrderService.getLastOrderByCardCode(card.getCode()); // // 今天是否已经使用 @@ -773,7 +1107,7 @@ public class ThinkOrderController extends BaseController { if (checkOrder != null) { ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid()); if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2))) - return fail("该场地已被预定"); + return fail("该场地已被预定.code:2"); } } if (thinkOrder.getPayType().equals(1) || thinkOrder.getPayType().equals(4) || thinkOrder.getPayType().equals(5)) { @@ -795,6 +1129,7 @@ public class ThinkOrderController extends BaseController { int num = 0; if (thinkOrder.getThinkOrderInfos() != null) { for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { + redisUtil.set(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString(), 1, 20L, TimeUnit.DAYS); ThinkSiteTime siteTime = thinkSiteTimeService.getById(thinkOrderInfo.getSiteTimeId()); thinkOrderInfo.setPrice(BigDecimal.ZERO); thinkOrderInfo.setChildrenPrice(BigDecimal.ZERO); @@ -803,9 +1138,9 @@ public class ThinkOrderController extends BaseController { if (siteTime != null && siteTime.getIsStatus() == 1) { halfPrice = siteTime.getHalfPrice(); price = siteTime.getPrice(); + String month = DateUtil.format(DateUtil.date((thinkOrderInfo.getStartTime() * 1000L)), "yyyy-MM"); if (siteTime.getPrices() != null && siteTime.getPrices().contains("{")) { JSONObject prices = JSONUtil.parseObj(siteTime.getPrices()); - String month = DateUtil.format(new Date(), "yyyy-MM"); if (prices.getJSONArray(month) != null) { String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay() - 1); if (priceStr != null && !priceStr.isEmpty()) price = new BigDecimal(priceStr); @@ -813,13 +1148,11 @@ public class ThinkOrderController extends BaseController { } if (siteTime.getHalfPrices() != null && siteTime.getHalfPrices().contains("{")) { JSONObject prices = JSONUtil.parseObj(siteTime.getHalfPrices()); - String month = DateUtil.format(new Date(), "yyyy-MM"); if (prices.getJSONArray(month) != null) { String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay() - 1); if (priceStr != null && !priceStr.isEmpty()) halfPrice = new BigDecimal(priceStr); } } - // 半场 thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice()); thinkOrderInfo.setOrderTime(timestamp); thinkOrderInfo.setTimeFlag(now); @@ -831,12 +1164,21 @@ public class ThinkOrderController extends BaseController { else totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); num += thinkOrderInfo.getAdultNum(); + if (thinkOrder.getSid().equals(37) && thinkOrder.getAdultFree() && thinkSite.getAdultFree().equals(1)) { + totalPrice = thinkOrder.getAdultPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum())); + price = thinkOrder.getAdultPrice(); + } } else { if (thinkOrderInfo.getChildrenNum() < 1) return fail("非法请求,code:2"); thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice()); totalPrice = totalPrice.add(siteTime.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum()))); price = siteTime.getChildrenPrice(); num += thinkOrderInfo.getChildrenNum(); + if (thinkOrder.getSid().equals(37) && thinkOrder.getChildFree() && thinkSite.getChildFree().equals(1)) { + thinkOrderInfo.setChildrenPrice(thinkOrder.getChildrenPrice()); + totalPrice = thinkOrder.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum())); + price = thinkOrder.getChildrenPrice(); + } } if (thinkOrderInfo.getType().equals(2)) thinkOrderInfo.setPrice(halfPrice); else thinkOrderInfo.setPrice(price); @@ -845,6 +1187,7 @@ public class ThinkOrderController extends BaseController { } } + thinkOrder.setTotalPrice(totalPrice); thinkOrder.setPayPrice(totalPrice); // if (thinkOrder.getRealPrice() != null && thinkOrder.getRealPrice().compareTo(BigDecimal.ZERO) > 0) @@ -945,39 +1288,41 @@ public class ThinkOrderController extends BaseController { @ApiOperation("重新支付") @PostMapping("/repay") public ApiResult repay(@RequestBody ThinkOrder thinkOrder) { - ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId()); - if (thinkOrder1 == null) return fail("订单不存在"); - if (thinkOrder1.getPayStatus().equals(1)) return fail("该订单已支付"); - if (thinkOrder1.getOrderStatus().equals(3)) return fail("该订单已取消"); - List thinkOrderInfos = thinkOrderInfoService.listInOrder(thinkOrder.getId()); - - ThinkSite thinkSite = thinkSiteService.getByIdRel(thinkOrder1.getSid()); - if (thinkOrder1.getSid().equals(37)) { - if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum()) - return fail("已达上限,无法预定"); - } else { - for (ThinkOrderInfo info : thinkOrderInfos) { - ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info); - if (checkOrder != null) { - ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid()); - if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2))) - if (!thinkOrder.getId().equals(checkOrder.getOid())) - return fail("该场地已被预定"); - } - } - } - thinkOrder1.setOrderNum(IdUtil.getSnowflake().nextIdStr()); - thinkOrderService.updateById(thinkOrder1); - String desc = thinkOrder1.getThinkOrderInfos().get(0).getSiteName() + "-" + thinkOrder1.getThinkOrderInfos().get(0).getFieldName(); - return success("下单成功", thinkOrderService.createWxOrder(thinkOrder1.getPayPrice(), thinkOrder1.getOrderNum(), desc, - getLoginUser().getOpenid())); +// ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId()); +// if (thinkOrder1 == null) return fail("订单不存在"); +// if (thinkOrder1.getPayStatus().equals(1)) return fail("该订单已支付"); +// if (thinkOrder1.getOrderStatus().equals(3)) return fail("该订单已取消"); +// List thinkOrderInfos = thinkOrderInfoService.listInOrder(thinkOrder.getId()); +// +// ThinkSite thinkSite = thinkSiteService.getByIdRel(thinkOrder1.getSid()); +// if (thinkOrder1.getSid().equals(37)) { +// if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum()) +// return fail("已达上限,无法预定"); +// } else { +// for (ThinkOrderInfo info : thinkOrderInfos) { +// ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info); +// if (checkOrder != null) { +// ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid()); +// if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2))) +// if (!thinkOrder.getId().equals(checkOrder.getOid())) +// return fail("该场地已被预定.code:3"); +// } +// } +// } +// thinkOrder1.setOrderNum(IdUtil.getSnowflake().nextIdStr()); +// thinkOrderService.updateById(thinkOrder1); +// String desc = thinkOrder1.getThinkOrderInfos().get(0).getSiteName() + "-" + thinkOrder1.getThinkOrderInfos().get(0).getFieldName(); +// return success("下单成功", thinkOrderService.createWxOrder(thinkOrder1.getPayPrice(), thinkOrder1.getOrderNum(), desc, +// getLoginUser().getOpenid(), "https://gxtyzx-api2.websoft.top/api/think/think-order/notify")); + return success(""); } private ApiResult onPay(ThinkOrder order) throws IOException, WxErrorException { // 微信统一下单接口 if (order.getPayType().equals(PAY_TYPE_WECHAT)) { String desc = order.getThinkOrderInfos().get(0).getSiteName() + "-" + order.getThinkOrderInfos().get(0).getFieldName(); - return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), desc, getLoginUser().getOpenid())); + return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), desc, getLoginUser().getOpenid(), + "https://gxtyzx-api2.websoft.top/api/think/think-order/notify", order.getId())); } if (order.getPayType() >= 6 || order.getPayType().equals(2)) { order.setIsInvoice(order.getCanInvoice() ? 2 : 3); @@ -991,9 +1336,9 @@ public class ThinkOrderController extends BaseController { @ApiOperation("修改") @PutMapping() public ApiResult update(@RequestBody ThinkOrder thinkOrder) { + ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId()); if (thinkOrder.getCid() != null && !thinkOrder.getCid().equals(0) && thinkOrder.getPayStatus() != null && thinkOrder.getPayStatus().equals(1)) { - ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId()); BigDecimal totalPrice = thinkOrder1.getTotalPrice(); ThinkCard card = thinkCardService.getById(thinkOrder.getCid()); if (card == null) return fail("IC卡不存在"); @@ -1061,67 +1406,10 @@ public class ThinkOrderController extends BaseController { } } if (thinkOrder.getOrderStatus() != null && thinkOrder.getOrderStatus().equals(3)) { - // 取消 - int num = 0; - List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); - for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { - thinkOrderInfo.setPayStatus(0); - num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum(); - } - thinkOrderInfoService.updateBatchById(thinkOrderInfoList); - ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId()); - if (thinkOrder1.getVid() != null && !thinkOrder1.getVid().equals(0)) { - ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkOrder1.getVid()); - if (thinkUsersVip != null) { - thinkUsersVip.setUseTime(0L); - ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); - thinkVipCardsBills.setVid(thinkOrder1.getVid()); - thinkVipCardsBills.setUid(thinkOrder1.getUid()); - DateTime dateTime = DateUtil.date(thinkOrderInfoList.get(0).getStartTime() * 1000L); - thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); - thinkVipCardsBillsService.cancelLog(thinkVipCardsBills); - - if (thinkUsersVip.getType().equals(5)) { - BigDecimal newBalance = thinkUsersVip.getRemainingMoney().add(thinkOrder1.getPayPrice()); - thinkUsersVip.setRemainingMoney(newBalance); - } else if (thinkUsersVip.getType().equals(4)) { - BigDecimal newBalance = thinkUsersVip.getRemainingMoney().add(thinkUsersVip.getEachMoney()); - thinkUsersVip.setRemainingMoney(newBalance); - thinkUsersVip.setNum(thinkUsersVip.getNum() + num); - } else { - thinkUsersVip.setNum(thinkUsersVip.getNum() + num); - } - thinkUsersVip.setUseTime(0L); - thinkUsersVipService.updateById(thinkUsersVip); - } - } - if (thinkOrder1.getCode() != null && !thinkOrder1.getCode().isEmpty()) { - ThinkCard card = thinkCardService.getByCode(thinkOrder1.getCode()); - if (card != null) { - if (card.getType().equals(5)) { - BigDecimal newBalance = card.getRemainingMoney().add(thinkOrder1.getPayPrice()); - card.setRemainingMoney(newBalance); - } else if (card.getType().equals(4)) { - BigDecimal newBalance = card.getRemainingMoney().add(card.getEachMoney()); - card.setRemainingMoney(newBalance); - } else if (card.getType().equals(2)) { - card.setNum(card.getNum() + 1); - } - card.setUseTime(0L); - thinkCardService.updateById(card); - } - } - if (thinkOrder1.getWechatOrder() != null && !thinkOrder1.getWechatOrder().isEmpty() && thinkOrder1.getWechatOrder().contains("420000")) { - ThinkOrderRefundLog thinkOrderRefundLog = new ThinkOrderRefundLog(); - thinkOrderRefundLog.setOid(thinkOrder.getId()); - thinkOrderRefundLog.setRefundNo("R" + thinkOrder1.getOrderNum()); - thinkOrderRefundLog.setType(0); - thinkOrderRefundLog.setRefundAmount(thinkOrder1.getPayPrice()); - thinkOrderRefundLog.setUid(thinkOrder1.getUid()); - thinkOrderRefundLog.setCreateTime(LocalDateTimeUtil.now()); - thinkOrderRefundLogService.save(thinkOrderRefundLog); - thinkOrderRefundLog.setOrder(thinkOrder1); - thinkOrderService.refund(thinkOrderRefundLog); + int refundBy = thinkOrder.getIsAdmin() != null ? 0 : 1; + String cancelRes = thinkOrderService.cancelOrder(thinkOrder, false, refundBy); + if (!cancelRes.isEmpty()) { + return fail(cancelRes); } } if (thinkOrderService.updateById(thinkOrder)) { @@ -1170,7 +1458,7 @@ public class ThinkOrderController extends BaseController { @PostMapping("/export") public ApiResult export(@RequestBody ThinkOrderParam param) throws IOException { List orderList = thinkOrderService.listRel(param); - String filename = "excel/财务报表-" + new Date().getTime() + ".xlsx"; + String filename = "excel/订单列表-" + new Date().getTime() + ".xlsx"; String path = uploadPath + filename; SXSSFWorkbook workbook = new SXSSFWorkbook(); //创建工作表单 @@ -1182,35 +1470,76 @@ public class ThinkOrderController extends BaseController { sheet.setColumnWidth(4, 20 * 256); SXSSFRow row = sheet.createRow(0); - String[] headers = {"场馆名称", "下单时间", "单位", "手机号", "实际转账单位/个人", "价格", "积分", "支付方式", "预付卡号", "预付卡到期时间"}; + String[] headers = {"场馆名称", "下单时间", "订单号", "手机号", "实际转账单位/个人", "订单状态", "支付状态", "原价", "实付", "订场信息", + "支付方式", "预付卡号", "预付卡到期时间"}; String[] payType = {"余额支付", "微信支付", "积分", "支付宝", "现金", "POS机", "VIP月卡", "VIP年卡", "VIP次卡", "IC月卡", - "IC年卡", "IC次卡", "免费", "VIP充值卡", "", "积分支付", "VIP季卡", "IC季卡"}; + "IC年卡", "IC次卡", "免费", "VIP充值卡", "IC充值卡", "积分支付", "VIP季卡", "IC季卡"}; for (int i = 0; i < headers.length; i++) { row.createCell(i).setCellValue(headers[i]); } int rowNum = 1; for (ThinkOrder order : orderList) { + String orderStatus = ""; + switch (order.getOrderStatus()) { + case 1: + orderStatus = "已完成"; + break; + case 2: + orderStatus = "未使用"; + break; + case 3: + orderStatus = "已取消"; + break; + case 4: + orderStatus = "退款申请中"; + break; + case 5: + orderStatus = "退款被拒绝"; + break; + case 6: + orderStatus = "退款成功"; + } + String payStatus = ""; + switch (order.getPayStatus()) { + // 1已付款,2未付款 3未付款占场中 4未付款已使用 + case 1: { + payStatus = "已付款"; + } + break; + case 2: { + payStatus = "未付款"; + } + break; + case 3: { + payStatus = "未付款占场中"; + } + break; + case 4: { + payStatus = "未付款已使用"; + } + break; + } + SXSSFRow orderRow = sheet.createRow(rowNum); orderRow.createCell(0).setCellValue(order.getSiteName()); - System.out.println(order.getCreateTime()); - System.out.println(order.getCreateTime() * 1000); - System.out.println(DateUtil.date(order.getCreateTime() * 1000)); - System.out.println(DateUtil.format(DateUtil.date(order.getCreateTime() * 1000), "yyyy-MM-dd HH:mm:ss")); orderRow.createCell(1).setCellValue(DateUtil.format(DateUtil.date(order.getCreateTime() * 1000), "yyyy-MM-dd HH:mm:ss")); - orderRow.createCell(2).setCellValue(order.getName()); + orderRow.createCell(2).setCellValue(order.getOrderNum()); orderRow.createCell(3).setCellValue(order.getPhone()); orderRow.createCell(4).setCellValue(order.getName()); - orderRow.createCell(5).setCellValue(order.getTotalPrice().toString()); - orderRow.createCell(6).setCellValue("0"); - orderRow.createCell(7).setCellValue(payType[order.getPayType()]); + orderRow.createCell(5).setCellValue(orderStatus); + orderRow.createCell(6).setCellValue(payStatus); + orderRow.createCell(7).setCellValue(order.getTotalPrice().toString()); + orderRow.createCell(8).setCellValue(order.getPayPrice().toString()); + orderRow.createCell(9).setCellValue(order.getDateTime()); + orderRow.createCell(10).setCellValue(payType[order.getPayType()]); if (order.getCard() != null) { - orderRow.createCell(8).setCellValue(order.getCard().getCode()); - orderRow.createCell(9).setCellValue(DateUtil.format(DateUtil.date(order.getCard().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss")); + orderRow.createCell(11).setCellValue(order.getCard().getCode()); + orderRow.createCell(12).setCellValue(DateUtil.format(DateUtil.date(order.getCard().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss")); } if (order.getThinkVip() != null) { - orderRow.createCell(8).setCellValue(order.getThinkVip().getCode()); - orderRow.createCell(9).setCellValue(DateUtil.format(DateUtil.date(order.getThinkVip().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss")); + orderRow.createCell(11).setCellValue(order.getThinkVip().getCode()); + orderRow.createCell(12).setCellValue(DateUtil.format(DateUtil.date(order.getThinkVip().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss")); } // sheet.addMergedRegion(new CellRangeAddress(rowNum, 0, 2, 2)); @@ -1383,25 +1712,29 @@ public class ThinkOrderController extends BaseController { vipQueryWrapper.ge(ThinkRechargeLog::getCreateTime, param.getCreateTimeStart()); vipQueryWrapper.le(ThinkRechargeLog::getCreateTime, param.getCreateTimeEnd()); } - List vipOrderList = thinkRechargeLogService.list(vipQueryWrapper); + List rechargeLogList = thinkRechargeLogService.list(vipQueryWrapper); List vipOrderVipList = new ArrayList<>(); - if (!vipOrderList.isEmpty()) { + List thinkVipList = thinkVipService.list(); + if (!rechargeLogList.isEmpty()) { Set vipIdSet = new HashSet<>(); - for (ThinkRechargeLog vipOrder : vipOrderList) { + for (ThinkRechargeLog vipOrder : rechargeLogList) { if (vipIdSet.contains(vipOrder.getVid())) continue; vipIdSet.add(vipOrder.getVid()); } vipOrderVipList = thinkUsersVipService.listByIds(vipIdSet); - for (ThinkRechargeLog vipOrder : vipOrderList) { + for (ThinkRechargeLog vipOrder : rechargeLogList) { for (ThinkUsersVip vip : vipOrderVipList) { if (vip.getId().equals(vipOrder.getVid())) { vipOrder.setThinkUsersVip(vip); + ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(vip.getVid())).findFirst().orElse(null); + vipOrder.setThinkVip(thinkVip); break; } } } } List hasCalRechargeList = new ArrayList<>(); + List hasCalCardList = new ArrayList<>(); for (int sid : sidList) { ThinkSite site = thinkSiteService.getById(sid); Map data = new HashMap<>(); @@ -1410,12 +1743,11 @@ public class ThinkOrderController extends BaseController { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ThinkOrder::getSid, sid) .in(ThinkOrder::getOrderStatus, 1, 2, 6) - .notIn(ThinkOrder::getPayType, Arrays.asList(6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17)) + .notIn(ThinkOrder::getPayType, Arrays.asList(6, 7, 8, 9, 10, 11, 13, 14, 16, 17)) .in(ThinkOrder::getPayStatus, 1); if (param.getCreateTimeStart() != null) { - - queryWrapper.ge(ThinkOrder::getCreateTime, param.getCreateTimeStart()); - queryWrapper.le(ThinkOrder::getCreateTime, param.getCreateTimeEnd()); + queryWrapper.ge(ThinkOrder::getPayTime, param.getCreateTimeStart()); + queryWrapper.le(ThinkOrder::getPayTime, param.getCreateTimeEnd()); } List orderList = thinkOrderService.list(queryWrapper); BigDecimal siteIncome = BigDecimal.ZERO; @@ -1460,15 +1792,15 @@ public class ThinkOrderController extends BaseController { totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); } } else if (order.getPayType().equals(4)) { - if (order.getOrderStatus().equals(6)) { + if (!order.getOrderStatus().equals(6)) { cashIncome = cashIncome.add(order.getPayPrice()); cashIncomeSum = cashIncomeSum.add(order.getPayPrice()); siteIncome = siteIncome.add(order.getPayPrice()); totalIncome = totalIncome.add(order.getPayPrice()); totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); } - } else { - if (order.getOrderStatus().equals(6)) { + } else if (order.getPayType().equals(2) || order.getPayType().equals(12)) { + if (!order.getOrderStatus().equals(6)) { otherIncome = otherIncome.add(order.getPayPrice()); otherIncomeTmp = otherIncomeTmp.add(order.getPayPrice()); otherIncomeSum = otherIncomeSum.add(order.getPayPrice()); @@ -1477,7 +1809,6 @@ public class ThinkOrderController extends BaseController { totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); } } - } } // 微信退款订单 @@ -1499,87 +1830,102 @@ public class ThinkOrderController extends BaseController { } // IC卡订单 - LambdaQueryWrapper cardQueryWrapper = new LambdaQueryWrapper<>(); - cardQueryWrapper.like(ThinkCard::getSid, sid) - .in(ThinkCard::getStatus, 1); - if (param.getCreateTimeStart() != null) { - cardQueryWrapper.ge(ThinkCard::getCreateTime, param.getCreateTimeStart()); - cardQueryWrapper.le(ThinkCard::getCreateTime, param.getCreateTimeEnd()); - } - List cardOrderList = thinkCardService.list(cardQueryWrapper); - if (!cardOrderList.isEmpty()) { - for (ThinkCard order : cardOrderList) { - if (order.getPayType().equals(1) || order.getPayType().equals(2) || order.getPayType().equals(4)) { - posIncomeSum = posIncomeSum.add(order.getPrice()); - posIncome = posIncome.add(order.getPrice()); - } else if (order.getPayType().equals(6)) { - businessIncomeSum = businessIncomeSum.add(order.getPrice()); - businessIncome = businessIncome.add(order.getPrice()); - } else if (order.getPayType().equals(3)) { - cashIncomeSum = cashIncomeSum.add(order.getPrice()); - cashIncome = cashIncome.add(order.getPrice()); - } else { - otherIncomeSum = otherIncomeSum.add(order.getPrice()); - otherIncome = otherIncome.add(order.getPrice()); - } - siteIncome = siteIncome.add(order.getPrice()); - totalIncome = totalIncome.add(order.getPrice()); + List thinkVipListInSite = thinkVipList.stream().filter(thinkVip -> thinkVip.getReportSid().equals(sid)).toList(); + if (!thinkVipListInSite.isEmpty()) { + + LambdaQueryWrapper cardQueryWrapper = new LambdaQueryWrapper<>(); + cardQueryWrapper.in(ThinkCard::getVid, thinkVipListInSite.stream().map(ThinkVip::getId).toList()) + .isNull(ThinkCard::getOriginCardCode) + .in(ThinkCard::getStatus, 1); + if (param.getCreateTimeStart() != null) { + cardQueryWrapper.ge(ThinkCard::getCreateTime, param.getCreateTimeStart()); + cardQueryWrapper.le(ThinkCard::getCreateTime, param.getCreateTimeEnd()); } - } - // VIP订单 - for (ThinkRechargeLog vipOrder : vipOrderList) { - if (vipOrder.getThinkUsersVip() != null && vipOrder.getThinkUsersVip().getSid().contains(String.valueOf(sid)) - && !hasCalRechargeList.contains(vipOrder.getId())) { - wechatIncomeSum = wechatIncomeSum.add(vipOrder.getMoney()); - wechatIncome = wechatIncome.add(vipOrder.getMoney()); - siteIncome = siteIncome.add(vipOrder.getMoney()); - totalIncome = totalIncome.add(vipOrder.getMoney()); - - if (vipOrder.getStatus().equals(3)) { - wechatRefund = wechatRefund.add(vipOrder.getMoney()); - wechatRefundSum = wechatRefundSum.add(vipOrder.getMoney()); - } - - hasCalRechargeList.add(vipOrder.getId()); - } - } - // IC续卡订单 - LambdaQueryWrapper renewCardQueryWrapper = new LambdaQueryWrapper<>(); - if (!hasCheckCodeList.isEmpty()) { - renewCardQueryWrapper.notIn(ThinkCardLog::getCode, hasCheckCodeList); - } - if (param.getCreateTimeStart() != null) { - renewCardQueryWrapper.ge(ThinkCardLog::getCreateTime, param.getCreateTimeStart()); - renewCardQueryWrapper.le(ThinkCardLog::getCreateTime, param.getCreateTimeEnd()); - } - List renewCardOrderAllList = thinkCardLogService.list(renewCardQueryWrapper); - if (!renewCardOrderAllList.isEmpty()) { - List codeList = renewCardOrderAllList.stream().map(ThinkCardLog::getCode).toList(); - - List thinkCardList = thinkCardService.list( - new LambdaQueryWrapper() - .in(ThinkCard::getCode, codeList) - ); - List checkCodeList = thinkCardList.stream().filter(t -> t.getSid().contains(String.valueOf(sid))) - .map(ThinkCard::getCode).toList(); - if (!checkCodeList.isEmpty()) { - hasCheckCodeList.addAll(checkCodeList); - List renewCardOrderList = thinkCardLogService.list( - new LambdaQueryWrapper() - .in(ThinkCardLog::getCode, checkCodeList) - .between(ThinkCardLog::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) - ); - if (!renewCardOrderList.isEmpty()) { - for (ThinkCardLog order : renewCardOrderList) { + List cardOrderList = thinkCardService.list(cardQueryWrapper); + if (!cardOrderList.isEmpty()) { + for (ThinkCard order : cardOrderList) { + if (!hasCalCardList.contains(order.getId())) { if (order.getPayType().equals(1) || order.getPayType().equals(2) || order.getPayType().equals(4)) { - posIncomeSum = posIncomeSum.add(order.getMoney()); - posIncome = posIncome.add(order.getMoney()); + posIncomeSum = posIncomeSum.add(order.getPrice()); + posIncome = posIncome.add(order.getPrice()); + } else if (order.getPayType().equals(6)) { + businessIncomeSum = businessIncomeSum.add(order.getPrice()); + businessIncome = businessIncome.add(order.getPrice()); } else if (order.getPayType().equals(3)) { - cashIncomeSum = cashIncomeSum.add(order.getMoney()); - cashIncome = cashIncome.add(order.getMoney()); + cashIncomeSum = cashIncomeSum.add(order.getPrice()); + cashIncome = cashIncome.add(order.getPrice()); + } else { + otherIncomeSum = otherIncomeSum.add(order.getPrice()); + otherIncome = otherIncome.add(order.getPrice()); + } + siteIncome = siteIncome.add(order.getPrice()); + totalIncome = totalIncome.add(order.getPrice()); + hasCalCardList.add(order.getId()); + } + } + } + // VIP订单 + for (ThinkRechargeLog vipOrder : rechargeLogList) { + if (vipOrder.getThinkVip() != null) { + if (vipOrder.getThinkUsersVip() != null && vipOrder.getThinkVip().getReportSid().equals(sid) + && !hasCalRechargeList.contains(vipOrder.getId())) { + wechatIncomeSum = wechatIncomeSum.add(vipOrder.getMoney()); + wechatIncome = wechatIncome.add(vipOrder.getMoney()); + siteIncome = siteIncome.add(vipOrder.getMoney()); + totalIncome = totalIncome.add(vipOrder.getMoney()); + + if (vipOrder.getStatus().equals(3)) { + wechatRefund = wechatRefund.add(vipOrder.getMoney()); + wechatRefundSum = wechatRefundSum.add(vipOrder.getMoney()); + } + + hasCalRechargeList.add(vipOrder.getId()); + } + } + } + // IC续卡订单 + LambdaQueryWrapper renewCardQueryWrapper = new LambdaQueryWrapper<>(); + if (!hasCheckCodeList.isEmpty()) { + renewCardQueryWrapper.notIn(ThinkCardLog::getCode, hasCheckCodeList); + } + if (param.getCreateTimeStart() != null) { + renewCardQueryWrapper.ge(ThinkCardLog::getCreateTime, param.getCreateTimeStart()); + renewCardQueryWrapper.le(ThinkCardLog::getCreateTime, param.getCreateTimeEnd()); + } + List renewCardOrderAllList = thinkCardLogService.list(renewCardQueryWrapper); + if (!renewCardOrderAllList.isEmpty()) { + List codeList = renewCardOrderAllList.stream().map(ThinkCardLog::getCode).toList(); + + List thinkCardList = thinkCardService.list( + new LambdaQueryWrapper() + .in(ThinkCard::getCode, codeList) + ); + List checkCodeList = new ArrayList<>(); + for (ThinkCard t : thinkCardList) { + ThinkVip thinkVip = thinkVipList.stream().filter(tV -> tV.getId().equals(t.getVid())).findFirst().orElse(null); + if (thinkVip != null && thinkVip.getReportSid().equals(sid)) { + checkCodeList.add(t.getCode()); + } + } + if (!checkCodeList.isEmpty()) { + hasCheckCodeList.addAll(checkCodeList); + List renewCardOrderList = thinkCardLogService.list( + new LambdaQueryWrapper() + .in(ThinkCardLog::getCode, checkCodeList) + .between(ThinkCardLog::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + ); + if (!renewCardOrderList.isEmpty()) { + for (ThinkCardLog order : renewCardOrderList) { + if (order.getPayType().equals(1) || order.getPayType().equals(2) || order.getPayType().equals(4)) { + posIncomeSum = posIncomeSum.add(order.getMoney()); + posIncome = posIncome.add(order.getMoney()); + } else if (order.getPayType().equals(3)) { + cashIncomeSum = cashIncomeSum.add(order.getMoney()); + cashIncome = cashIncome.add(order.getMoney()); + } + siteIncome = siteIncome.add(order.getMoney()); + totalIncome = totalIncome.add(order.getMoney()); } - siteIncome = siteIncome.add(order.getMoney()); - totalIncome = totalIncome.add(order.getMoney()); } } } @@ -1610,7 +1956,7 @@ public class ThinkOrderController extends BaseController { @PostMapping("/excel-data-for-card") public ApiResult excelDataForCard(@RequestBody ThinkOrderParam param) throws IOException { - Integer[] sidList = {32, 51, 50, 34, 33, 53, 31, 30, 37, 36, 28, 48, 49, 44}; + Integer[] sidList = {34, 33, 53, 31, 30, 32, 51, 50, 37, 36, 28, 48, 49, 44}; List> list = new ArrayList<>(); // 次卡 @@ -1621,6 +1967,7 @@ public class ThinkOrderController extends BaseController { BigDecimal chargeCardIncome = BigDecimal.ZERO; // 其他 BigDecimal otherIncome = BigDecimal.ZERO; + BigDecimal guestIncome = BigDecimal.ZERO; BigDecimal totalIncome = BigDecimal.ZERO; for (int sid : sidList) { ThinkSite site = thinkSiteService.getById(sid); @@ -1629,46 +1976,66 @@ public class ThinkOrderController extends BaseController { BigDecimal siteIncome = BigDecimal.ZERO; QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.select("sum(total_price) as total_income", "pay_type") + queryWrapper.select("sum(pay_price) as total_income", "pay_type") .eq("sid", sid) - .eq("pay_status", 1) - .notIn("pay_type", Arrays.asList(1, 5, 18, 4)); + .in("order_status", 1, 2) + .eq("pay_status", 1); + boolean getOrderData = true; if (param.getCreateTimeStart() != null) { - queryWrapper.ge("create_time", param.getCreateTimeStart()); - queryWrapper.le("create_time", param.getCreateTimeEnd()); - } - queryWrapper.groupBy("pay_type"); - List orderList = thinkOrderService.list(queryWrapper); - BigDecimal timeCardIncomeTmp = BigDecimal.ZERO; - BigDecimal monthCardIncomeTmp = BigDecimal.ZERO; - BigDecimal chargeCardIncomeTmp = BigDecimal.ZERO; - BigDecimal otherIncomeTmp = BigDecimal.ZERO; - - if (!orderList.isEmpty()) { - for (ThinkOrder order : orderList) { - if (order.getPayType().equals(8) || order.getPayType().equals(11)) { - timeCardIncome = timeCardIncome.add(order.getTotalIncome()); - timeCardIncomeTmp = timeCardIncomeTmp.add(order.getTotalIncome()); - } else if (Arrays.asList(6, 7, 9, 10, 16, 17).contains(order.getPayType())) { - monthCardIncome = monthCardIncome.add(order.getTotalIncome()); - monthCardIncomeTmp = monthCardIncomeTmp.add(order.getTotalIncome()); - } else if (Arrays.asList(13, 14).contains(order.getPayType())) { - chargeCardIncome = chargeCardIncome.add(order.getTotalIncome()); - chargeCardIncomeTmp = chargeCardIncomeTmp.add(order.getTotalIncome()); - } else if (Arrays.asList(2, 3, 12, 15).contains(order.getPayType())) { - otherIncome = otherIncome.add(order.getTotalIncome()); - otherIncomeTmp = otherIncomeTmp.add(order.getTotalIncome()); - } - siteIncome = siteIncome.add(order.getTotalIncome()); - totalIncome = totalIncome.add(order.getTotalIncome()); + LambdaQueryWrapper orderInfoQueryWrapper = new LambdaQueryWrapper() + .in(ThinkOrderInfo::getPayStatus, 1, 3) + .ge(ThinkOrderInfo::getStartTime, param.getCreateTimeStart()) + .le(ThinkOrderInfo::getStartTime, param.getCreateTimeEnd()); + orderInfoQueryWrapper.eq(ThinkOrderInfo::getSid, sid); + List orderInfoList = thinkOrderInfoService.list(orderInfoQueryWrapper); + if (orderInfoList != null && !orderInfoList.isEmpty()) { + Set orderIdList = orderInfoList.stream().map(ThinkOrderInfo::getOid).collect(Collectors.toSet()); + queryWrapper.in("id", orderIdList.stream().toList()); + } else { + getOrderData = false; } } - data.put("timeCardIncome", timeCardIncomeTmp); - data.put("monthCardIncome", monthCardIncomeTmp); - data.put("chargeCardIncome", chargeCardIncomeTmp); - data.put("otherIncome", otherIncomeTmp); - data.put("siteIncome", siteIncome); - list.add(data); + if (getOrderData) { + + queryWrapper.groupBy("pay_type"); + List orderList = thinkOrderService.list(queryWrapper); + BigDecimal timeCardIncomeTmp = BigDecimal.ZERO; + BigDecimal monthCardIncomeTmp = BigDecimal.ZERO; + BigDecimal chargeCardIncomeTmp = BigDecimal.ZERO; + BigDecimal otherIncomeTmp = BigDecimal.ZERO; + BigDecimal guestIncomeTmp = BigDecimal.ZERO; + + if (!orderList.isEmpty()) { + for (ThinkOrder order : orderList) { + if (order.getPayType().equals(8) || order.getPayType().equals(11)) { + timeCardIncome = timeCardIncome.add(order.getTotalIncome()); + timeCardIncomeTmp = timeCardIncomeTmp.add(order.getTotalIncome()); + } else if (Arrays.asList(6, 7, 9, 10, 16, 17).contains(order.getPayType())) { + monthCardIncome = monthCardIncome.add(order.getTotalIncome()); + monthCardIncomeTmp = monthCardIncomeTmp.add(order.getTotalIncome()); + } else if (Arrays.asList(13, 14).contains(order.getPayType())) { + chargeCardIncome = chargeCardIncome.add(order.getTotalIncome()); + chargeCardIncomeTmp = chargeCardIncomeTmp.add(order.getTotalIncome()); + } else if (Arrays.asList(2, 3, 12, 15).contains(order.getPayType())) { + otherIncome = otherIncome.add(order.getTotalIncome()); + otherIncomeTmp = otherIncomeTmp.add(order.getTotalIncome()); + } else { + guestIncome = guestIncome.add(order.getTotalIncome()); + guestIncomeTmp = guestIncomeTmp.add(order.getTotalIncome()); + } + siteIncome = siteIncome.add(order.getTotalIncome()); + totalIncome = totalIncome.add(order.getTotalIncome()); + } + } + data.put("sid", sid); + data.put("timeCardIncome", timeCardIncomeTmp); + data.put("monthCardIncome", monthCardIncomeTmp); + data.put("chargeCardIncome", chargeCardIncomeTmp); + data.put("otherIncome", otherIncomeTmp); + data.put("siteIncome", siteIncome); + data.put("guestIncome", guestIncomeTmp); + list.add(data); + } } Map data = new HashMap<>(); data.put("siteName", "合计"); @@ -1676,6 +2043,7 @@ public class ThinkOrderController extends BaseController { data.put("monthCardIncome", monthCardIncome); data.put("chargeCardIncome", chargeCardIncome); data.put("otherIncome", otherIncome); + data.put("guestIncome", guestIncome); data.put("siteIncome", totalIncome); list.add(data); @@ -1690,15 +2058,49 @@ public class ThinkOrderController extends BaseController { List icCardList = new ArrayList<>(Arrays.asList(9, 10, 11, 14, 17)); List vipCardList = new ArrayList<>(Arrays.asList(6, 7, 8, 13, 16)); List> result = new ArrayList<>(); - // IC卡 - List cardList = thinkCardService.list( - new LambdaQueryWrapper() - .select(ThinkCard::getName, ThinkCard::getVid) - .eq(ThinkCard::getStatus, 1) - .like(ThinkCard::getSid, param.getSid()) - .between(ThinkCard::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) - .groupBy(ThinkCard::getVid) - ); + List allThinkVipList = thinkVipService.listRel(new ThinkVipParam() {{ + setReportSid(param.getSid()); + }}); + List cardList = new ArrayList<>(); + List renewCardList = new ArrayList<>(); + if (!allThinkVipList.isEmpty()) { + // IC卡 + cardList = thinkCardService.list( + new LambdaQueryWrapper() + .isNull(ThinkCard::getOriginCardCode) + .select(ThinkCard::getName, ThinkCard::getVid) + .eq(ThinkCard::getStatus, 1) + .in(ThinkCard::getVid, allThinkVipList.stream().map(ThinkVip::getId).toList()) + .between(ThinkCard::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .groupBy(ThinkCard::getVid) + ); + // IC续卡 + List cardLogList = thinkCardLogService.list( + new LambdaQueryWrapper() + .between(ThinkCardLog::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + ); + if (!cardLogList.isEmpty()) { + List codeList = new ArrayList<>(); + for (ThinkCardLog cardLog : cardLogList) { + codeList.add(cardLog.getCode()); + } + renewCardList = thinkCardService.listByCodeList(codeList); + for (ThinkCard card : renewCardList) { + ThinkVip thinkVip = allThinkVipList.stream().filter(v -> v.getId().equals(card.getVid())).findFirst().orElse(null); + if (thinkVip != null) { + for (ThinkCardLog cardLog : cardLogList) { + if (card.getCode().equals(cardLog.getCode())) { + card.setCardLog(cardLog); + } + } + ThinkCard hasCard = cardList.stream().filter(c -> c.getVid().equals(card.getVid())).findFirst().orElse(null); + if (hasCard == null) { + cardList.add(card); + } + } + } + } + } BigDecimal totalIncomeIC = BigDecimal.ZERO; BigDecimal cashIncomeIC = BigDecimal.ZERO; BigDecimal bankIncomeIC = BigDecimal.ZERO; @@ -1706,6 +2108,7 @@ public class ThinkOrderController extends BaseController { BigDecimal alipayIncomeIC = BigDecimal.ZERO; BigDecimal giftIncomeIC = BigDecimal.ZERO; BigDecimal publicIncomeIC = BigDecimal.ZERO; + BigDecimal douyinIncomeIC = BigDecimal.ZERO; int numIC = 0; if (!cardList.isEmpty()) { for (int i = 0; i < cardList.size(); i++) { @@ -1724,6 +2127,7 @@ public class ThinkOrderController extends BaseController { BigDecimal alipayIncome = BigDecimal.ZERO; BigDecimal giftIncome = BigDecimal.ZERO; BigDecimal publicIncome = BigDecimal.ZERO; + BigDecimal douyinIncome = BigDecimal.ZERO; if (!list.isEmpty()) { data.put("name", card.getName()); @@ -1740,22 +2144,12 @@ public class ThinkOrderController extends BaseController { bankIncome = bankIncome.add(card1.getPrice()); } else if (card1.getPayType().equals(6)) { publicIncome = publicIncome.add(card1.getPrice()); + } else if (card1.getPayType().equals(8)) { + douyinIncome = douyinIncome.add(card1.getPrice()); } else { giftIncome = giftIncome.add(card1.getPrice()); } } - data.put("wechatIncome", wechatIncome); - data.put("alipayIncome", alipayIncome); - data.put("cashIncome", cashIncome); - data.put("bankIncome", bankIncome); - data.put("giftIncome", giftIncome); - data.put("publicIncome", publicIncome); - data.put("totalIncome", totalIncome); - data.put("group", "IC卡"); - data.put("rowspan", i == 0 ? cardList.size() + 1 : 0); - data.put("colspan", i == 0 ? 1 : 0); - if (i == 0) data.put("isFirst", true); - result.add(data); totalIncomeIC = totalIncomeIC.add(totalIncome); cashIncomeIC = cashIncomeIC.add(cashIncome); @@ -1764,7 +2158,99 @@ public class ThinkOrderController extends BaseController { alipayIncomeIC = alipayIncomeIC.add(alipayIncome); giftIncomeIC = giftIncomeIC.add(giftIncome); publicIncomeIC = publicIncomeIC.add(publicIncome); + douyinIncomeIC = douyinIncomeIC.add(douyinIncome); numIC += list.size(); + + data.put("wechatIncome", wechatIncome); + data.put("alipayIncome", alipayIncome); + data.put("cashIncome", cashIncome); + data.put("bankIncome", bankIncome); + data.put("giftIncome", giftIncome); + data.put("publicIncome", publicIncome); + data.put("totalIncome", totalIncome); + data.put("douyinIncome", douyinIncome); + data.put("group", "IC卡"); + data.put("rowspan", i == 0 ? cardList.size() + 1 : 0); + data.put("colspan", i == 0 ? 1 : 0); + if (i == 0) data.put("isFirst", true); + result.add(data); + + } else { + data.put("name", card.getName()); + data.put("num", list.size()); + data.put("vid", card.getVid()); + data.put("wechatIncome", BigDecimal.ZERO); + data.put("alipayIncome", BigDecimal.ZERO); + data.put("cashIncome", BigDecimal.ZERO); + data.put("bankIncome", BigDecimal.ZERO); + data.put("giftIncome", BigDecimal.ZERO); + data.put("publicIncome", BigDecimal.ZERO); + data.put("totalIncome", BigDecimal.ZERO); + data.put("otherIncome", BigDecimal.ZERO); + data.put("douyinIncome", BigDecimal.ZERO); + data.put("group", "IC卡"); + data.put("rowspan", i == 0 ? cardList.size() + 1 : 0); + data.put("colspan", i == 0 ? 1 : 0); + if (i == 0) data.put("isFirst", true); + result.add(data); + } + } + + if (!result.isEmpty() && !renewCardList.isEmpty()) { + for (Map data : result) { + Integer vid = (Integer) data.get("vid"); + List filterCardList = renewCardList.stream() + .filter(card -> card.getVid().equals(vid)).toList(); + BigDecimal totalIncome = BigDecimal.ZERO; +// BigDecimal totalIncome = filterCardList.stream().map(ThinkCard::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal wechatIncome = (BigDecimal) data.get("wechatIncome"); + BigDecimal alipayIncome = (BigDecimal) data.get("alipayIncome"); + BigDecimal cashIncome = (BigDecimal) data.get("cashIncome"); + BigDecimal bankIncome = (BigDecimal) data.get("bankIncome"); + BigDecimal publicIncome = (BigDecimal) data.get("publicIncome"); + BigDecimal giftIncome = (BigDecimal) data.get("giftIncome"); + BigDecimal douyinIncome = (BigDecimal) data.get("douyinIncome"); + int num = (Integer) data.get("num"); + num += filterCardList.size(); + if (!filterCardList.isEmpty()) { + for (ThinkCard card1 : filterCardList) { + if (card1.getCardLog() != null) { + if (card1.getCardLog().getPayType().equals(1)) { + wechatIncome = wechatIncome.add(card1.getCardLog().getMoney()); + } else if (card1.getCardLog().getPayType().equals(2)) { + alipayIncome = alipayIncome.add(card1.getCardLog().getMoney()); + } else if (card1.getCardLog().getPayType().equals(3)) { + cashIncome = cashIncome.add(card1.getCardLog().getMoney()); + } else if (card1.getCardLog().getPayType().equals(4) || card1.getCardLog().getPayType().equals(5)) { + bankIncome = bankIncome.add(card1.getCardLog().getMoney()); + } else if (card1.getCardLog().getPayType().equals(6)) { + publicIncome = publicIncome.add(card1.getCardLog().getMoney()); + } else if (card1.getCardLog().getPayType().equals(8)) { + douyinIncome = douyinIncome.add(card1.getCardLog().getMoney()); + } else { + giftIncome = giftIncome.add(card1.getCardLog().getMoney()); + } + totalIncome = totalIncome.add(card1.getCardLog().getMoney()); + } + } + } + totalIncome = totalIncome.add((BigDecimal) data.get("totalIncome")); + data.put("num", num); + data.put("wechatIncome", wechatIncome); + data.put("alipayIncome", alipayIncome); + data.put("cashIncome", cashIncome); + data.put("bankIncome", bankIncome); + data.put("publicIncome", publicIncome); + data.put("giftIncome", giftIncome); + data.put("douyinIncome", douyinIncome); + data.put("totalIncome", totalIncome); + totalIncomeIC = totalIncomeIC.add(totalIncome); + cashIncomeIC = cashIncomeIC.add(cashIncome); + bankIncomeIC = bankIncomeIC.add(bankIncome); + wechatIncomeIC = wechatIncomeIC.add(wechatIncome); + douyinIncomeIC = douyinIncomeIC.add(douyinIncome); + alipayIncomeIC = alipayIncomeIC.add(alipayIncome); + numIC += filterCardList.size(); } } @@ -1777,6 +2263,7 @@ public class ThinkOrderController extends BaseController { ICTotal.put("bankIncome", bankIncomeIC); ICTotal.put("giftIncome", giftIncomeIC); ICTotal.put("publicIncome", publicIncomeIC); + ICTotal.put("douyinIncome", douyinIncomeIC); ICTotal.put("num", numIC); ICTotal.put("group", "IC卡"); ICTotal.put("rowspan", 0); @@ -1791,14 +2278,18 @@ public class ThinkOrderController extends BaseController { BigDecimal alipayIncomeVIP = BigDecimal.ZERO; BigDecimal giftIncomeVIP = BigDecimal.ZERO; BigDecimal publicIncomeVIP = BigDecimal.ZERO; + BigDecimal douyinIncomeVIP = BigDecimal.ZERO; int numVIP = 0; - List vipList = thinkUsersVipService.list( - new LambdaQueryWrapper() - .eq(ThinkUsersVip::getStatus, 1) - .like(ThinkUsersVip::getSid, param.getSid()) - .between(ThinkUsersVip::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) - .groupBy(ThinkUsersVip::getVid) - ); + List vipList = new ArrayList<>(); + if (!allThinkVipList.isEmpty()) { + vipList = thinkUsersVipService.list( + new LambdaQueryWrapper() + .eq(ThinkUsersVip::getStatus, 1) + .in(ThinkUsersVip::getVid, allThinkVipList.stream().map(ThinkVip::getId).toList()) + .between(ThinkUsersVip::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .groupBy(ThinkUsersVip::getVid) + ); + } if (!vipList.isEmpty()) { for (int i = 0; i < vipList.size(); i++) { ThinkUsersVip card = vipList.get(i); @@ -1819,6 +2310,7 @@ public class ThinkOrderController extends BaseController { BigDecimal alipayIncome = BigDecimal.ZERO; BigDecimal giftIncome = BigDecimal.ZERO; BigDecimal publicIncome = BigDecimal.ZERO; + BigDecimal douyinIncome = BigDecimal.ZERO; for (ThinkUsersVip card1 : list) { wechatIncome = wechatIncome.add(card1.getPrice()); @@ -1831,6 +2323,7 @@ public class ThinkOrderController extends BaseController { data.put("giftIncome", giftIncome); data.put("publicIncome", publicIncome); data.put("totalIncome", totalIncome); + data.put("douyinIncome", douyinIncome); data.put("group", "VIP卡"); data.put("rowspan", i == 0 ? vipList.size() + 1 : 0); data.put("colspan", i == 0 ? 1 : 0); @@ -1851,6 +2344,7 @@ public class ThinkOrderController extends BaseController { VIPTotal.put("bankIncome", bankIncomeVIP); VIPTotal.put("giftIncome", giftIncomeVIP); VIPTotal.put("publicIncome", publicIncomeVIP); + VIPTotal.put("douyinIncome", douyinIncomeVIP); VIPTotal.put("num", numVIP); VIPTotal.put("group", "VIP卡"); VIPTotal.put("rowspan", 0); @@ -1883,13 +2377,20 @@ public class ThinkOrderController extends BaseController { int numOnlineChild = 0; - List list = thinkOrderService.list( - new LambdaQueryWrapper() - .eq(ThinkOrder::getPayStatus, 1) - .in(ThinkOrder::getOrderStatus, 1, 2) - .eq(ThinkOrder::getSid, param.getSid()) - .between(ThinkOrder::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + List thinkOrderInfoListForOrder = thinkOrderInfoService.list( + new LambdaQueryWrapper() + .eq(ThinkOrderInfo::getSid, param.getSid()) + .in(ThinkOrderInfo::getPayStatus, 1, 3) + .between(ThinkOrderInfo::getStartTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) ); + LambdaQueryWrapper orderLambdaQueryWrapper = new LambdaQueryWrapper() + .eq(ThinkOrder::getPayStatus, 1) + .in(ThinkOrder::getOrderStatus, 1, 2) + .eq(ThinkOrder::getSid, param.getSid()); + if (thinkOrderInfoListForOrder != null && !thinkOrderInfoListForOrder.isEmpty()) { + orderLambdaQueryWrapper.in(ThinkOrder::getId, thinkOrderInfoListForOrder.stream().map(ThinkOrderInfo::getOid).toList()); + } + List list = thinkOrderService.list(orderLambdaQueryWrapper); if (!list.isEmpty()) { BigDecimal totalIncomeAdult = BigDecimal.ZERO; BigDecimal wechatIncomeAdult = BigDecimal.ZERO; @@ -1962,163 +2463,81 @@ public class ThinkOrderController extends BaseController { for (ThinkOrder order : list) { List thinkOrderInfoList = thinkOrderInfoAllList.stream() .filter(info -> info.getOid().equals(order.getId())).toList(); + BigDecimal avgPayPrice = order.getPayPrice().divide(new BigDecimal(thinkOrderInfoList.size()), 2, RoundingMode.HALF_UP); for (ThinkOrderInfo info : thinkOrderInfoList) { if (icCardList.contains(order.getPayType())) { - BigDecimal amount = BigDecimal.ZERO; - ThinkCard thinkCard = thinkCardList.stream() - .filter(card -> card.getId().equals(order.getCid()) || card.getCode().equals(order.getCode())) - .findFirst().orElse(null); - if (thinkCard != null) { - ThinkVip thinkVip = thinkVipList.stream() - .filter(vip -> vip.getId().equals(thinkCard.getVid())) - .findFirst().orElse(null); - if (thinkVip != null) { - if (thinkVip.getMode().equals(0)) { - switch (order.getPayType()) { - case 17: - case 9: { - amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getMonth() * 365), 2, RoundingMode.HALF_UP); - } - break; - case 10: { - amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getTerm() * 30), 2, RoundingMode.HALF_UP); - } - break; - case 11: { - amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getCount()), 2, RoundingMode.HALF_UP); - } - break; - case 14: { - amount = order.getPayPrice(); - } - break; - } - } else { - long secDiff = thinkCard.getExpireTime() - thinkCard.getCreateTime(); - long day = secDiff / (24 * 3600); - amount = thinkCard.getPrice().divide(new BigDecimal(day), 2, RoundingMode.HALF_UP); - } - } - } if (order.getAid() != 0) { if (info.getAdultNum() > 0) { - incomeByCardAdultOffline = incomeByCardAdultOffline.add(amount); + incomeByCardAdultOffline = incomeByCardAdultOffline.add(avgPayPrice); numOfflineAdult += 1; } else { - incomeByCardChildOffline = incomeByCardChildOffline.add(amount); + incomeByCardChildOffline = incomeByCardChildOffline.add(avgPayPrice); numOfflineChild += 1; } } else { if (info.getAdultNum() > 0) { - incomeByCardAdult = incomeByCardAdult.add(amount); + incomeByCardAdult = incomeByCardAdult.add(avgPayPrice); numOnlineAdult += 1; } else { - incomeByCardChild = incomeByCardChild.add(amount); + incomeByCardChild = incomeByCardChild.add(avgPayPrice); numOnlineChild += 1; } } } else if (vipCardList.contains(order.getPayType())) { - BigDecimal amount = BigDecimal.ZERO; - ThinkUsersVip thinkCard = thinkUsersVipList.stream() - .filter(card -> card.getId().equals(order.getVid())) - .findFirst().orElse(null); - if (thinkCard != null) { - ThinkVip thinkVip = thinkVipList.stream() - .filter(vip -> vip.getId().equals(thinkCard.getVid())) - .findFirst().orElse(null); - if (thinkVip != null) { - if (thinkVip.getMode().equals(0)) { - switch (order.getPayType()) { - case 16: - case 6: { - if (!thinkCard.getMonth().equals(0)) - amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getMonth() * 30), 2, RoundingMode.HALF_UP); - } - break; - case 7: { - if (!thinkCard.getTerm().equals(0)) - amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getTerm() * 365), 2, RoundingMode.HALF_UP); - } - break; - case 8: { - amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getCount()), 2, RoundingMode.HALF_UP); - } - break; - case 13: { - amount = order.getPayPrice(); - } - break; - } - } else { - long secDiff = thinkCard.getExpireTime() - thinkCard.getCreateTime(); - long day = secDiff / (24 * 3600); - amount = thinkCard.getPrice().divide(new BigDecimal(day), 2, RoundingMode.HALF_UP); - } - } - } if (order.getAid() != 0) { if (info.getAdultNum() > 0) { - incomeByCardAdultOffline = incomeByCardAdultOffline.add(amount); - numOfflineAdult += 1; + incomeByCardAdultOffline = incomeByCardAdultOffline.add(avgPayPrice); + numOfflineAdult += info.getAdultNum(); } else { - incomeByCardChildOffline = incomeByCardChildOffline.add(amount); - numOfflineChild += 1; + incomeByCardChildOffline = incomeByCardChildOffline.add(avgPayPrice); + numOfflineChild += info.getChildrenNum(); } } else { if (info.getAdultNum() > 0) { - incomeByCardAdult = incomeByCardAdult.add(amount); - numOnlineAdult += 1; + incomeByCardAdult = incomeByCardAdult.add(avgPayPrice); + numOnlineAdult += info.getAdultNum(); } else { - incomeByCardChild = incomeByCardChild.add(amount); - numOnlineChild += 1; + incomeByCardChild = incomeByCardChild.add(avgPayPrice); + numOnlineChild += info.getChildrenNum(); } } } else { // 线下 if (order.getAid() != 0) { if (info.getAdultNum() > 0) { + numOfflineAdult += info.getAdultNum(); if (order.getPayType().equals(1)) { - wechatIncomeAdultOffline = wechatIncomeAdultOffline.add(order.getTotalPrice()); - numOfflineAdult += 1; + wechatIncomeAdultOffline = wechatIncomeAdultOffline.add(avgPayPrice); } else if (order.getPayType().equals(3)) { - alipayIncomeAdultOffline = alipayIncomeAdultOffline.add(order.getTotalPrice()); - numOfflineAdult += 1; + alipayIncomeAdultOffline = alipayIncomeAdultOffline.add(avgPayPrice); } else if (order.getPayType().equals(4)) { - cashIncomeAdultOffline = cashIncomeAdultOffline.add(order.getTotalPrice()); - numOfflineAdult += 1; + cashIncomeAdultOffline = cashIncomeAdultOffline.add(avgPayPrice); } else if (order.getPayType().equals(5)) { - bankIncomeAdultOffline = bankIncomeAdultOffline.add(order.getTotalPrice()); - numOfflineAdult += 1; + bankIncomeAdultOffline = bankIncomeAdultOffline.add(avgPayPrice); } else if (order.getPayType().equals(12)) { - giftIncomeAdultOffline = giftIncomeAdultOffline.add(order.getTotalPrice()); - numOfflineAdult += 1; + giftIncomeAdultOffline = giftIncomeAdultOffline.add(avgPayPrice); } } else if (info.getChildrenNum() > 0) { if (order.getPayType().equals(1)) { - wechatIncomeChildOffline = wechatIncomeChildOffline.add(order.getTotalPrice()); - numOfflineChild += 1; + wechatIncomeChildOffline = wechatIncomeChildOffline.add(avgPayPrice); } else if (order.getPayType().equals(3)) { - alipayIncomeChildOffline = alipayIncomeChildOffline.add(order.getTotalPrice()); - numOfflineChild += 1; + alipayIncomeChildOffline = alipayIncomeChildOffline.add(avgPayPrice); } else if (order.getPayType().equals(4)) { - cashIncomeChildOffline = cashIncomeChildOffline.add(order.getTotalPrice()); - numOfflineChild += 1; + cashIncomeChildOffline = cashIncomeChildOffline.add(avgPayPrice); } else if (order.getPayType().equals(5)) { - bankIncomeChildOffline = bankIncomeChildOffline.add(order.getTotalPrice()); - numOfflineChild += 1; + bankIncomeChildOffline = bankIncomeChildOffline.add(avgPayPrice); } else if (order.getPayType().equals(12)) { - giftIncomeChildOffline = giftIncomeChildOffline.add(order.getTotalPrice()); - numOfflineChild += 1; + giftIncomeChildOffline = giftIncomeChildOffline.add(avgPayPrice); } } } else { if (info.getAdultNum() > 0) { - wechatIncomeAdult = wechatIncomeAdult.add(order.getTotalPrice()); - numOnlineAdult += 1; + wechatIncomeAdult = wechatIncomeAdult.add(avgPayPrice); + numOnlineAdult += info.getAdultNum(); } else if (info.getChildrenNum() > 0) { - wechatIncomeChild = wechatIncomeChild.add(order.getTotalPrice()); - numOnlineChild += 1; + wechatIncomeChild = wechatIncomeChild.add(avgPayPrice); + numOnlineChild += info.getChildrenNum(); } } } @@ -2133,7 +2552,8 @@ public class ThinkOrderController extends BaseController { Map data = new HashMap<>(); data.put("name", "小程序"); data.put("group", "成人票"); - data.put("totalIncome", incomeByCardAdult); + data.put("totalIncome", incomeByCardAdult.add(wechatIncomeAdult)); + data.put("cardIncome", incomeByCardAdult); data.put("wechatIncome", wechatIncomeAdult); data.put("alipayIncome", BigDecimal.ZERO); data.put("cashIncome", BigDecimal.ZERO); @@ -2150,7 +2570,9 @@ public class ThinkOrderController extends BaseController { Map data1 = new HashMap<>(); data1.put("name", "现场"); data1.put("group", "成人票"); - data1.put("totalIncome", incomeByCardAdultOffline); + data1.put("totalIncome", incomeByCardAdultOffline.add(wechatIncomeAdultOffline).add(alipayIncomeAdultOffline) + .add(cashIncomeAdultOffline).add(bankIncomeAdultOffline).add(giftIncomeAdultOffline)); + data1.put("cardIncome", incomeByCardAdultOffline); data1.put("wechatIncome", wechatIncomeAdultOffline); data1.put("alipayIncome", alipayIncomeAdultOffline); data1.put("cashIncome", cashIncomeAdultOffline); @@ -2158,6 +2580,7 @@ public class ThinkOrderController extends BaseController { data1.put("giftIncome", giftIncomeAdultOffline); data1.put("num", numOfflineAdult); data1.put("publicIncome", BigDecimal.ZERO); + data1.put("douyinIncome", BigDecimal.ZERO); data1.put("rowspan", 0); data1.put("colspan", 0); result.add(data1); @@ -2177,7 +2600,9 @@ public class ThinkOrderController extends BaseController { Map data2 = new HashMap<>(); data2.put("name", "消费合计"); data2.put("group", "成人票"); - data2.put("totalIncome", incomeByCardAdult.add(incomeByCardAdultOffline)); + data2.put("totalIncome", incomeByCardAdult.add(incomeByCardAdultOffline).add(wechatIncomeAdultOffline).add(wechatIncomeAdult) + .add(alipayIncomeAdultOffline).add(cashIncomeAdultOffline).add(bankIncomeAdultOffline).add(giftIncomeAdultOffline)); + data2.put("cardIncome", incomeByCardAdult.add(incomeByCardAdultOffline)); data2.put("wechatIncome", wechatIncomeAdultOffline.add(wechatIncomeAdult)); data2.put("alipayIncome", alipayIncomeAdultOffline); data2.put("cashIncome", cashIncomeAdultOffline); @@ -2185,6 +2610,7 @@ public class ThinkOrderController extends BaseController { data2.put("giftIncome", giftIncomeAdultOffline); data2.put("num", numOnlineAdult + numOfflineAdult); data2.put("publicIncome", BigDecimal.ZERO); + data2.put("douyinIncome", BigDecimal.ZERO); data2.put("rowspan", 0); data2.put("colspan", 0); result.add(data2); @@ -2195,12 +2621,14 @@ public class ThinkOrderController extends BaseController { Map data3 = new HashMap<>(); data3.put("name", "小程序"); data3.put("group", "儿童票"); - data3.put("totalIncome", incomeByCardChild); + data3.put("totalIncome", incomeByCardChild.add(totalIncomeOnlineChild)); + data3.put("cardIncome", incomeByCardChild); data3.put("wechatIncome", totalIncomeOnlineChild); data3.put("alipayIncome", BigDecimal.ZERO); data3.put("cashIncome", BigDecimal.ZERO); data3.put("bankIncome", BigDecimal.ZERO); data3.put("giftIncome", BigDecimal.ZERO); + data3.put("douyinIncome", BigDecimal.ZERO); data3.put("num", numOnlineChild); data3.put("publicIncome", BigDecimal.ZERO); data3.put("rowspan", 3); @@ -2211,7 +2639,9 @@ public class ThinkOrderController extends BaseController { Map data4 = new HashMap<>(); data4.put("name", "现场"); data4.put("group", "儿童票"); - data4.put("totalIncome", incomeByCardChildOffline); + data4.put("totalIncome", incomeByCardChildOffline.add(wechatIncomeChildOffline).add(alipayIncomeChildOffline) + .add(cashIncomeChildOffline).add(bankIncomeChildOffline).add(giftIncomeChildOffline)); + data4.put("cardIncome", incomeByCardChildOffline); data4.put("wechatIncome", wechatIncomeChildOffline); data4.put("alipayIncome", alipayIncomeChildOffline); data4.put("cashIncome", cashIncomeChildOffline); @@ -2219,6 +2649,7 @@ public class ThinkOrderController extends BaseController { data4.put("giftIncome", giftIncomeChildOffline); data4.put("num", numOfflineChild); data4.put("publicIncome", BigDecimal.ZERO); + data4.put("douyinIncome", BigDecimal.ZERO); data4.put("rowspan", 0); data4.put("colspan", 0); result.add(data4); @@ -2226,14 +2657,18 @@ public class ThinkOrderController extends BaseController { Map data5 = new HashMap<>(); data5.put("name", "消费合计"); data5.put("group", "儿童票"); - data5.put("totalIncome", incomeByCardChild.add(incomeByCardChildOffline)); + data5.put("totalIncome", incomeByCardChild.add(incomeByCardChildOffline).add(totalIncomeOnlineChild) + .add(wechatIncomeChildOffline).add(alipayIncomeChildOffline).add(cashIncomeChildOffline) + .add(bankIncomeChildOffline).add(giftIncomeChildOffline)); + data5.put("cardIncome", incomeByCardChild.add(incomeByCardChildOffline)); data5.put("wechatIncome", totalIncomeOnlineChild.add(wechatIncomeChildOffline)); data5.put("alipayIncome", alipayIncomeChildOffline); data5.put("cashIncome", cashIncomeChildOffline); data5.put("bankIncome", bankIncomeChildOffline); data5.put("giftIncome", giftIncomeChildOffline); - data5.put("num", numOnlineChild + numOnlineChild); + data5.put("num", numOnlineChild + numOfflineChild); data5.put("publicIncome", BigDecimal.ZERO); + data5.put("douyinIncome", BigDecimal.ZERO); data5.put("rowspan", 0); data5.put("colspan", 0); result.add(data5); @@ -2245,7 +2680,7 @@ public class ThinkOrderController extends BaseController { SXSSFWorkbook workbook = new SXSSFWorkbook(); SXSSFSheet sheet = workbook.createSheet(); sheet.setColumnWidth(0, 15 * 256); - String[] headers = {"卡类型", "卡类型", "销售数量", "总金额", "现金支付", "银行卡支付", "微信支付", "支付宝支付", "对公支付", "赠送数量"}; + String[] headers = {"卡类型", "卡类型", "销售数量", "总金额", "卡支付金额", "现金支付", "银行卡支付", "微信支付", "支付宝支付", "对公支付", "赠送数量"}; SXSSFRow row = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { row.createCell(i).setCellValue(headers[i]); @@ -2269,12 +2704,15 @@ public class ThinkOrderController extends BaseController { SXSSFRow row0 = sheet.getRow(rowNum); row0.getCell(1).setCellValue((String) map.get("name")); row0.getCell(2).setCellValue((Integer) map.get("num")); - row0.getCell(3).setCellValue(String.valueOf((BigDecimal) map.get("cashIncome"))); - row0.getCell(4).setCellValue(String.valueOf((BigDecimal) map.get("bankIncome"))); + row0.getCell(3).setCellValue(String.valueOf((BigDecimal) map.get("totalIncome"))); + row0.getCell(4).setCellValue(String.valueOf((BigDecimal) map.get("cardIncome"))); row0.getCell(5).setCellValue(String.valueOf((BigDecimal) map.get("wechatIncome"))); - row0.getCell(6).setCellValue(String.valueOf((BigDecimal) map.get("alipayIncome"))); - row0.getCell(7).setCellValue(String.valueOf((BigDecimal) map.get("publicIncome"))); - row0.getCell(8).setCellValue(String.valueOf((BigDecimal) map.get("giftIncome"))); + row0.getCell(6).setCellValue(String.valueOf((BigDecimal) map.get("cashIncome"))); + row0.getCell(7).setCellValue(String.valueOf((BigDecimal) map.get("bankIncome"))); + row0.getCell(8).setCellValue(String.valueOf((BigDecimal) map.get("wechatIncome"))); + row0.getCell(9).setCellValue(String.valueOf((BigDecimal) map.get("alipayIncome"))); + row0.getCell(10).setCellValue(String.valueOf((BigDecimal) map.get("publicIncome"))); + row0.getCell(11).setCellValue(String.valueOf((BigDecimal) map.get("giftIncome"))); rowNum += 1; } FileOutputStream output = new FileOutputStream(path); @@ -2288,9 +2726,7 @@ public class ThinkOrderController extends BaseController { fileResult.setUrl(config.getServerUrl() + "/file/" + filename); return success(fileResult); } - return - - success(result); + return success(result); } @PostMapping("/data-list-for-front") @@ -2338,4 +2774,11 @@ public class ThinkOrderController extends BaseController { } return success(); } + + private void clearSiteRedis(List thinkOrderInfoList) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); + } + } + } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderOffCheckController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderOffCheckController.java new file mode 100644 index 0000000..941c216 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderOffCheckController.java @@ -0,0 +1,145 @@ +package com.gxwebsoft.think.controller; + +import com.gxwebsoft.common.core.security.JwtUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.Organization; +import com.gxwebsoft.think.entity.ThinkOrder; +import com.gxwebsoft.think.service.ThinkOrderOffCheckService; +import com.gxwebsoft.think.entity.ThinkOrderOffCheck; +import com.gxwebsoft.think.param.ThinkOrderOffCheckParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.think.service.ThinkOrderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 折扣审核控制器 + * + * @author 科技小王子 + * @since 2025-05-26 09:42:46 + */ +@Api(tags = "折扣审核管理") +@RestController +@RequestMapping("/api/think/think-order-off-check") +public class ThinkOrderOffCheckController extends BaseController { + @Resource + private ThinkOrderOffCheckService thinkOrderOffCheckService; + @Resource + private ThinkOrderService thinkOrderService; + + @ApiOperation("分页查询折扣审核") + @GetMapping("/page") + public ApiResult> page(ThinkOrderOffCheckParam param) { + // 使用关联查询 + return success(thinkOrderOffCheckService.pageRel(param)); + } + + @ApiOperation("查询全部折扣审核") + @GetMapping() + public ApiResult> list(ThinkOrderOffCheckParam param) { + param.setCheckUid(getLoginUserId()); + // 使用关联查询 + return success(thinkOrderOffCheckService.listRel(param)); + } + + @PreAuthorize("hasAuthority('think:thinkOrderOffCheck:list')") + @ApiOperation("根据id查询折扣审核") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(thinkOrderOffCheckService.getByIdRel(id)); + } + + @ApiOperation("添加折扣审核") + @PostMapping() + public ApiResult save(@RequestBody ThinkOrderOffCheck thinkOrderOffCheck, HttpServletRequest request) { + User loginUser = getLoginUser(); + if (loginUser.getOrganizationId() == null) return fail("该用户未配置部门,无法申请"); + RequestUtil requestUtil = new RequestUtil(); + String accessToken = JwtUtil.getAccessToken(request); + requestUtil.setAccessToken(accessToken); + requestUtil.setTenantId("10150"); + // 部门经理 + User orgAdmin = requestUtil.getOrgAdmin(loginUser.getOrganizationId()); + if (orgAdmin == null) return fail("未配置部门经理,无法申请"); + thinkOrderOffCheck.setCheckUid(orgAdmin.getUserId()); + thinkOrderOffCheck.setUserId(loginUser.getUserId()); + + ThinkOrder thinkOrder = thinkOrderService.getById(thinkOrderOffCheck.getOid()); + thinkOrder.setReqOffStatus(1); + thinkOrderService.updateById(thinkOrder); + if (thinkOrderOffCheckService.save(thinkOrderOffCheck)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改折扣审核") + @PutMapping() + public ApiResult update(@RequestBody ThinkOrderOffCheck thinkOrderOffCheck) { + if (thinkOrderOffCheckService.updateById(thinkOrderOffCheck)) { + ThinkOrderOffCheck thinkOrderOffCheck1 = thinkOrderOffCheckService.getById(thinkOrderOffCheck.getId()); + ThinkOrder thinkOrder = thinkOrderService.getById(thinkOrderOffCheck1.getOid()); + if (thinkOrderOffCheck.getStatus().equals(1)) { + thinkOrder.setReqOffStatus(2); + thinkOrder.setPayPrice(thinkOrderOffCheck1.getOffAmount()); + thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(thinkOrderOffCheck1.getOffAmount())); + thinkOrderService.updateById(thinkOrder); + } else { + thinkOrder.setReqOffStatus(3); + thinkOrderService.updateById(thinkOrder); + } + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除折扣审核") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (thinkOrderOffCheckService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加折扣审核") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (thinkOrderOffCheckService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改折扣审核") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(thinkOrderOffCheckService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除折扣审核") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (thinkOrderOffCheckService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java index fb24e06..b44275a 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java @@ -3,6 +3,7 @@ package com.gxwebsoft.think.controller; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; +import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.service.*; @@ -20,6 +21,7 @@ import com.wechat.pay.java.service.refund.model.RefundNotification; import com.wechat.pay.java.service.refund.model.Status; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -57,6 +59,9 @@ public class ThinkOrderRefundLogController extends BaseController { @Resource private ThinkCardService thinkCardService; + @Autowired + private RedisUtil redisUtil; + @PostMapping("/notify") public ApiResult refundNotify(@RequestBody String body, @RequestHeader Map header) { System.out.println("refund body = " + body); @@ -86,6 +91,7 @@ public class ThinkOrderRefundLogController extends BaseController { List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { thinkOrderInfo.setPayStatus(0); + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); } thinkOrderInfoService.updateBatchById(thinkOrderInfoList); } @@ -126,7 +132,24 @@ public class ThinkOrderRefundLogController extends BaseController { @PostMapping() public ApiResult save(@RequestBody ThinkOrderRefundLog thinkOrderRefundLog) { if (thinkOrderRefundLog.getType().equals(0)) { + // 下单半个小时内可退 + // 可提前6小时退 ThinkOrder thinkOrder = thinkOrderService.getById(thinkOrderRefundLog.getOid()); + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + if (thinkOrderRefundLog.getIsAdmin() == null) { + if (!thinkOrder.getSid().equals(37)) { + System.out.println("time cal: " + DateUtil.currentSeconds() + "," + thinkOrder.getCreateTime() + "," + ((int) DateUtil.currentSeconds() - thinkOrder.getCreateTime())); + if ((int) DateUtil.currentSeconds() - thinkOrder.getCreateTime() > 1800) { + if (thinkOrderInfoList.get(0).getStartTime() - (int) DateUtil.currentSeconds() < (3600 * 6)) { + return fail("距离开场已不足6小时不可退"); + } + } + } else { + if (thinkOrder.getOrderStatus().equals(1)) { + return fail("该订单已使用不可退"); + } + } + } thinkOrderRefundLog.setOrder(thinkOrder); thinkOrderRefundLog.setRefundNo("R" + thinkOrder.getOrderNum()); thinkOrderRefundLog.setCreateTime(LocalDateTimeUtil.now()); @@ -137,9 +160,10 @@ public class ThinkOrderRefundLogController extends BaseController { && !thinkOrder.getWechatOrder().isEmpty() && thinkOrder.getWechatOrder().contains("420000")) thinkOrderService.refund(thinkOrderRefundLog); else { - List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { thinkOrderInfo.setPayStatus(0); + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); } thinkOrderInfoService.updateBatchById(thinkOrderInfoList); thinkOrder.setOrderStatus(3); @@ -147,10 +171,10 @@ public class ThinkOrderRefundLogController extends BaseController { } } else { int num = 0; - List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { thinkOrderInfo.setPayStatus(0); num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum(); + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); } thinkOrderInfoService.updateBatchById(thinkOrderInfoList); thinkOrder.setOrderStatus(6); @@ -193,7 +217,7 @@ public class ThinkOrderRefundLogController extends BaseController { BigDecimal newBalance = card.getRemainingMoney().add(card.getEachMoney()); card.setRemainingMoney(newBalance); } else if (card.getType().equals(2)) { - card.setNum(card.getNum() + 1); + card.setNum(card.getNum() + num); } card.setUseTime(0L); thinkCardService.updateById(card); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java index 95aedd0..806f28c 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java @@ -81,6 +81,7 @@ public class ThinkRechargeLogController extends BaseController { if (num <= 0) thinkUsersVip.setStatus(3); else thinkUsersVip.setNum(num); } + thinkUsersVip.setExpireTime(thinkUsersVip.getExpireTime() - (thinkUsersVip.getTerm() * 86400 * 365) + (thinkUsersVip.getMonth() * 86400 * 30)); thinkUsersVipService.updateById(thinkUsersVip); } @@ -102,7 +103,11 @@ public class ThinkRechargeLogController extends BaseController { @ApiOperation("分页查询") @GetMapping("/page") - public ApiResult> page(ThinkRechargeLogParam param) { + public ApiResult page(ThinkRechargeLogParam param) { + if (param.getForUser() != null) { + if (getLoginUserId() == null) return fail("请登录"); + param.setUid(getLoginUser().getUid()); + } // 使用关联查询 return success(thinkRechargeLogService.pageRel(param)); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java index cc6a082..a13b8b8 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java @@ -1,5 +1,6 @@ package com.gxwebsoft.think.controller; +import cn.hutool.core.date.DateUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.think.service.ThinkSiteService; import com.gxwebsoft.think.entity.ThinkSite; @@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -71,6 +73,8 @@ public class ThinkSiteController extends BaseController { @ApiOperation("添加") @PostMapping() public ApiResult save(@RequestBody ThinkSite thinkSite) { + thinkSite.setCreateTime((int) DateUtil.currentSeconds()); + thinkSite.setUpdateTime((int) DateUtil.currentSeconds()); if (thinkSiteService.save(thinkSite)) { return success("添加成功"); } @@ -80,6 +84,7 @@ public class ThinkSiteController extends BaseController { @ApiOperation("修改") @PutMapping() public ApiResult update(@RequestBody ThinkSite thinkSite) { + thinkSite.setUpdateTime((int) DateUtil.currentSeconds()); if (thinkSiteService.updateById(thinkSite)) { return success("修改成功"); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java index 0779887..f01e450 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java @@ -63,6 +63,8 @@ public class ThinkUsersVipController extends BaseController { private ThinkUsersVipBuyLogService thinkUsersVipBuyLogService; @Resource private ThinkRechargeLogService thinkRechargeLogService; + @Resource + private ThinkCardBalanceService thinkCardBalanceService; @Autowired private RedisUtil redisUtil; @@ -166,21 +168,38 @@ public class ThinkUsersVipController extends BaseController { order.setPayTime(DateUtil.currentSeconds()); order.setPrices(order.getTempPrices()); // 查找有没有一样的卡 - ThinkUsersVip sameOrder = thinkUsersVipService.getByVidAndUid(order.getVid(), order.getUid()); - System.out.println("sameOrder >>>>> " + sameOrder); + List sameOrderList = thinkUsersVipService.getByVidAndUid(order.getVid(), order.getUid()); +// System.out.println("sameOrder >>>>> " + sameOrder); ThinkVip thinkVip = thinkVipService.getByIdRel(order.getVid()); - if (sameOrder != null && !sameOrder.getId().equals(order.getId()) && thinkVip.getMode().equals(0)) { + ThinkUsersVip sameOrder = sameOrderList.stream().filter(uV -> !uV.getId().equals(order.getId())) + .findFirst().orElse(null); + BigDecimal reduceEach = BigDecimal.ZERO; + if (sameOrder != null) { usersVip = sameOrder; + long expiredTime = 0; if (thinkVip.getMode().equals(0)) { // 是否已过期,过期的从现在开始计算,未过期的在旧卡基础上叠加 if (sameOrder.getExpireTime() < DateUtil.currentSeconds()) { - sameOrder.setExpireTime(DateUtil.currentSeconds() + (order.getTerm() * 86400 * 365) + (order.getMonth() * 86400 * 30)); + expiredTime = DateUtil.currentSeconds() + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30); + System.out.println("here: " + expiredTime); } else { - sameOrder.setExpireTime(sameOrder.getExpireTime() + (order.getTerm() * 86400 * 365) + (order.getMonth() * 86400 * 30)); + expiredTime = sameOrder.getExpireTime() + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30); + System.out.println("here1: " + expiredTime); } + expiredTime = expiredTime * 1000L; + reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip); } else { - sameOrder.setExpireTime(DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime() / 1000L); + long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); + DateTime dateTime = DateUtil.date(time); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis(); + double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000)); + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP); + expiredTime = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); } + DateTime dateTime = DateUtil.date(expiredTime); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + sameOrder.setExpireTime(DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() / 1000L); // 充值卡 if (sameOrder.getType().equals(4) || sameOrder.getType().equals(5)) { // 是否已过期,过期的清空,未过期的在旧卡基础上叠加 @@ -193,7 +212,7 @@ public class ThinkUsersVipController extends BaseController { if (sameOrder.getExpireTime() < DateUtil.currentSeconds()) { sameOrder.setNum(order.getCount()); } else { - sameOrder.setNum(sameOrder.getCount() + order.getCount()); + sameOrder.setNum(sameOrder.getNum() + order.getCount()); } // sameOrder.setNum(sameOrder.getCount() + order.getCount()); } @@ -215,6 +234,23 @@ public class ThinkUsersVipController extends BaseController { thinkRechargeLog.setPayTime(LocalDateTimeUtil.now()); thinkRechargeLogService.updateById(thinkRechargeLog); } + ThinkCardBalance thinkCardBalance = thinkCardBalanceService.getByVid(usersVip.getId()); + if (thinkCardBalance == null) { + thinkCardBalance = new ThinkCardBalance(); + thinkCardBalance.setVid(usersVip.getId()); + thinkCardBalance.setUid(usersVip.getUid()); + thinkCardBalance.setBalance(thinkVip.getPrice()); + thinkCardBalance.setReduceEach(reduceEach); + thinkCardBalance.setType(thinkVip.getType()); + thinkCardBalance.setDiscount(thinkVip.getDiscount()); + thinkCardBalance.setVipId(thinkVip.getId()); + thinkCardBalance.setUpdateTime(DateUtil.currentSeconds()); + thinkCardBalance.setCreateTime(DateUtil.currentSeconds()); + }else { + thinkCardBalance.setBalance(thinkVip.getPrice().add(thinkCardBalance.getBalance())); + thinkCardBalanceService.updateById(thinkCardBalance); + } + if (usersVip.getType().equals(1) || usersVip.getType().equals(3)) { List list = new ArrayList<>(); BigDecimal avgAmount = BigDecimal.ZERO; @@ -278,18 +314,21 @@ public class ThinkUsersVipController extends BaseController { thinkUsersVip.setTerm(thinkVip.getTerm()); thinkUsersVip.setMode(thinkVip.getMode()); thinkUsersVip.setCreateTime(DateUtil.currentSeconds()); + long time = DateUtil.currentSeconds(); if (thinkVip.getMode().equals(0)) { if (!thinkVip.getTerm().equals(0)) - thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getTerm() * 365 * 24 * 60 * 60); + time += (long) thinkVip.getTerm() * 365 * 24 * 60 * 60; if (!thinkVip.getMonth().equals(0)) - thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getMonth() * 30 * 24 * 60 * 60); + time += (long) thinkVip.getMonth() * 30 * 24 * 60 * 60; if (!thinkVip.getDay().equals(0)) - thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getDay() * 24 * 60 * 60); + time += (long) thinkVip.getDay() * 24 * 60 * 60; } else { - long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); - thinkUsersVip.setExpireTime(time / 1000); + time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); + time = time / 1000; } - + DateTime dateTime = DateUtil.date(time * 1000L); + String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59"; + thinkUsersVip.setExpireTime(DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() / 1000L); ThinkRechargeLog thinkRechargeLog = new ThinkRechargeLog(); thinkRechargeLog.setUid(getLoginUser().getUid()); thinkRechargeLog.setOrderNum(orderNumber); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkVipCardsBillsController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkVipCardsBillsController.java index a3e5f9a..1da7e7a 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkVipCardsBillsController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkVipCardsBillsController.java @@ -4,28 +4,32 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.gxwebsoft.common.core.web.BaseController; -import com.gxwebsoft.think.entity.ThinkOrder; -import com.gxwebsoft.think.entity.ThinkUsersVip; -import com.gxwebsoft.think.service.ThinkOrderService; -import com.gxwebsoft.think.service.ThinkUsersVipService; -import com.gxwebsoft.think.service.ThinkVipCardsBillsService; -import com.gxwebsoft.think.entity.ThinkVipCardsBills; +import com.gxwebsoft.think.entity.*; +import com.gxwebsoft.think.service.*; import com.gxwebsoft.think.param.ThinkVipCardsBillsParam; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.core.config.ConfigProperties; +import com.gxwebsoft.common.system.entity.FileRecord; import com.gxwebsoft.common.system.entity.User; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.xssf.streaming.SXSSFRow; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.io.FileOutputStream; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -44,6 +48,14 @@ public class ThinkVipCardsBillsController extends BaseController { private ThinkUsersVipService thinkUsersVipService; @Resource private ThinkOrderService thinkOrderService; + @Resource + private ThinkVipService thinkVipService; + @Resource + private ThinkCardService thinkCardService; + @Resource + private ThinkUsersService thinkUsersService; + @Resource + private ConfigProperties config; @ApiOperation("分页查询Vip卡每日账单") @GetMapping("/page") @@ -55,7 +67,11 @@ public class ThinkVipCardsBillsController extends BaseController { @GetMapping("/total-amount") public ApiResult totalAmount(ThinkVipCardsBillsParam param) { List list = thinkVipCardsBillsService.listRel(param); - return success(list.stream().map(ThinkVipCardsBills::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add)); + BigDecimal totalAmount = BigDecimal.ZERO; +// for (ThinkVipCardsBills bill : list) { +// if (bill.getThinkOrder() != null) totalAmount = totalAmount.add(bill.getThinkOrder().getPayPrice()); +// } + return success(totalAmount); } @ApiOperation("查询全部Vip卡每日账单") @@ -127,87 +143,258 @@ public class ThinkVipCardsBillsController extends BaseController { return fail("删除失败"); } + @ApiOperation("导出Excel") + @PostMapping("/export") + public ApiResult export(@RequestBody ThinkVipCardsBillsParam param) throws IOException { + + List billsList = thinkVipCardsBillsService.listRel(param); + String cardName = param.getIsVip() != null ? "VIP卡" : "实体卡"; + String filename = "excel/" + cardName + "账单-" + new Date().getTime() + ".xlsx"; + String uploadPath = config.getUploadPath(); + String path = uploadPath + filename; + + // 确保目录存在 + java.io.File directory = new java.io.File(uploadPath + "excel"); + if (!directory.exists()) { + directory.mkdirs(); + } + + SXSSFWorkbook workbook = new SXSSFWorkbook(); + SXSSFSheet sheet = workbook.createSheet("VIP卡账单"); + + // 设置列宽 + sheet.setColumnWidth(0, 20 * 256); // 用户 + sheet.setColumnWidth(1, 30 * 256); // 名称 + sheet.setColumnWidth(2, 15 * 256); // 日期 + sheet.setColumnWidth(3, 15 * 256); // 金额 + + // 创建表头 + SXSSFRow headerRow = sheet.createRow(0); + String[] headers = {"用户", "手机号", "卡名称", "日期", "金额"}; + for (int i = 0; i < headers.length; i++) { + headerRow.createCell(i).setCellValue(headers[i]); + } + + // 填充数据 + int rowNum = 1; + for (ThinkVipCardsBills bill : billsList) { + SXSSFRow row = sheet.createRow(rowNum++); + + // 用户 + String username = ""; + if (bill.getUser() != null) { + username = bill.getUser().getUsername() != null ? bill.getUser().getUsername() : ""; + } + row.createCell(0).setCellValue(username); + + String phone = ""; + if (bill.getUser() != null) { + phone = bill.getUser().getPhone() != null ? bill.getUser().getPhone() : ""; + } + row.createCell(1).setCellValue(phone); + + // 名称 + String name = ""; + if (bill.getVip() != null && bill.getVip().getName() != null) { + name = bill.getVip().getName(); + } else if (bill.getCard() != null && bill.getCard().getName() != null) { + name = bill.getCard().getName(); + } + row.createCell(2).setCellValue(name); + + // 日期 + String date = bill.getDate() != null ? bill.getDate() : ""; + row.createCell(3).setCellValue(date); + + // 金额 + String amount = bill.getThinkOrder() != null ? bill.getThinkOrder().getPayPrice().toString() : ""; + row.createCell(4).setCellValue(amount); + } + + // 保存文件 + try (FileOutputStream fileOut = new FileOutputStream(path)) { + workbook.write(fileOut); + } + workbook.close(); + + // 创建文件记录 + FileRecord result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName(filename); + result.setPath(path); + result.setUrl(config.getServerUrl() + "/file/" + filename); + + return success(result); + } + @PostMapping("/make-bill") public void makeBill() { + List thinkVipList = thinkVipService.list(); List usersVipList = thinkUsersVipService.list( new LambdaQueryWrapper() .eq(ThinkUsersVip::getStatus, 1) ); for (ThinkUsersVip usersVip : usersVipList) { - List list = new ArrayList<>(); - List orderList = thinkOrderService.list( - new LambdaQueryWrapper() - .eq(ThinkOrder::getVid, usersVip.getId()) - .in(ThinkOrder::getPayStatus, 1) - .in(ThinkOrder::getOrderStatus, 1, 2) - ); - BigDecimal avgAmount = BigDecimal.ZERO; - int dayNum = 0; - if (usersVip.getType().equals(1) || usersVip.getType().equals(3)) { - BigDecimal totalAmountInAvg = BigDecimal.ZERO; - BigDecimal totalAmount = BigDecimal.ZERO; - if (usersVip.getType().equals(1)) { - totalAmount = usersVip.getPrice().multiply(new BigDecimal(usersVip.getTerm())); - avgAmount = totalAmount.divide(BigDecimal.valueOf(365).multiply(BigDecimal.valueOf(usersVip.getTerm())), RoundingMode.HALF_UP); - dayNum = 365 * usersVip.getTerm(); - } else if (usersVip.getType().equals(3)) { - totalAmount = usersVip.getPrice().multiply(new BigDecimal(usersVip.getMonth())); - avgAmount = totalAmount.divide(BigDecimal.valueOf(30).multiply(BigDecimal.valueOf(usersVip.getMonth())), RoundingMode.HALF_UP); - dayNum = 30 * usersVip.getMonth(); - } - totalAmountInAvg = avgAmount.multiply(BigDecimal.valueOf(dayNum - 1)); - BigDecimal lastDayAmount = totalAmount.subtract(totalAmountInAvg); - for (int i = 0; i < dayNum; i++) { - ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); - thinkVipCardsBills.setUid(usersVip.getUid()); - thinkVipCardsBills.setVid(usersVip.getId()); - DateTime dateTime = DateUtil.date((usersVip.getCreateTime() * 1000L) + (i * 86400000L)); - thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); - if (i == dayNum - 1) thinkVipCardsBills.setAmount(lastDayAmount); - else thinkVipCardsBills.setAmount(avgAmount); - if (!orderList.isEmpty()) { - for (ThinkOrder thinkOrder : orderList) { - if (thinkOrder.getCreateTime() > (DateUtil.beginOfDay(dateTime).getTime() / 1000L) && thinkOrder.getCreateTime() < (DateUtil.endOfDay(dateTime).getTime() / 1000L)) { - thinkVipCardsBills.setUsed(1); - thinkVipCardsBills.setOid(thinkOrder.getId()); + ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(usersVip.getVid())).findFirst().orElse(null); + if (thinkVip != null) { + List list = new ArrayList<>(); + List orderList = thinkOrderService.list( + new LambdaQueryWrapper() + .eq(ThinkOrder::getVid, usersVip.getId()) + .in(ThinkOrder::getPayStatus, 1) + .in(ThinkOrder::getOrderStatus, 1, 2) + ); + BigDecimal avgAmount = BigDecimal.ZERO; + int dayNum = 0; + if (thinkVip.getType().equals(1) || thinkVip.getType().equals(3)) { + BigDecimal totalAmountInAvg = BigDecimal.ZERO; + BigDecimal totalAmount = BigDecimal.ZERO; + if (thinkVip.getType().equals(1)) { + totalAmount = thinkVip.getPrice().multiply(new BigDecimal(thinkVip.getTerm())); + avgAmount = totalAmount.divide(BigDecimal.valueOf(365).multiply(BigDecimal.valueOf(thinkVip.getTerm())), RoundingMode.HALF_UP); + dayNum = 365 * thinkVip.getTerm(); + } else if (thinkVip.getType().equals(3)) { + totalAmount = thinkVip.getPrice().multiply(new BigDecimal(thinkVip.getMonth())); + avgAmount = totalAmount.divide(BigDecimal.valueOf(30).multiply(BigDecimal.valueOf(thinkVip.getMonth())), RoundingMode.HALF_UP); + dayNum = 30 * thinkVip.getMonth(); + } + totalAmountInAvg = avgAmount.multiply(BigDecimal.valueOf(dayNum - 1)); + BigDecimal lastDayAmount = totalAmount.subtract(totalAmountInAvg); + for (int i = 0; i < dayNum; i++) { + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setUid(usersVip.getUid()); + thinkVipCardsBills.setVid(usersVip.getId()); + DateTime dateTime = DateUtil.date((usersVip.getCreateTime() * 1000L) + (i * 86400000L)); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + if (i == dayNum - 1) thinkVipCardsBills.setAmount(lastDayAmount); + else thinkVipCardsBills.setAmount(avgAmount); + if (!orderList.isEmpty()) { + for (ThinkOrder thinkOrder : orderList) { + if (thinkOrder.getCreateTime() > (DateUtil.beginOfDay(dateTime).getTime() / 1000L) && thinkOrder.getCreateTime() < (DateUtil.endOfDay(dateTime).getTime() / 1000L)) { + thinkVipCardsBills.setUsed(1); + thinkVipCardsBills.setOid(thinkOrder.getId()); + } } } - } - list.add(thinkVipCardsBills); - } - } else if (usersVip.getType().equals(2)) { - // 次卡 - if (!orderList.isEmpty()) { - avgAmount = usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP); - for (ThinkOrder thinkOrder : orderList) { - ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); - thinkVipCardsBills.setUid(usersVip.getUid()); - thinkVipCardsBills.setVid(usersVip.getId()); - DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); - thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); - thinkVipCardsBills.setAmount(avgAmount); - thinkVipCardsBills.setUsed(1); - thinkVipCardsBills.setOid(thinkOrder.getId()); list.add(thinkVipCardsBills); } - } - } else if (usersVip.getType().equals(4) || usersVip.getType().equals(5)) { - // 充值卡\折扣 - if (!orderList.isEmpty()) { - for (ThinkOrder thinkOrder : orderList) { - ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); - thinkVipCardsBills.setUid(usersVip.getUid()); - thinkVipCardsBills.setVid(usersVip.getId()); - DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); - thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); - thinkVipCardsBills.setAmount(thinkOrder.getTotalPrice()); - thinkVipCardsBills.setUsed(1); - thinkVipCardsBills.setOid(thinkOrder.getId()); - list.add(thinkVipCardsBills); + } else if (thinkVip.getType().equals(2)) { + // 次卡 + if (!orderList.isEmpty()) { + avgAmount = thinkVip.getPrice().divide(BigDecimal.valueOf(thinkVip.getCount()), RoundingMode.HALF_UP); + for (ThinkOrder thinkOrder : orderList) { + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setUid(usersVip.getUid()); + thinkVipCardsBills.setVid(usersVip.getId()); + DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + thinkVipCardsBills.setAmount(avgAmount); + thinkVipCardsBills.setUsed(1); + thinkVipCardsBills.setOid(thinkOrder.getId()); + list.add(thinkVipCardsBills); + } + } + } else if (thinkVip.getType().equals(4) || thinkVip.getType().equals(5)) { + // 充值卡\折扣 + if (!orderList.isEmpty()) { + for (ThinkOrder thinkOrder : orderList) { + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setUid(usersVip.getUid()); + thinkVipCardsBills.setVid(usersVip.getId()); + DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + thinkVipCardsBills.setAmount(thinkOrder.getTotalPrice()); + thinkVipCardsBills.setUsed(1); + thinkVipCardsBills.setOid(thinkOrder.getId()); + list.add(thinkVipCardsBills); + } } } + thinkVipCardsBillsService.saveBatch(list); + } + } + List thinkCardList = thinkCardService.list( + new LambdaQueryWrapper() + .eq(ThinkCard::getStatus, 1) + ); + for (ThinkCard usersVip : thinkCardList) { + ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(usersVip.getVid())).findFirst().orElse(null); + if (thinkVip != null) { + List list = new ArrayList<>(); + List orderList = thinkOrderService.list( + new LambdaQueryWrapper() + .eq(ThinkOrder::getCid, usersVip.getId()) + .in(ThinkOrder::getPayStatus, 1) + .in(ThinkOrder::getOrderStatus, 1, 2) + ); + BigDecimal avgAmount = BigDecimal.ZERO; + int dayNum = 0; + if (thinkVip.getType().equals(1) || thinkVip.getType().equals(3)) { + BigDecimal totalAmountInAvg = BigDecimal.ZERO; + BigDecimal totalAmount = BigDecimal.ZERO; + if (thinkVip.getType().equals(1)) { + totalAmount = thinkVip.getPrice().multiply(new BigDecimal(thinkVip.getTerm())); + avgAmount = totalAmount.divide(BigDecimal.valueOf(365).multiply(BigDecimal.valueOf(thinkVip.getTerm())), RoundingMode.HALF_UP); + dayNum = 365 * thinkVip.getTerm(); + } else if (thinkVip.getType().equals(3)) { + totalAmount = thinkVip.getPrice().multiply(new BigDecimal(thinkVip.getMonth())); + avgAmount = totalAmount.divide(BigDecimal.valueOf(30).multiply(BigDecimal.valueOf(thinkVip.getMonth())), RoundingMode.HALF_UP); + dayNum = 30 * thinkVip.getMonth(); + } + totalAmountInAvg = avgAmount.multiply(BigDecimal.valueOf(dayNum - 1)); + BigDecimal lastDayAmount = totalAmount.subtract(totalAmountInAvg); + for (int i = 0; i < dayNum; i++) { + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setUid(usersVip.getUid()); + thinkVipCardsBills.setCid(usersVip.getId()); + DateTime dateTime = DateUtil.date((usersVip.getCreateTime() * 1000L) + (i * 86400000L)); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + if (i == dayNum - 1) thinkVipCardsBills.setAmount(lastDayAmount); + else thinkVipCardsBills.setAmount(avgAmount); + if (!orderList.isEmpty()) { + for (ThinkOrder thinkOrder : orderList) { + if (thinkOrder.getCreateTime() > (DateUtil.beginOfDay(dateTime).getTime() / 1000L) && thinkOrder.getCreateTime() < (DateUtil.endOfDay(dateTime).getTime() / 1000L)) { + thinkVipCardsBills.setUsed(1); + thinkVipCardsBills.setOid(thinkOrder.getId()); + } + } + } + list.add(thinkVipCardsBills); + } + } else if (thinkVip.getType().equals(2)) { + // 次卡 + if (!orderList.isEmpty()) { + avgAmount = thinkVip.getPrice().divide(BigDecimal.valueOf(thinkVip.getCount()), RoundingMode.HALF_UP); + for (ThinkOrder thinkOrder : orderList) { + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setUid(usersVip.getUid()); + thinkVipCardsBills.setCid(usersVip.getId()); + DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + thinkVipCardsBills.setAmount(avgAmount); + thinkVipCardsBills.setUsed(1); + thinkVipCardsBills.setOid(thinkOrder.getId()); + list.add(thinkVipCardsBills); + } + } + } else if (thinkVip.getType().equals(4) || thinkVip.getType().equals(5)) { + // 充值卡\折扣 + if (!orderList.isEmpty()) { + for (ThinkOrder thinkOrder : orderList) { + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setUid(usersVip.getUid()); + thinkVipCardsBills.setCid(usersVip.getId()); + DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + thinkVipCardsBills.setAmount(thinkOrder.getTotalPrice()); + thinkVipCardsBills.setUsed(1); + thinkVipCardsBills.setOid(thinkOrder.getId()); + list.add(thinkVipCardsBills); + } + } + } + thinkVipCardsBillsService.saveBatch(list); } - thinkVipCardsBillsService.saveBatch(list); } } diff --git a/src/main/java/com/gxwebsoft/think/entity/NuoNuoOrder.java b/src/main/java/com/gxwebsoft/think/entity/NuoNuoOrder.java index 76660df..d4ecda9 100644 --- a/src/main/java/com/gxwebsoft/think/entity/NuoNuoOrder.java +++ b/src/main/java/com/gxwebsoft/think/entity/NuoNuoOrder.java @@ -34,6 +34,8 @@ public class NuoNuoOrder implements Serializable { @TableField(exist = false) private String salerTaxNum; + private String taxNum; + @ApiModelProperty(value = "销方电话") @TableField(exist = false) private String salerTel; @@ -103,4 +105,7 @@ public class NuoNuoOrder implements Serializable { @TableField(exist = false) private NuoNuoRealPropertyRentInfo realPropertyRentInfo; + + @TableField(exist = false) + private String billNo; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java b/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java index c051848..d40c652 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java @@ -173,4 +173,16 @@ public class ThinkCard implements Serializable { @TableField(exist = false) private ThinkVip thinkVip; + + @TableField(exist = false) + private ThinkInvoice thinkInvoice; + + @TableField(exist = false) + private Boolean saveLog; + + @TableField(exist = false) + private Boolean isChange; + + @TableField(exist = false) + private ThinkCardLog cardLog; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkCardBalance.java b/src/main/java/com/gxwebsoft/think/entity/ThinkCardBalance.java new file mode 100644 index 0000000..447ebc4 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkCardBalance.java @@ -0,0 +1,48 @@ +package com.gxwebsoft.think.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 卡余额记录 + * + * @author 科技小王子 + * @since 2025-06-20 20:58:38 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ThinkCardBalance对象", description = "卡余额记录") +public class ThinkCardBalance implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer cid; + + private Integer vid; + + private Integer uid; + + private BigDecimal balance; + + private Integer type; + + private BigDecimal discount; + + private Integer vipId; + + @ApiModelProperty(value = "每次减少金额") + private BigDecimal reduceEach; + + private Long createTime; + + private Long updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkCardLog.java b/src/main/java/com/gxwebsoft/think/entity/ThinkCardLog.java index 48143c3..62b6c82 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkCardLog.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkCardLog.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** * @@ -86,5 +87,7 @@ public class ThinkCardLog implements Serializable { @TableField(exist = false) private Long expireTime; + @TableField(exist = false) + private List payTypeList; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkFtpCheckBill.java b/src/main/java/com/gxwebsoft/think/entity/ThinkFtpCheckBill.java new file mode 100644 index 0000000..a9210ea --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkFtpCheckBill.java @@ -0,0 +1,82 @@ +package com.gxwebsoft.think.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * + * @author 科技小王子 + * @since 2025-05-21 11:58:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ThinkFtpCheckBill对象", description = "") +public class ThinkFtpCheckBill implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "终端号") + private String deviceNo; + + @ApiModelProperty(value = "卡号") + private String cardNo; + + private BigDecimal amount; + + @ApiModelProperty(value = "结算金额") + private BigDecimal settleAmount; + + @ApiModelProperty(value = "手续费") + private BigDecimal feeAmount; + + @ApiModelProperty(value = "实际支付金额") + private BigDecimal paidAmount; + + @ApiModelProperty(value = "参考号") + private String refNo; + + @ApiModelProperty(value = "流水号") + private String flowNo; + + @ApiModelProperty(value = "卡类型") + private String cardType; + + @ApiModelProperty(value = "发卡行") + private String postCardType; + + @ApiModelProperty(value = "支付方式") + private String payType; + + @ApiModelProperty(value = "银商订单号") + private String orderNo; + + private LocalDateTime payTime; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkGoodsCategory.java b/src/main/java/com/gxwebsoft/think/entity/ThinkGoodsCategory.java index fc27550..7296381 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkGoodsCategory.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkGoodsCategory.java @@ -38,6 +38,8 @@ public class ThinkGoodsCategory implements Serializable { @ApiModelProperty(value = "排序") private Integer sort; + private Integer isShow; + private Integer createTime; private Integer updateTime; diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java b/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java index 98e0a0e..450ef4e 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java @@ -3,6 +3,7 @@ package com.gxwebsoft.think.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -63,6 +64,9 @@ public class ThinkInvoice implements Serializable { @ApiModelProperty(value = "税号") private String code; + @TableLogic + private Integer deleted; + @ApiModelProperty(value = "手机号码") private String phone; @@ -103,6 +107,8 @@ public class ThinkInvoice implements Serializable { private String url; + private String xmlUrl; + private String resJson; @TableField(exist = false) diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkLog.java b/src/main/java/com/gxwebsoft/think/entity/ThinkLog.java index e37c8f7..17b4fdb 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkLog.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkLog.java @@ -40,7 +40,7 @@ public class ThinkLog implements Serializable { private Integer status; @ApiModelProperty(value = "添加时间") - private Integer addTime; + private Long addTime; @ApiModelProperty(value = "0:操作日志;1:登录日志;2:定时任务 ") private Integer logType; diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java b/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java index 1d6cc02..cfda041 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java @@ -11,6 +11,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; @@ -146,6 +147,21 @@ public class ThinkOrder implements Serializable { @ApiModelProperty(value = "对账情况:1=已对账;2=未对账;3=已对账,金额对不上;4=未查询到该订单") private Integer checkBill; + @ApiModelProperty(value = "折扣申请状态(0未申请 1审核中 2已通过 3未通过)") + private Integer reqOffStatus; + + @ApiModelProperty(value = "折扣凭证") + private String discountCert; + + @ApiModelProperty(value = "核销方") + private Integer checkBy; + + @ApiModelProperty(value = "核销时间") + private Date checkTime; + + @ApiModelProperty(value = "退款方") + private Integer refundBy; + @ApiModelProperty(value = "场馆名称") @TableField(exist = false) private String siteName; @@ -202,4 +218,28 @@ public class ThinkOrder implements Serializable { @TableField(exist = false) private Boolean canInvoice; + + @TableField(exist = false) + private List qrCodeList; + + @TableField(exist = false) + private Boolean adultFree; + + @TableField(exist = false) + private Boolean childFree; + + @TableField(exist = false) + private BigDecimal adultPrice; + + @TableField(exist = false) + private BigDecimal childrenPrice; + + @TableField(exist = false) + private ThinkOrderOffCheck thinkOrderOffCheck; + + @TableField(exist = false) + private String typeStr; + + @TableField(exist = false) + private Boolean isAdmin; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java index 4fb8b82..5aa6b6c 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java @@ -56,6 +56,9 @@ public class ThinkOrderInfo implements Serializable { @ApiModelProperty(value = "儿童人数") private Integer childrenNum; + @ApiModelProperty(value = "核销数量") + private Integer usedNum; + @ApiModelProperty(value = "1已付款,2未付款,3无需付款或占用状态") private Integer payStatus; diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderOffCheck.java b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderOffCheck.java new file mode 100644 index 0000000..27a2c4a --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderOffCheck.java @@ -0,0 +1,70 @@ +package com.gxwebsoft.think.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 折扣审核 + * + * @author 科技小王子 + * @since 2025-05-26 09:42:46 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ThinkOrderOffCheck对象", description = "折扣审核") +public class ThinkOrderOffCheck implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer oid; + + private Integer userId; + + @ApiModelProperty(value = "原价") + private BigDecimal originAmount; + + @ApiModelProperty(value = "折扣") + private BigDecimal rate; + + @ApiModelProperty(value = "折后价") + private BigDecimal offAmount; + + @ApiModelProperty(value = "申请原因") + private String reqReason; + + @ApiModelProperty(value = "拒绝原因") + private String refuseReason; + + @ApiModelProperty(value = "审核人") + private Integer checkUid; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + + @TableField(exist = false) + private ThinkOrder thinkOrder; +} diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderRefundLog.java b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderRefundLog.java index 48e577e..de2aace 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderRefundLog.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderRefundLog.java @@ -60,4 +60,7 @@ public class ThinkOrderRefundLog implements Serializable { @TableField(exist = false) private ThinkOrder order; + + @TableField(exist = false) + private Boolean isAdmin; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java b/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java index 66301e5..d5ab555 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java @@ -100,6 +100,10 @@ public class ThinkSite implements Serializable { private Integer dailyNum; + private Integer adultFree; + + private Integer childFree; + private String machineCode; @TableField(exist = false) diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java b/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java index 02c921e..383c31c 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java @@ -37,6 +37,12 @@ public class ThinkVip implements Serializable { @ApiModelProperty(value = "会员卡价格") private BigDecimal price; + @ApiModelProperty(value = "会员卡价格") + private Integer reportSid; + + @ApiModelProperty(value = "续卡价格") + private BigDecimal renewPrice; + @ApiModelProperty(value = "会员卡介绍") @TableField(value = "`desc`") private String desc; diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkVipCardsBills.java b/src/main/java/com/gxwebsoft/think/entity/ThinkVipCardsBills.java index 34afec0..8b8dbab 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkVipCardsBills.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkVipCardsBills.java @@ -66,4 +66,7 @@ public class ThinkVipCardsBills implements Serializable { @TableField(exist = false) private ThinkUsers user; + + @TableField(exist = false) + private ThinkOrder thinkOrder; } diff --git a/src/main/java/com/gxwebsoft/think/mapper/ThinkCardBalanceMapper.java b/src/main/java/com/gxwebsoft/think/mapper/ThinkCardBalanceMapper.java new file mode 100644 index 0000000..02a34c1 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/ThinkCardBalanceMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.think.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.think.entity.ThinkCardBalance; +import com.gxwebsoft.think.param.ThinkCardBalanceParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 卡余额记录Mapper + * + * @author 科技小王子 + * @since 2025-06-20 20:58:38 + */ +public interface ThinkCardBalanceMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ThinkCardBalanceParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ThinkCardBalanceParam param); + +} diff --git a/src/main/java/com/gxwebsoft/think/mapper/ThinkFtpCheckBillMapper.java b/src/main/java/com/gxwebsoft/think/mapper/ThinkFtpCheckBillMapper.java new file mode 100644 index 0000000..5741357 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/ThinkFtpCheckBillMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.think.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.think.entity.ThinkFtpCheckBill; +import com.gxwebsoft.think.param.ThinkFtpCheckBillParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Mapper + * + * @author 科技小王子 + * @since 2025-05-21 11:58:28 + */ +public interface ThinkFtpCheckBillMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ThinkFtpCheckBillParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ThinkFtpCheckBillParam param); + +} diff --git a/src/main/java/com/gxwebsoft/think/mapper/ThinkOrderOffCheckMapper.java b/src/main/java/com/gxwebsoft/think/mapper/ThinkOrderOffCheckMapper.java new file mode 100644 index 0000000..9992a8c --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/ThinkOrderOffCheckMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.think.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.think.entity.ThinkOrderOffCheck; +import com.gxwebsoft.think.param.ThinkOrderOffCheckParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 折扣审核Mapper + * + * @author 科技小王子 + * @since 2025-05-26 09:42:46 + */ +public interface ThinkOrderOffCheckMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ThinkOrderOffCheckParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ThinkOrderOffCheckParam param); + +} diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardBalanceMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardBalanceMapper.xml new file mode 100644 index 0000000..f472687 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardBalanceMapper.xml @@ -0,0 +1,51 @@ + + + + + + + SELECT a.* + FROM think_card_balance a + + + AND a.id = #{param.id} + + + AND a.cid = #{param.cid} + + + AND a.vid = #{param.vid} + + + AND a.uid = #{param.uid} + + + AND a.balance = #{param.balance} + + + AND a.reduce_each = #{param.reduceEach} + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardLogMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardLogMapper.xml index 8671562..3d5f8ad 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardLogMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardLogMapper.xml @@ -41,6 +41,18 @@ AND a.count = #{param.count} + + AND a.pay_type IN + + #{item} + + + + AND a.code IN + + #{item} + + AND (a.code LIKE CONCAT('%', #{param.keywords}, '%') OR c.phone = #{param.keywords} diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardMapper.xml index a45de07..bf6ca7a 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardMapper.xml @@ -19,6 +19,12 @@ AND a.vid = #{param.vid} + + AND a.vid IN + + #{item} + + AND a.aid = #{param.aid} @@ -125,25 +131,31 @@ AND a.create_time <= #{param.createTimeEnd} - AND a.create_time >= #{param.timeStart} + AND a.create_time >= #{param.timeStart} - AND a.create_time <= #{param.timeEnd} + AND a.create_time <= #{param.timeEnd} AND a.IDCard LIKE CONCAT('%', #{param.idcard}, '%') - - AND a.remark LIKE CONCAT('%', #{param.remark}, '%') + + AND a.origin_card_code IS NULL AND (a.username LIKE CONCAT('%', #{param.keywords}, '%') - OR a.phone LIKE CONCAT('%', #{param.keywords}, '%') - OR a.code LIKE CONCAT('%', #{param.keywords}, '%') - OR a.wechat_order LIKE CONCAT('%', #{param.keywords}, '%') - OR a.card_num LIKE CONCAT('%', #{param.keywords}, '%') + OR a.phone LIKE CONCAT('%', #{param.keywords}, '%') + OR a.code LIKE CONCAT('%', #{param.keywords}, '%') + OR a.wechat_order LIKE CONCAT('%', #{param.keywords}, '%') + OR a.card_num LIKE CONCAT('%', #{param.keywords}, '%') ) - + + + AND a.pay_type IN + + #{item} + + ORDER BY a.create_time DESC diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkFtpCheckBillMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkFtpCheckBillMapper.xml new file mode 100644 index 0000000..1cc0e73 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkFtpCheckBillMapper.xml @@ -0,0 +1,91 @@ + + + + + + + SELECT a.* + FROM think_ftp_check_bill a + + + AND a.id = #{param.id} + + + AND a.device_no LIKE CONCAT('%', #{param.deviceNo}, '%') + + + AND a.card_no LIKE CONCAT('%', #{param.cardNo}, '%') + + + AND a.amount = #{param.amount} + + + AND a.settle_amount = #{param.settleAmount} + + + AND a.fee_amount = #{param.feeAmount} + + + AND a.paid_amount = #{param.paidAmount} + + + AND a.ref_no LIKE CONCAT('%', #{param.refNo}, '%') + + + AND a.flow_no LIKE CONCAT('%', #{param.flowNo}, '%') + + + AND a.card_type LIKE CONCAT('%', #{param.cardType}, '%') + + + AND a.post_card_type LIKE CONCAT('%', #{param.postCardType}, '%') + + + AND a.pay_type LIKE CONCAT('%', #{param.payType}, '%') + + + AND a.pay_time >= #{param.payTimeStart} + + + AND a.pay_time <= #{param.payTimeEnd} + + + AND a.order_no LIKE CONCAT('%', #{param.orderNo}, '%') + + + AND a.pay_time LIKE CONCAT('%', #{param.payTime}, '%') + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.flow_no LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + ORDER BY a.pay_time DESC + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkGoodsCategoryMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkGoodsCategoryMapper.xml index e282ab6..c20b16c 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkGoodsCategoryMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkGoodsCategoryMapper.xml @@ -22,6 +22,9 @@ AND a.sort = #{param.sort} + + AND a.is_show = #{param.isShow} + AND a.create_time >= #{param.createTimeStart} diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkInvoiceMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkInvoiceMapper.xml index 88b0692..2736c77 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkInvoiceMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkInvoiceMapper.xml @@ -74,6 +74,9 @@ AND a.InvoiceType = #{param.invoicetype} + + AND a.deleted = #{param.deleted} + AND a.vid = #{param.vid} @@ -81,6 +84,10 @@ AND ( b.order_num LIKE CONCAT('%', #{param.keywords}, '%') OR a.incoive_num LIKE CONCAT('%', #{param.keywords}, '%') + OR a.name LIKE CONCAT('%', #{param.keywords}, '%') + OR a.order_num LIKE CONCAT('%', #{param.keywords}, '%') + OR a.tel LIKE CONCAT('%', #{param.keywords}, '%') + OR a.incoive_code LIKE CONCAT('%', #{param.keywords}, '%') ) diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderMapper.xml index 2d94781..c3d20e1 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderMapper.xml @@ -10,6 +10,12 @@ AND a.id = #{param.id} + + AND a.id IN + + #{item} + + AND a.order_num LIKE CONCAT('%', #{param.orderNum}, '%') @@ -85,6 +91,12 @@ AND a.order_status = #{param.orderStatus} + + AND a.order_status IN + + #{item} + + AND a.type = #{param.type} @@ -118,6 +130,12 @@ AND a.create_time <= #{param.createTimeEnd} + + AND a.pay_time >= #{param.payTimeStart} + + + AND a.pay_time <= #{param.payTimeEnd} + AND a.create_time >= #{param.timeStart} @@ -142,11 +160,15 @@ AND (a.name = #{param.keywords} OR a.id = #{param.keywords} + OR a.wechat_order LIKE CONCAT('%', #{param.keywords}, '%') OR a.order_num LIKE CONCAT('%', #{param.keywords}, '%') OR a.phone LIKE CONCAT('%', #{param.keywords}, '%') OR a.code LIKE CONCAT('%', #{param.keywords}, '%') ) + + AND a.wechat_order NOT LIKE '420000%' + diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderOffCheckMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderOffCheckMapper.xml new file mode 100644 index 0000000..d1df49f --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderOffCheckMapper.xml @@ -0,0 +1,69 @@ + + + + + + + SELECT a.* + FROM think_order_off_check a + + + AND a.id = #{param.id} + + + AND a.oid = #{param.oid} + + + AND a.user_id = #{param.userId} + + + AND a.origin_amount = #{param.originAmount} + + + AND a.rate = #{param.rate} + + + AND a.off_amount = #{param.offAmount} + + + AND a.req_reason LIKE CONCAT('%', #{param.reqReason}, '%') + + + AND a.refuse_reason LIKE CONCAT('%', #{param.refuseReason}, '%') + + + AND a.check_uid = #{param.checkUid} + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkRechargeLogMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkRechargeLogMapper.xml index 8aebe86..592de7f 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkRechargeLogMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkRechargeLogMapper.xml @@ -27,6 +27,12 @@ AND a.status = #{param.status} + + AND a.status IN + + #{item} + + AND a.create_time >= #{param.createTimeStart} @@ -42,6 +48,12 @@ AND a.vid = #{param.vid} + + AND a.vid IN + + #{item} + + AND a.is_invoice = #{param.isInvoice} @@ -56,6 +68,9 @@ OR a.vid = #{param.keywords} ) + + AND v.sid LIKE CONCAT('%', #{param.sid}, '%') + diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipMapper.xml index eb78699..104660d 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipMapper.xml @@ -20,6 +20,12 @@ AND a.vid = #{param.vid} + + AND a.vid IN + + #{item} + + AND a.wechat_order LIKE CONCAT('%', #{param.wechatOrder}, '%') @@ -127,6 +133,7 @@ OR a.code = #{param.keywords} OR b.phone = #{param.keywords} OR b.truename = #{param.keywords} + OR a.wechat_order = #{param.keywords} ) diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipCardsBillsMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipCardsBillsMapper.xml index 234f82e..5dd6983 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipCardsBillsMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipCardsBillsMapper.xml @@ -16,6 +16,15 @@ AND a.vid = #{param.vid} + + AND a.cid IS NULL + + + AND a.vid = #{param.vid} + + + AND a.vid IS NULL + AND a.date LIKE CONCAT('%', #{param.date}, '%') diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipMapper.xml index b80b10a..73a38d3 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkVipMapper.xml @@ -18,6 +18,9 @@ AND a.price = #{param.price} + + + AND a.report_sid = #{param.reportSid} AND a.desc LIKE CONCAT('%', #{param.desc}, '%') diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkCardBalanceParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkCardBalanceParam.java new file mode 100644 index 0000000..af595b5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/param/ThinkCardBalanceParam.java @@ -0,0 +1,45 @@ +package com.gxwebsoft.think.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 卡余额记录查询参数 + * + * @author 科技小王子 + * @since 2025-06-20 20:58:38 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ThinkCardBalanceParam对象", description = "卡余额记录查询参数") +public class ThinkCardBalanceParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer cid; + + @QueryField(type = QueryType.EQ) + private Integer vid; + + @QueryField(type = QueryType.EQ) + private Integer uid; + + @QueryField(type = QueryType.EQ) + private BigDecimal balance; + + @ApiModelProperty(value = "每次减少金额") + @QueryField(type = QueryType.EQ) + private BigDecimal reduceEach; + +} diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkCardLogParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkCardLogParam.java index 088ff92..51df354 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkCardLogParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkCardLogParam.java @@ -1,5 +1,6 @@ package com.gxwebsoft.think.param; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonInclude; import com.gxwebsoft.common.core.annotation.QueryField; import com.gxwebsoft.common.core.annotation.QueryType; @@ -10,6 +11,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.List; /** * 查询参数 @@ -48,4 +50,12 @@ public class ThinkCardLogParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer count; + @TableField(exist = false) + private Integer sid; + + @TableField(exist = false) + private List payTypeList; + + @TableField(exist = false) + private List codeList; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java index fddb7c5..ced4333 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java @@ -1,6 +1,7 @@ package com.gxwebsoft.think.param; import java.math.BigDecimal; +import java.util.List; import com.baomidou.mybatisplus.annotation.TableField; import com.gxwebsoft.common.core.annotation.QueryField; @@ -166,4 +167,13 @@ public class ThinkCardParam extends BaseParam { @TableField(exist = false) private String orderBy; + + @TableField(exist = false) + private Boolean notChangeCard; + + @TableField(exist = false) + private List payTypeList; + + @TableField(exist = false) + private List vipList; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkFtpCheckBillParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkFtpCheckBillParam.java new file mode 100644 index 0000000..943e13a --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/param/ThinkFtpCheckBillParam.java @@ -0,0 +1,86 @@ +package com.gxwebsoft.think.param; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 查询参数 + * + * @author 科技小王子 + * @since 2025-05-21 11:58:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ThinkFtpCheckBillParam对象", description = "查询参数") +public class ThinkFtpCheckBillParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "终端号") + private String deviceNo; + + @ApiModelProperty(value = "卡号") + private String cardNo; + + @QueryField(type = QueryType.EQ) + private BigDecimal amount; + + @ApiModelProperty(value = "结算金额") + @QueryField(type = QueryType.EQ) + private BigDecimal settleAmount; + + @ApiModelProperty(value = "手续费") + @QueryField(type = QueryType.EQ) + private BigDecimal feeAmount; + + @ApiModelProperty(value = "实际支付金额") + @QueryField(type = QueryType.EQ) + private BigDecimal paidAmount; + + @ApiModelProperty(value = "参考号") + private String refNo; + + @ApiModelProperty(value = "流水号") + private String flowNo; + + @ApiModelProperty(value = "卡类型") + private String cardType; + + @ApiModelProperty(value = "发卡行") + private String postCardType; + + @ApiModelProperty(value = "支付方式") + private String payType; + + @ApiModelProperty(value = "银商订单号") + private String orderNo; + + private String payTime; + + @TableField(exist = false) + private String payTimeStart; + + @TableField(exist = false) + private String payTimeEnd; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkGoodsCategoryParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkGoodsCategoryParam.java index dbeb051..eefb62e 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkGoodsCategoryParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkGoodsCategoryParam.java @@ -29,6 +29,8 @@ public class ThinkGoodsCategoryParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer pid; + private Integer isShow; + @ApiModelProperty(value = "分类名称") private String catname; diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkInvoiceParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkInvoiceParam.java index 2518c56..b52bdf6 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkInvoiceParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkInvoiceParam.java @@ -92,6 +92,10 @@ public class ThinkInvoiceParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer invoicetype; + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + @QueryField(type = QueryType.EQ) private Integer vid; diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkOrderOffCheckParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkOrderOffCheckParam.java new file mode 100644 index 0000000..314fd51 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/param/ThinkOrderOffCheckParam.java @@ -0,0 +1,65 @@ +package com.gxwebsoft.think.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 折扣审核查询参数 + * + * @author 科技小王子 + * @since 2025-05-26 09:42:46 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ThinkOrderOffCheckParam对象", description = "折扣审核查询参数") +public class ThinkOrderOffCheckParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer oid; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "原价") + @QueryField(type = QueryType.EQ) + private BigDecimal originAmount; + + @ApiModelProperty(value = "折扣") + @QueryField(type = QueryType.EQ) + private BigDecimal rate; + + @ApiModelProperty(value = "折后价") + @QueryField(type = QueryType.EQ) + private BigDecimal offAmount; + + @ApiModelProperty(value = "申请原因") + private String reqReason; + + @ApiModelProperty(value = "拒绝原因") + private String refuseReason; + + @ApiModelProperty(value = "审核人") + @QueryField(type = QueryType.EQ) + private Integer checkUid; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java index 50cc768..37ff032 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java @@ -165,12 +165,30 @@ public class ThinkOrderParam extends BaseParam { @TableField(exist = false) private Integer orderTimeEnd; + @TableField(exist = false) + private Integer payTimeStart; + + @TableField(exist = false) + private Integer payTimeEnd; + @TableField(exist = false) private Boolean useVip; @TableField(exist = false) private Boolean isExport; + @TableField(exist = false) + private Boolean wechatInPos; + + @TableField(exist = false) + private Boolean isUseTime; + @TableField(exist = false) private List payTypeList; + + @TableField(exist = false) + private List idList; + + @TableField(exist = false) + private List orderStatusList; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkRechargeLogParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkRechargeLogParam.java index 19e7ca5..d77e063 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkRechargeLogParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkRechargeLogParam.java @@ -1,5 +1,6 @@ package com.gxwebsoft.think.param; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonInclude; import com.gxwebsoft.common.core.annotation.QueryField; import com.gxwebsoft.common.core.annotation.QueryType; @@ -10,6 +11,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.List; /** * 查询参数 @@ -55,4 +57,15 @@ public class ThinkRechargeLogParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer checkBill; + @TableField(exist = false) + private Integer sid; + + @TableField(exist = false) + private Boolean forUser; + + @TableField(exist = false) + private List vipList; + + @TableField(exist = false) + private List statusList; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipParam.java index 312ef87..1eef3e6 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipParam.java @@ -11,6 +11,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.List; /** * 查询参数 @@ -153,4 +154,7 @@ public class ThinkUsersVipParam extends BaseParam { @TableField(exist = false) private Boolean forAdmin; + + @TableField(exist = false) + private List vipList; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkVipCardsBillsParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkVipCardsBillsParam.java index 9316237..dd4cf8f 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkVipCardsBillsParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkVipCardsBillsParam.java @@ -34,6 +34,10 @@ public class ThinkVipCardsBillsParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer vid; + private Integer cid; + + private Integer oid; + private String date; private String amount; @@ -51,4 +55,10 @@ public class ThinkVipCardsBillsParam extends BaseParam { @TableField(exist = false) private String dateEnd; + + @TableField(exist = false) + private Boolean isVip; + + @TableField(exist = false) + private Boolean isCard; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkVipParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkVipParam.java index df29f7e..e705761 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkVipParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkVipParam.java @@ -43,6 +43,8 @@ public class ThinkVipParam extends BaseParam { @ApiModelProperty(value = "会员卡说明") private String info; + private Integer reportSid; + @ApiModelProperty(value = "折扣率") @QueryField(type = QueryType.EQ) private BigDecimal discount; diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkCardBalanceService.java b/src/main/java/com/gxwebsoft/think/service/ThinkCardBalanceService.java new file mode 100644 index 0000000..02af2be --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/service/ThinkCardBalanceService.java @@ -0,0 +1,57 @@ +package com.gxwebsoft.think.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.think.entity.ThinkCardBalance; +import com.gxwebsoft.think.entity.ThinkVip; +import com.gxwebsoft.think.param.ThinkCardBalanceParam; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 卡余额记录Service + * + * @author 科技小王子 + * @since 2025-06-20 20:58:38 + */ +public interface ThinkCardBalanceService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ThinkCardBalanceParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ThinkCardBalanceParam param); + + /** + * 根据id查询 + * + * @param id + * @return ThinkCardBalance + */ + ThinkCardBalance getByIdRel(Integer id); + + ThinkCardBalance getByCid(Integer cid); + + ThinkCardBalance getByCid(Integer cid, BigDecimal amount); + + ThinkCardBalance getByVid(Integer vid); + + ThinkCardBalance getByVid(Integer vid, BigDecimal amount); + + List getCardList(Integer uid); + + List getVipList(Integer uid); + + BigDecimal getThinkCardBalance(ThinkVip thinkVip); +} diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java b/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java index 240f1f7..eed982b 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java @@ -52,6 +52,8 @@ public interface ThinkCardService extends IService { List listByCodeList(List codeList); + List listByVidList(List vidList); + HashMap createWxCodePay(BigDecimal totalPrice, String orderNo, String desc, String authCode); HashMap checkWechatPayRes(String code); diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkFtpCheckBillService.java b/src/main/java/com/gxwebsoft/think/service/ThinkFtpCheckBillService.java new file mode 100644 index 0000000..e4d5b7d --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/service/ThinkFtpCheckBillService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.think.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.think.entity.ThinkFtpCheckBill; +import com.gxwebsoft.think.param.ThinkFtpCheckBillParam; + +import java.util.List; + +/** + * Service + * + * @author 科技小王子 + * @since 2025-05-21 11:58:28 + */ +public interface ThinkFtpCheckBillService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ThinkFtpCheckBillParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ThinkFtpCheckBillParam param); + + /** + * 根据id查询 + * + * @param id + * @return ThinkFtpCheckBill + */ + ThinkFtpCheckBill getByIdRel(Integer id); + + ThinkFtpCheckBill getByOrderNo(String orderNo); +} diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java b/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java index e06784a..523171f 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java @@ -41,6 +41,8 @@ public interface ThinkInvoiceService extends IService { ThinkInvoice getByOid(Integer oid); + ThinkInvoice getByOidNType(Integer oid, Integer iType); + ThinkInvoice getByOrderNum(String orderNum); ThinkInvoice getData(ThinkInvoiceParam param); diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkOrderOffCheckService.java b/src/main/java/com/gxwebsoft/think/service/ThinkOrderOffCheckService.java new file mode 100644 index 0000000..e383db7 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/service/ThinkOrderOffCheckService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.think.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.think.entity.ThinkOrderOffCheck; +import com.gxwebsoft.think.param.ThinkOrderOffCheckParam; + +import java.util.List; + +/** + * 折扣审核Service + * + * @author 科技小王子 + * @since 2025-05-26 09:42:46 + */ +public interface ThinkOrderOffCheckService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ThinkOrderOffCheckParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ThinkOrderOffCheckParam param); + + /** + * 根据id查询 + * + * @param id + * @return ThinkOrderOffCheck + */ + ThinkOrderOffCheck getByIdRel(Integer id); + + ThinkOrderOffCheck getByOrderId(Integer oid); +} diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java b/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java index 03490c6..63c277c 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java @@ -58,12 +58,16 @@ public interface ThinkOrderService extends IService { HashMap createWxOrder(BigDecimal totalPrice, String orderNo, String desc, String openid, String notify); + HashMap createWxOrder(BigDecimal totalPrice, String orderNo, String desc, String openid, String notify, Integer orderId); + HashMap createWxCodePay(BigDecimal totalPrice, String orderNo, String desc, String authCode); HashMap checkWechatPayRes(String orderNo); Refund refund(ThinkOrderRefundLog orderRefund); + String cancelOrder(ThinkOrder thinkOrder, Boolean forceCancel, Integer refundBy); + ThinkOrder getLastOrderByVid(Integer vid); ThinkOrder getLastOrderByCardCode(String code); @@ -71,4 +75,6 @@ public interface ThinkOrderService extends IService { ThinkOrder getTodayOrder(Integer userId); List getTodayOrderInSite(Integer userId, Integer sid, String date); + + ThinkOrder getUnCheckBillByWechatCode(String wechatCode, long startTime, long endTime); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipService.java b/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipService.java index 01d19fd..e263953 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipService.java @@ -31,6 +31,8 @@ public interface ThinkUsersVipService extends IService { */ List listRel(ThinkUsersVipParam param); + List listByVipIds(List vipIds); + /** * 根据id查询 * @@ -41,5 +43,5 @@ public interface ThinkUsersVipService extends IService { ThinkUsersVip getByOrderNo(String orderNo); - ThinkUsersVip getByVidAndUid(Integer vid, Integer uid); + List getByVidAndUid(Integer vid, Integer uid); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkVipService.java b/src/main/java/com/gxwebsoft/think/service/ThinkVipService.java index 7f63967..56eecdb 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkVipService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkVipService.java @@ -39,6 +39,10 @@ public interface ThinkVipService extends IService { */ ThinkVip getByIdRel(Integer id); + List listBySid(Integer sid); + + List listByReportSid(Integer reportSid); + List listByGroup(ThinkVipParam param); List total(ThinkVipParam param); diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardBalanceServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardBalanceServiceImpl.java new file mode 100644 index 0000000..c3b034a --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardBalanceServiceImpl.java @@ -0,0 +1,132 @@ +package com.gxwebsoft.think.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.think.entity.ThinkVip; +import com.gxwebsoft.think.mapper.ThinkCardBalanceMapper; +import com.gxwebsoft.think.service.ThinkCardBalanceService; +import com.gxwebsoft.think.entity.ThinkCardBalance; +import com.gxwebsoft.think.param.ThinkCardBalanceParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; + +/** + * 卡余额记录Service实现 + * + * @author 科技小王子 + * @since 2025-06-20 20:58:38 + */ +@Service +public class ThinkCardBalanceServiceImpl extends ServiceImpl implements ThinkCardBalanceService { + + @Override + public PageResult pageRel(ThinkCardBalanceParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ThinkCardBalanceParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public ThinkCardBalance getByIdRel(Integer id) { + ThinkCardBalanceParam param = new ThinkCardBalanceParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public ThinkCardBalance getByCid(Integer cid) { + return getOne( + new LambdaQueryWrapper() + .eq(ThinkCardBalance::getCid, cid) + .orderByAsc(ThinkCardBalance::getId) + .ge(ThinkCardBalance::getBalance, 0) + .last("limit 1") + ); + } + + @Override + public ThinkCardBalance getByCid(Integer cid, BigDecimal amount) { + return getOne( + new LambdaQueryWrapper() + .eq(ThinkCardBalance::getCid, cid) + .orderByAsc(ThinkCardBalance::getId) + .ge(ThinkCardBalance::getBalance, amount) + .last("limit 1") + ); + } + + @Override + public ThinkCardBalance getByVid(Integer vid) { + return getOne( + new LambdaQueryWrapper() + .eq(ThinkCardBalance::getVid, vid) + .orderByAsc(ThinkCardBalance::getId) + .ge(ThinkCardBalance::getBalance, 0) + .last("limit 1") + ); + } + + @Override + public ThinkCardBalance getByVid(Integer vid, BigDecimal amount) { + return getOne( + new LambdaQueryWrapper() + .eq(ThinkCardBalance::getVid, vid) + .orderByAsc(ThinkCardBalance::getId) + .ge(ThinkCardBalance::getBalance, amount) + .last("limit 1") + ); + } + + @Override + public List getCardList(Integer uid) { + return list( + new LambdaQueryWrapper() + .isNull(ThinkCardBalance::getVid) + .eq(ThinkCardBalance::getUid, uid) + .gt(ThinkCardBalance::getBalance, 0) + .orderByAsc(ThinkCardBalance::getId) + ); + } + + @Override + public List getVipList(Integer uid) { + return list( + new LambdaQueryWrapper() + .isNull(ThinkCardBalance::getCid) + .eq(ThinkCardBalance::getUid, uid) + .gt(ThinkCardBalance::getBalance, 0) + .orderByAsc(ThinkCardBalance::getId) + ); + } + + @Override + public BigDecimal getThinkCardBalance(ThinkVip thinkVip) { + BigDecimal reduceEach = BigDecimal.ZERO; + // 年卡 + if (thinkVip.getType().equals(1)) { + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf((thinkVip.getTerm() * 365L) + (thinkVip.getMonth() * 30L)), RoundingMode.HALF_UP); + } else if (thinkVip.getType().equals(2)) { + // 次卡 + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(thinkVip.getCount()), RoundingMode.HALF_UP); + } else if (thinkVip.getType().equals(3) || thinkVip.getType().equals(4)) { + // 月卡、季卡 + reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(thinkVip.getMonth() * 30L), RoundingMode.HALF_UP); + } + return reduceEach; + } +} diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardLogServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardLogServiceImpl.java index 4c5298c..359e838 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardLogServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardLogServiceImpl.java @@ -6,15 +6,19 @@ import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.think.entity.ThinkCard; import com.gxwebsoft.think.entity.ThinkCardLog; +import com.gxwebsoft.think.entity.ThinkVip; import com.gxwebsoft.think.mapper.ThinkCardLogMapper; import com.gxwebsoft.think.param.ThinkCardLogParam; import com.gxwebsoft.think.service.ThinkCardLogService; import com.gxwebsoft.think.service.ThinkCardService; +import com.gxwebsoft.think.service.ThinkVipService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; /** @@ -27,9 +31,25 @@ import java.util.List; public class ThinkCardLogServiceImpl extends ServiceImpl implements ThinkCardLogService { @Resource private ThinkCardService thinkCardService; + @Resource + private ThinkVipService thinkVipService; @Override public PageResult pageRel(ThinkCardLogParam param, HttpServletRequest request) { + if (param.getSid() != null) { + List thinkVipList = thinkVipService.listByReportSid(param.getSid()); + if (thinkVipList != null && !thinkVipList.isEmpty()) { + List vidList = thinkVipList.stream().map(ThinkVip::getId).toList(); + List cardList = thinkCardService.listByVidList(vidList); + if (cardList != null && !cardList.isEmpty()) { + List codeList = cardList.stream().map(ThinkCard::getCode).toList(); + param.setCodeList(codeList); + } + }else { + List empty = new ArrayList<>(); + return new PageResult<>(empty, 0L); + } + } PageParam page = new PageParam<>(param); page.setDefaultOrder("id desc, create_time desc"); List list = baseMapper.selectPageRel(page, param); diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardServiceImpl.java index 18fa075..1c875b5 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardServiceImpl.java @@ -2,17 +2,15 @@ package com.gxwebsoft.think.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.think.entity.ThinkRechargeLog; import com.gxwebsoft.think.entity.ThinkUsers; import com.gxwebsoft.think.entity.ThinkVip; import com.gxwebsoft.think.mapper.ThinkCardMapper; -import com.gxwebsoft.think.service.ThinkCardService; +import com.gxwebsoft.think.service.*; import com.gxwebsoft.think.entity.ThinkCard; import com.gxwebsoft.think.param.ThinkCardParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.think.service.ThinkSiteService; -import com.gxwebsoft.think.service.ThinkVipService; -import com.gxwebsoft.think.service.WechatConfigService; import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.exception.ServiceException; import com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByOutTradeNoRequest; @@ -23,10 +21,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -43,6 +38,8 @@ public class ThinkCardServiceImpl extends ServiceImpl pageRel(ThinkCardParam param) { + if (param.getSid() != null) { + List thinkVipList = thinkVipService.listByReportSid(Integer.valueOf(param.getSid())); + if (thinkVipList.isEmpty()) { + List empty = new ArrayList<>(); + return new PageResult<>(empty, 0L); + } + param.setSid(null); + param.setVipList(thinkVipList.stream().map(ThinkVip::getId).toList()); + } PageParam page = new PageParam<>(param); if (param.getOrderBy() != null) { page.setDefaultOrder(param.getOrderBy()); @@ -62,6 +68,9 @@ public class ThinkCardServiceImpl extends ServiceImpl item1.getId().equals(item.getVid())).findFirst().orElse(null)); + if (item.getIsInvoice().equals(1)) { + item.setThinkInvoice(thinkInvoiceService.getByOidNType(item.getId(), 3)); + } } } return new PageResult<>(list, page.getTotal()); @@ -129,6 +138,14 @@ public class ThinkCardServiceImpl extends ServiceImpl listByVidList(List vidList) { + return list( + new LambdaQueryWrapper() + .in(ThinkCard::getVid, vidList) + ); + } + /*** * 扫码支付 * @param totalPrice diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkFtpCheckBillServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkFtpCheckBillServiceImpl.java new file mode 100644 index 0000000..dc7e7ef --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkFtpCheckBillServiceImpl.java @@ -0,0 +1,54 @@ +package com.gxwebsoft.think.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.think.mapper.ThinkFtpCheckBillMapper; +import com.gxwebsoft.think.service.ThinkFtpCheckBillService; +import com.gxwebsoft.think.entity.ThinkFtpCheckBill; +import com.gxwebsoft.think.param.ThinkFtpCheckBillParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Service实现 + * + * @author 科技小王子 + * @since 2025-05-21 11:58:28 + */ +@Service +public class ThinkFtpCheckBillServiceImpl extends ServiceImpl implements ThinkFtpCheckBillService { + + @Override + public PageResult pageRel(ThinkFtpCheckBillParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ThinkFtpCheckBillParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public ThinkFtpCheckBill getByIdRel(Integer id) { + ThinkFtpCheckBillParam param = new ThinkFtpCheckBillParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public ThinkFtpCheckBill getByOrderNo(String orderNo) { + ThinkFtpCheckBillParam param = new ThinkFtpCheckBillParam(); + param.setOrderNo(orderNo); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkInvoiceServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkInvoiceServiceImpl.java index 619c167..d2ad0b2 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkInvoiceServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkInvoiceServiceImpl.java @@ -52,6 +52,14 @@ public class ThinkInvoiceServiceImpl extends ServiceImpl implements ThinkOrderOffCheckService { + @Resource + private ThinkOrderService thinkOrderService; + @Resource + private ThinkOrderInfoService thinkOrderInfoService; + @Resource + private ThinkSiteService thinkSiteService; + + @Override + public PageResult pageRel(ThinkOrderOffCheckParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ThinkOrderOffCheckParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("create_time desc"); + for (ThinkOrderOffCheck thinkOrderOffCheck : list) { + ThinkOrder thinkOrder = thinkOrderService.getById(thinkOrderOffCheck.getOid()); + ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid()); + thinkOrder.setSiteName(thinkSite.getName()); + thinkOrder.setThinkOrderInfos(thinkOrderInfoService.listInOrder(thinkOrderOffCheck.getOid())); + thinkOrderOffCheck.setThinkOrder(thinkOrder); + } + return page.sortRecords(list); + } + + @Override + public ThinkOrderOffCheck getByIdRel(Integer id) { + ThinkOrderOffCheckParam param = new ThinkOrderOffCheckParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public ThinkOrderOffCheck getByOrderId(Integer oid) { + ThinkOrderOffCheckParam param = new ThinkOrderOffCheckParam(); + param.setOid(oid); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderServiceImpl.java index 0022948..adef8e3 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderServiceImpl.java @@ -1,5 +1,6 @@ package com.gxwebsoft.think.service.impl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.IdUtil; @@ -73,6 +74,10 @@ public class ThinkOrderServiceImpl extends ServiceImpl pageRel(ThinkOrderParam param) { + if (param.getIsUseTime() != null && param.getIsUseTime() && param.getCreateTimeStart() != null) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .in(ThinkOrderInfo::getPayStatus, 1, 3) + .ge(ThinkOrderInfo::getStartTime, param.getCreateTimeStart()) + .le(ThinkOrderInfo::getStartTime, param.getCreateTimeEnd()); + if (param.getSid() != null) queryWrapper.eq(ThinkOrderInfo::getSid, param.getSid()); + List orderInfoList = thinkOrderInfoService.list(queryWrapper); + if (orderInfoList != null && !orderInfoList.isEmpty()) { + List orderIdList = orderInfoList.stream().map(ThinkOrderInfo::getOid).toList(); + param.setIdList(orderIdList); + } + param.setCreateTimeStart(null); + param.setCreateTimeEnd(null); + } PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); @@ -185,7 +204,8 @@ public class ThinkOrderServiceImpl extends ServiceImpl vipList = thinkUsersVipService.listByIds(new ArrayList<>(vidList)); + List vipList = new ArrayList<>(); + if (!vidList.isEmpty()) vipList = thinkUsersVipService.listByIds(new ArrayList<>(vidList)); for (ThinkOrder d : list) { List thinkOrderInfoList = thinkOrderInfoService.listInOrder(d.getId()); StringBuilder dateTimeList = new StringBuilder(); @@ -204,7 +224,8 @@ public class ThinkOrderServiceImpl extends ServiceImpl c.getId().equals(d.getCid())).findFirst().orElse(null)); - d.setThinkVip(vipList.stream().filter(c -> c.getId().equals(d.getVid())).findFirst().orElse(null)); + if (!vipList.isEmpty()) + d.setThinkVip(vipList.stream().filter(c -> c.getId().equals(d.getVid())).findFirst().orElse(null)); } // 排序 PageParam page = new PageParam<>(); @@ -285,7 +306,7 @@ public class ThinkOrderServiceImpl extends ServiceImpl() + .eq(ThinkOrder::getVid, thinkUsersVip.getId()) + .eq(ThinkOrder::getSid, 37) + .eq(ThinkOrder::getStartTime, startTimeStr) + .eq(ThinkOrder::getPayStatus, 1) + ); + if (checkOrderNum == 0) { + thinkOrderService.save(order); + String weekStr = ""; + switch (currentWeek) { + case 1: { + weekStr = "星期一"; + } + break; + case 2: { + weekStr = "星期二"; + } + break; + case 3: { + weekStr = "星期三"; + } + break; + case 4: { + weekStr = "星期四"; + } + break; + case 5: { + weekStr = "星期五"; + } + break; + case 6: { + weekStr = "星期六"; + } + break; + case 7: { + weekStr = "星期日"; + } + break; } - break; - case 2: { - weekStr = "星期二"; + ThinkOrderInfo thinkOrderInfo = new ThinkOrderInfo(); + thinkOrderInfo.setOid(order.getId()); + thinkOrderInfo.setSid(order.getSid()); + thinkOrderInfo.setFid(113); + thinkOrderInfo.setSiteName(thinkSite.getName()); + thinkOrderInfo.setFieldName(thinkField.getName()); + thinkOrderInfo.setDateTime(today + "(" + weekStr + ")" + siteTimeItem.getTimePeriod()); + thinkOrderInfo.setPrice(siteTimeItem.getPrice()); + thinkOrderInfo.setChildrenPrice(siteTimeItem.getChildrenPrice()); + if (thinkUsersVip.getCardType().equals(1)) { + thinkOrderInfo.setAdultNum(1); + thinkOrderInfo.setChildrenNum(0); + thinkOrderInfo.setIsChildren(2); + } else { + thinkOrderInfo.setAdultNum(0); + thinkOrderInfo.setChildrenNum(1); + thinkOrderInfo.setIsChildren(1); } - break; - case 3: { - weekStr = "星期三"; - } - break; - case 4: { - weekStr = "星期四"; - } - break; - case 5: { - weekStr = "星期五"; - } - break; - case 6: { - weekStr = "星期六"; - } - break; - case 7: { - weekStr = "星期日"; - } - break; - } - ThinkOrderInfo thinkOrderInfo = new ThinkOrderInfo(); - thinkOrderInfo.setOid(order.getId()); - thinkOrderInfo.setSid(order.getSid()); - thinkOrderInfo.setFid(113); - thinkOrderInfo.setSiteName(thinkSite.getName()); - thinkOrderInfo.setFieldName(thinkField.getName()); - thinkOrderInfo.setDateTime(today + "(" + weekStr + ")" + siteTimeItem.getTimePeriod()); - thinkOrderInfo.setPrice(siteTimeItem.getPrice()); - thinkOrderInfo.setChildrenPrice(siteTimeItem.getChildrenPrice()); - if (thinkUsersVip.getCardType().equals(1)) { - thinkOrderInfo.setAdultNum(1); - thinkOrderInfo.setChildrenNum(0); - thinkOrderInfo.setIsChildren(2); - } else { - thinkOrderInfo.setAdultNum(0); - thinkOrderInfo.setChildrenNum(1); - thinkOrderInfo.setIsChildren(1); - } - thinkOrderInfo.setIsFree(2); - thinkOrderInfo.setType(1); - String[] timePeriodList = siteTimeItem.getTimePeriod().split(" - "); - thinkOrderInfo.setMergeData(today + timePeriodList[0] + timePeriodList[1] + "37113"); - thinkOrderInfo.setStartTime(Integer.valueOf(startTimeStr)); - thinkOrderInfo.setOrderTime(DateUtil.currentSeconds()); - thinkOrderInfo.setTimeFlag(DateUtil.current()); - thinkOrderInfoService.save(thinkOrderInfo); + thinkOrderInfo.setIsFree(2); + thinkOrderInfo.setType(1); + thinkOrderInfo.setUsedNum(0); + String[] timePeriodList = siteTimeItem.getTimePeriod().split(" - "); + thinkOrderInfo.setMergeData(today + timePeriodList[0] + timePeriodList[1] + "37113"); + thinkOrderInfo.setStartTime(Integer.valueOf(startTimeStr)); + thinkOrderInfo.setOrderTime(DateUtil.currentSeconds()); + thinkOrderInfo.setTimeFlag(DateUtil.current()); + thinkOrderInfoService.save(thinkOrderInfo); - thinkOrderController.updatePay(order, null, order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue()); - order.setPayStatus(1); - order.setOrderStatus(1); - thinkOrderService.updateById(order); - redisUtil.set(qrCode, 1, 1L, TimeUnit.HOURS); - return new HashMap<>() {{ - put("res", true); - put("data", order); - }}; + thinkOrderController.updatePay(order, null, order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue()); + order.setPayStatus(1); + order.setOrderStatus(1); + thinkOrderService.updateById(order); + order.setThinkOrderInfos(new ArrayList<>() {{ + add(thinkOrderInfo); + }}); + redisUtil.set(qrCode, 1, 1L, TimeUnit.HOURS); + return new HashMap<>() {{ + put("res", true); + put("data", order); + }}; + } else { + return new HashMap<>() {{ + put("res", false); + put("msg", "重复下单"); + }}; + } } else { return new HashMap<>() {{ put("res", false); @@ -522,9 +561,29 @@ public class ThinkOrderServiceImpl extends ServiceImpl() {{ + put("res", false); + put("msg", "该订单无法使用"); + }}; + } + if (thinkOrder.getSid().equals(37)) { +// List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + String orderDate = DateUtil.format(DateUtil.date(Integer.parseInt(thinkOrder.getStartTime()) * 1000L), "yyyy-MM-dd"); +// System.out.println("37 date cal 111:" + "/" + DateUtil.date(thinkOrderInfoList.get(0).getStartTime() * 1000)); +// System.out.println("37 date cal 222:" + "/" + thinkOrderInfoList.get(0).getStartTime()); + String today = DateUtil.format(DateUtil.date(), "yyyy-MM-dd"); + System.out.println("37 date cal:" + orderDate + "/" + today + "/" + !orderDate.equals(today)); + if (!orderDate.equals(today)) { + return new HashMap<>() {{ + put("res", false); + put("msg", "该订单已过时"); + }}; + } + } } if (ObjectUtil.isNotEmpty(thinkOrder)) { - thinkOrder.setThinkOrderInfos(thinkOrderInfoService.list(new LambdaQueryWrapper().eq(ThinkOrderInfo::getOid, thinkOrder.getId()))); + thinkOrder.setThinkOrderInfos(thinkOrderInfoService.listInOrder(thinkOrder.getId())); } return new HashMap<>() {{ put("res", true); @@ -546,6 +605,11 @@ public class ThinkOrderServiceImpl extends ServiceImpl createWxOrder(BigDecimal totalPrice, String orderNo, String desc, String openid, String notify) { + return createWxOrder(totalPrice, orderNo, desc, openid, notify, null); + } + + @Override + public HashMap createWxOrder(BigDecimal totalPrice, String orderNo, String desc, String openid, String notify, Integer orderId) { final HashMap orderInfo = new HashMap<>(); // 计算金额 @@ -581,6 +645,7 @@ public class ThinkOrderServiceImpl extends ServiceImpl thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + if (!forceCancel) { + if (thinkOrder.getIsAdmin() == null) { + if (!thinkOrder1.getSid().equals(37)) { + if ((int) DateUtil.currentSeconds() - thinkOrder1.getCreateTime() > 1800) { + if (thinkOrderInfoList.get(0).getStartTime() - (int) DateUtil.currentSeconds() < (3600 * 6)) { + return "距离开场已不足6小时不可退"; + } + } + } else { + if (thinkOrder1.getOrderStatus().equals(1)) { + return "该订单已使用不可退"; + } + } + } + } + int num = 0; + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + thinkOrderInfo.setPayStatus(0); + num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum() - thinkOrderInfo.getUsedNum(); + redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString()); + } + thinkOrderInfoService.updateBatchById(thinkOrderInfoList); + + if (thinkOrder1.getVid() != null && !thinkOrder1.getVid().equals(0)) { + ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkOrder1.getVid()); + if (thinkUsersVip != null) { + thinkUsersVip.setUseTime(0L); + ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); + thinkVipCardsBills.setVid(thinkOrder1.getVid()); + thinkVipCardsBills.setUid(thinkOrder1.getUid()); + DateTime dateTime = DateUtil.date(thinkOrderInfoList.get(0).getStartTime() * 1000L); + thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); + thinkVipCardsBillsService.cancelLog(thinkVipCardsBills); + + if (thinkUsersVip.getType().equals(5)) { + BigDecimal newBalance = thinkUsersVip.getRemainingMoney().add(thinkOrder1.getPayPrice()); + thinkUsersVip.setRemainingMoney(newBalance); + } else if (thinkUsersVip.getType().equals(4)) { + BigDecimal newBalance = thinkUsersVip.getRemainingMoney().add(thinkUsersVip.getEachMoney()); + thinkUsersVip.setRemainingMoney(newBalance); + thinkUsersVip.setNum(thinkUsersVip.getNum() + num); + } else { + thinkUsersVip.setNum(thinkUsersVip.getNum() + num); + } + thinkUsersVip.setUseTime(0L); + thinkUsersVipService.updateById(thinkUsersVip); + } + } + ThinkCard card = null; + if (thinkOrder1.getCode() != null && !thinkOrder1.getCode().isEmpty()) { + card = thinkCardService.getByCode(thinkOrder1.getCode()); + } + if (card == null && thinkOrder1.getCid() != null && !thinkOrder1.getCid().equals(0)) + card = thinkCardService.getById(thinkOrder1.getCid()); + if (card != null) { + if (card.getType().equals(5)) { + BigDecimal newBalance = card.getRemainingMoney().add(thinkOrder1.getPayPrice()); + card.setRemainingMoney(newBalance); + } else if (card.getType().equals(4)) { + BigDecimal newBalance = card.getRemainingMoney().add(card.getEachMoney()); + card.setRemainingMoney(newBalance); + } else if (card.getType().equals(2)) { + card.setNum(card.getNum() + num); + } + card.setUseTime(0L); + thinkCardService.updateById(card); + } + if (thinkOrder1.getWechatOrder() != null && !thinkOrder1.getWechatOrder().isEmpty() && thinkOrder1.getWechatOrder().contains("420000")) { + ThinkOrderRefundLog thinkOrderRefundLog = new ThinkOrderRefundLog(); + thinkOrderRefundLog.setOid(thinkOrder.getId()); + thinkOrderRefundLog.setRefundNo("R" + thinkOrder1.getOrderNum()); + thinkOrderRefundLog.setType(0); + thinkOrderRefundLog.setRefundAmount(thinkOrder1.getPayPrice()); + thinkOrderRefundLog.setUid(thinkOrder1.getUid()); + thinkOrderRefundLog.setCreateTime(LocalDateTimeUtil.now()); + thinkOrderRefundLogService.save(thinkOrderRefundLog); + thinkOrderRefundLog.setOrder(thinkOrder1); + thinkOrderService.refund(thinkOrderRefundLog); + } + if (refundBy != null) { + thinkOrder1.setRefundBy(refundBy); + updateById(thinkOrder1); + } + return ""; + } + @Override public ThinkOrder getLastOrderByVid(Integer vid) { return getOne( @@ -739,4 +894,15 @@ public class ThinkOrderServiceImpl extends ServiceImpl() + .eq(ThinkOrder::getWechatOrder, wechatCode) + .eq(ThinkOrder::getCheckBill, 2) + .between(ThinkOrder::getPayTime, startTime, endTime) + .last("limit 1") + ); + } } diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkRechargeLogServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkRechargeLogServiceImpl.java index e93fe23..fd6df2a 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkRechargeLogServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkRechargeLogServiceImpl.java @@ -3,14 +3,14 @@ package com.gxwebsoft.think.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.think.entity.ThinkSite; +import com.gxwebsoft.think.entity.ThinkUsersVip; +import com.gxwebsoft.think.entity.ThinkVip; import com.gxwebsoft.think.mapper.ThinkRechargeLogMapper; -import com.gxwebsoft.think.service.ThinkRechargeLogService; +import com.gxwebsoft.think.service.*; import com.gxwebsoft.think.entity.ThinkRechargeLog; import com.gxwebsoft.think.param.ThinkRechargeLogParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.think.service.ThinkSiteService; -import com.gxwebsoft.think.service.WechatConfigService; import com.wechat.pay.java.core.Config; import com.wechat.pay.java.service.refund.RefundService; import com.wechat.pay.java.service.refund.model.AmountReq; @@ -37,10 +37,29 @@ public class ThinkRechargeLogServiceImpl extends ServiceImpl pageRel(ThinkRechargeLogParam param) { + if (param.getSid() != null) { + List thinkVipList = thinkVipService.listByReportSid(param.getSid()); + if (thinkVipList.isEmpty()) { + List empty = new ArrayList<>(); + return new PageResult<>(empty, 0L); + } + param.setSid(null); + List thinkUsersVipList = thinkUsersVipService.listByVipIds(thinkVipList.stream().map(ThinkVip::getId).toList()); + if (!thinkUsersVipList.isEmpty()) { + param.setVipList(thinkUsersVipList.stream().map(ThinkUsersVip::getId).toList()); + }else { + List empty = new ArrayList<>(); + return new PageResult<>(empty, 0L); + } + } PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkUsersVipServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkUsersVipServiceImpl.java index 44aa5fc..868af90 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkUsersVipServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkUsersVipServiceImpl.java @@ -10,6 +10,7 @@ import com.gxwebsoft.think.entity.ThinkUsersVip; import com.gxwebsoft.think.param.ThinkUsersVipParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.think.service.ThinkVipService; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -29,9 +30,12 @@ import java.util.stream.Collectors; public class ThinkUsersVipServiceImpl extends ServiceImpl implements ThinkUsersVipService { @Resource private ThinkSiteService thinkSiteService; + @Resource + private ThinkVipService thinkVipService; @Override public PageResult pageRel(ThinkUsersVipParam param) { + PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); @@ -62,6 +66,14 @@ public class ThinkUsersVipServiceImpl extends ServiceImpl listByVipIds(List vipIds) { + return list( + new LambdaQueryWrapper() + .in(ThinkUsersVip::getVid, vipIds) + ); + } + @Override public ThinkUsersVip getByIdRel(Integer id) { ThinkUsersVipParam param = new ThinkUsersVipParam(); @@ -77,15 +89,14 @@ public class ThinkUsersVipServiceImpl extends ServiceImpl getByVidAndUid(Integer vid, Integer uid) { + return list( new LambdaQueryWrapper() .eq(ThinkUsersVip::getVid, vid) .eq(ThinkUsersVip::getUid, uid) .eq(ThinkUsersVip::getStatus, 1) .ne(ThinkUsersVip::getPayTime, 0) .orderByDesc(ThinkUsersVip::getExpireTime) - .last("limit 1") ); } } diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipCardsBillsServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipCardsBillsServiceImpl.java index 4f501d6..29f3ac4 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipCardsBillsServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipCardsBillsServiceImpl.java @@ -3,19 +3,20 @@ package com.gxwebsoft.think.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.mapper.ThinkVipCardsBillsMapper; -import com.gxwebsoft.think.service.ThinkCardService; -import com.gxwebsoft.think.service.ThinkUsersService; -import com.gxwebsoft.think.service.ThinkUsersVipService; -import com.gxwebsoft.think.service.ThinkVipCardsBillsService; -import com.gxwebsoft.think.entity.ThinkVipCardsBills; +import com.gxwebsoft.think.service.*; import com.gxwebsoft.think.param.ThinkVipCardsBillsParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * Vip卡每日账单Service实现 @@ -31,19 +32,29 @@ public class ThinkVipCardsBillsServiceImpl extends ServiceImpl pageRel(ThinkVipCardsBillsParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); + List thinkOrderList = new ArrayList<>(); + if (!list.isEmpty()) { + Set oidList = new HashSet<>(); + oidList = list.stream().map(ThinkVipCardsBills::getOid).collect(Collectors.toSet()); + thinkOrderList = thinkOrderService.listByIds(oidList); + } for (ThinkVipCardsBills thinkVipCardsBills : list) { + ThinkOrder thinkOrder = thinkOrderList.stream().filter(d -> d.getId().equals(thinkVipCardsBills.getOid())).findFirst().orElse(null); if (thinkVipCardsBills.getVid() != null) thinkVipCardsBills.setVip(thinkUsersVipService.getById(thinkVipCardsBills.getVid())); if (thinkVipCardsBills.getCid() != null) thinkVipCardsBills.setCard(thinkCardService.getById(thinkVipCardsBills.getCid())); if (thinkVipCardsBills.getUid() != null && !thinkVipCardsBills.getUid().equals(0)) thinkVipCardsBills.setUser(thinkUsersService.getById(thinkVipCardsBills.getUid())); + thinkVipCardsBills.setThinkOrder(thinkOrder); } return new PageResult<>(list, page.getTotal()); } @@ -51,9 +62,42 @@ public class ThinkVipCardsBillsServiceImpl extends ServiceImpl listRel(ThinkVipCardsBillsParam param) { List list = baseMapper.selectListRel(param); + List thinkOrderList = new ArrayList<>(); + List thinkUsersList = new ArrayList<>(); + List thinkVipList = new ArrayList<>(); + List thinkCardList = new ArrayList<>(); + if (!list.isEmpty()) { + Set oidList = list.stream().map(ThinkVipCardsBills::getOid).collect(Collectors.toSet()); + thinkOrderList = thinkOrderService.listByIds(oidList); + + Set uidList = list.stream().map(ThinkVipCardsBills::getUid).collect(Collectors.toSet()); + thinkUsersList = thinkUsersService.listByIds(uidList); + + Set vidList = list.stream().map(ThinkVipCardsBills::getVid).collect(Collectors.toSet()); + thinkVipList = thinkUsersVipService.listByIds(vidList); + + Set cidList = list.stream().map(ThinkVipCardsBills::getCid).collect(Collectors.toSet()); + thinkCardList = thinkCardService.listByIds(cidList); + } // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("create_time desc"); + for (ThinkVipCardsBills thinkVipCardsBills : list) { + ThinkOrder thinkOrder = thinkOrderList.stream().filter(d -> d.getId().equals(thinkVipCardsBills.getOid())).findFirst().orElse(null); + if (thinkVipCardsBills.getVid() != null) { + ThinkUsersVip thinkUsersVip = thinkVipList.stream().filter(d -> d.getId().equals(thinkVipCardsBills.getVid())).findFirst().orElse(null); + thinkVipCardsBills.setVip(thinkUsersVip); + } + if (thinkVipCardsBills.getCid() != null) { + ThinkCard thinkCard = thinkCardList.stream().filter(d -> d.getId().equals(thinkVipCardsBills.getCid())).findFirst().orElse(null); + thinkVipCardsBills.setCard(thinkCard); + } + if (thinkVipCardsBills.getUid() != null && !thinkVipCardsBills.getUid().equals(0)) { + ThinkUsers thinkUsers = thinkUsersList.stream().filter(d -> d.getId().equals(thinkVipCardsBills.getUid())).findFirst().orElse(null); + thinkVipCardsBills.setUser(thinkUsers); + } + thinkVipCardsBills.setThinkOrder(thinkOrder); + } return page.sortRecords(list); } diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipServiceImpl.java index 541e871..622114d 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkVipServiceImpl.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.think.entity.ThinkCard; import com.gxwebsoft.think.entity.ThinkSite; import com.gxwebsoft.think.entity.ThinkUsersVip; import com.gxwebsoft.think.entity.ThinkVip; @@ -13,7 +12,6 @@ import com.gxwebsoft.think.param.ThinkVipParam; import com.gxwebsoft.think.service.ThinkSiteService; import com.gxwebsoft.think.service.ThinkUsersVipService; import com.gxwebsoft.think.service.ThinkVipService; -import org.beetl.ext.fn.StringUtil; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -77,6 +75,22 @@ public class ThinkVipServiceImpl extends ServiceImpl i return param.getOne(baseMapper.selectListRel(param)); } + @Override + public List listBySid(Integer sid) { + return list( + new LambdaQueryWrapper() + .like(ThinkVip::getSid, sid) + ); + } + + @Override + public List listByReportSid(Integer reportSid) { + return list( + new LambdaQueryWrapper() + .eq(ThinkVip::getReportSid, reportSid) + ); + } + @Override public List listByGroup(ThinkVipParam param) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -89,8 +103,9 @@ public class ThinkVipServiceImpl extends ServiceImpl i queryWrapper.eq(ThinkVip::getType, param.getType()); } } - queryWrapper.eq(ThinkVip::getIsUse, 1) + queryWrapper .eq(ThinkVip::getVipType, 2) + .eq(ThinkVip::getIsSale, 1) .groupBy(ThinkVip::getSid); List list = list(queryWrapper); if (!list.isEmpty()) { @@ -98,7 +113,7 @@ public class ThinkVipServiceImpl extends ServiceImpl i LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ThinkVip::getSid, thinkVip.getSid()) .eq(ThinkVip::getVipType, 2) - .eq(ThinkVip::getIsUse, 1); + .eq(ThinkVip::getIsSale, 1); if (param.getType() != null) { if (param.getType().equals(0)) { wrapper.in(ThinkVip::getType, 1, 3, 4); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 1cd54ee..12610e2 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -21,5 +21,7 @@ socketio: # 框架配置 config: # 开发环境接口 - server-url: https://gxtyzx-api2.websoft.top/api - upload-path: /www/wwwroot/gxtyzx-api/file/ +# server-url: https://gxtyzx-api2.websoft.top/api +# upload-path: /www/wwwroot/gxtyzx-api/file/ + server-url: http://127.0.0.1:9099/api + upload-path: /Users/liangxin/Project/JAVA/gxtyzx-java/file/ diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index bc4f05a..1293c20 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -14,9 +14,9 @@ logging: file: name: websoft-modules.log level: - root: DEBUG - com.gxwebsoft: DEBUG - com.baomidou.mybatisplus: DEBUG + root: WARN + com.gxwebsoft: ERROR + com.baomidou.mybatisplus: ERROR socketio: host: 0.0.0.0 #IP地址 @@ -25,7 +25,7 @@ socketio: config: # 生产环境接口 server-url: https://gxtyzx-server.websoft.top/api - upload-path: /www/wwwroot/file.ws/ + upload-path: /www/wwwroot/gxtyzx-api/file/ # 阿里云OSS云存储 endpoint: https://oss-cn-shenzhen.aliyuncs.com diff --git a/src/test/java/com/gxwebsoft/generator/ThinkGenerator.java b/src/test/java/com/gxwebsoft/generator/ThinkGenerator.java index 6694a4f..56903b5 100644 --- a/src/test/java/com/gxwebsoft/generator/ThinkGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/ThinkGenerator.java @@ -118,7 +118,8 @@ public class ThinkGenerator { // "think_wechat_bill", // "think_wechat_bill_log", // "think_cards_bills", - "think_users_vip_buy_log", +// "think_ftp_check_bill", + "think_card_balance", }; // 需要去除的表前缀 private static final String[] TABLE_PREFIX = new String[]{