From 182f2a1906a4d7c15960bdf8ca89b7c8f6aeead7 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Wed, 9 Apr 2025 09:58:39 +0800 Subject: [PATCH] 250409 --- .gitignore | 1 + .../common/core/security/SecurityConfig.java | 3 +- pom.xml | 22 +- .../cms/controller/WebsiteController.java | 4 +- .../security/JwtAuthenticationFilter.java | 2 +- .../common/core/security/SecurityConfig.java | 4 +- .../common/core/utils/FileServerUtil.java | 2 +- .../common/core/utils/RequestUtil.java | 2 +- .../common/core/utils/SignCheckUtil.java | 2 +- .../common/core/utils/WxOfficialUtil.java | 2 +- .../gxwebsoft/common/system/entity/User.java | 2 + .../think/controller/PrinterController.java | 196 + .../controller/SchedulingController.java | 47 +- .../think/controller/ThinkCardController.java | 63 +- .../controller/ThinkCardLogController.java | 36 +- .../controller/ThinkDepositController.java | 29 +- .../controller/ThinkGoodsOrderController.java | 6 +- .../controller/ThinkInvoiceController.java | 56 +- .../ThinkMachineOpenLogController.java | 3 +- .../controller/ThinkOrderController.java | 1843 ++- .../ThinkOrderRefundLogController.java | 43 +- .../ThinkRechargeLogController.java | 72 +- .../think/controller/ThinkSiteController.java | 2 + .../controller/ThinkSiteTimeController.java | 23 +- .../ThinkUsersVipBuyLogController.java | 110 + .../controller/ThinkUsersVipController.java | 172 +- .../com/gxwebsoft/think/entity/ThinkCard.java | 17 + .../gxwebsoft/think/entity/ThinkDeposit.java | 5 + .../gxwebsoft/think/entity/ThinkInvoice.java | 2 + .../gxwebsoft/think/entity/ThinkOrder.java | 34 +- .../think/entity/ThinkOrderInfo.java | 14 +- .../think/entity/ThinkRechargeLog.java | 11 + .../com/gxwebsoft/think/entity/ThinkSite.java | 2 + .../gxwebsoft/think/entity/ThinkUsersVip.java | 4 + .../think/entity/ThinkUsersVipBuyLog.java | 59 + .../com/gxwebsoft/think/entity/ThinkVip.java | 4 + .../mapper/ThinkUsersVipBuyLogMapper.java | 37 + .../think/mapper/xml/ThinkCardLogMapper.xml | 4 +- .../think/mapper/xml/ThinkCardMapper.xml | 11 +- .../think/mapper/xml/ThinkInvoiceMapper.xml | 5 +- .../think/mapper/xml/ThinkOrderMapper.xml | 24 +- .../mapper/xml/ThinkUsersVipBuyLogMapper.xml | 63 + .../gxwebsoft/think/param/ThinkCardParam.java | 8 + .../think/param/ThinkGoodsOrderParam.java | 3 + .../think/param/ThinkOrderParam.java | 16 + .../gxwebsoft/think/param/ThinkSiteParam.java | 7 + .../think/param/ThinkUsersVipBuyLogParam.java | 52 + .../think/service/ThinkCardLogService.java | 3 + .../think/service/ThinkCardService.java | 10 + .../think/service/ThinkInvoiceService.java | 1 + .../service/ThinkMachineOpenLogService.java | 2 + .../think/service/ThinkOrderInfoService.java | 4 + .../think/service/ThinkOrderService.java | 11 + .../service/ThinkRechargeLogService.java | 6 + .../think/service/ThinkSiteTimeService.java | 2 + .../service/ThinkUsersVipBuyLogService.java | 43 + .../service/impl/ThinkCardLogServiceImpl.java | 28 +- .../service/impl/ThinkCardServiceImpl.java | 132 +- .../service/impl/ThinkDepositServiceImpl.java | 2 +- .../service/impl/ThinkFieldServiceImpl.java | 45 +- .../impl/ThinkGoodsOrderInfoServiceImpl.java | 2 - .../service/impl/ThinkInvoiceServiceImpl.java | 15 + .../impl/ThinkMachineOpenLogServiceImpl.java | 9 + .../impl/ThinkOrderInfoServiceImpl.java | 21 +- .../service/impl/ThinkOrderServiceImpl.java | 600 +- .../impl/ThinkRechargeLogServiceImpl.java | 67 +- .../service/impl/ThinkSiteServiceImpl.java | 9 + .../impl/ThinkSiteTimeServiceImpl.java | 10 + .../impl/ThinkUsersVipBuyLogServiceImpl.java | 54 + .../impl/ThinkUsersVipServiceImpl.java | 2 + .../impl/ThinkVipCardsBillsServiceImpl.java | 2 + .../service/impl/ThinkVipServiceImpl.java | 7 + .../service/impl/WechatConfigServiceImpl.java | 20 +- .../com/gxwebsoft/think/vo/FieldPeriodVo.java | 8 + src/main/resources/application-dev-local.yml | 6 +- src/main/resources/application-dev.yml | 4 +- src/main/resources/application-prod.yml | 14 +- src/main/resources/jar/yly_sdk_2.2.2.jar | Bin 0 -> 11147 bytes .../gxwebsoft/generator/ThinkGenerator.java | 10 +- websoft-modules.log | 10112 +++++++++++++++- 80 files changed, 13980 insertions(+), 410 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/think/controller/PrinterController.java create mode 100644 src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipBuyLogController.java create mode 100644 src/main/java/com/gxwebsoft/think/entity/ThinkUsersVipBuyLog.java create mode 100644 src/main/java/com/gxwebsoft/think/mapper/ThinkUsersVipBuyLogMapper.java create mode 100644 src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipBuyLogMapper.xml create mode 100644 src/main/java/com/gxwebsoft/think/param/ThinkUsersVipBuyLogParam.java create mode 100644 src/main/java/com/gxwebsoft/think/service/ThinkUsersVipBuyLogService.java create mode 100644 src/main/java/com/gxwebsoft/think/service/impl/ThinkUsersVipBuyLogServiceImpl.java create mode 100644 src/main/resources/jar/yly_sdk_2.2.2.jar diff --git a/.gitignore b/.gitignore index a2a3040..9704de8 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ build/ ### VS Code ### .vscode/ +/file/ diff --git a/modules/common/core/security/SecurityConfig.java b/modules/common/core/security/SecurityConfig.java index 781d2e2..127bea5 100644 --- a/modules/common/core/security/SecurityConfig.java +++ b/modules/common/core/security/SecurityConfig.java @@ -57,7 +57,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { "/api/wxWorkQrConnect", "/api/sys/user-plan-log/wx-pay/**", "/api/wx-official/**", - "/lvQ4EoivKJ.txt" + "/lvQ4EoivKJ.txt", + "/api/think/think-recharge-log/refund-notify" ) .permitAll() .anyRequest() diff --git a/pom.xml b/pom.xml index e408efa..76e8f91 100644 --- a/pom.xml +++ b/pom.xml @@ -312,7 +312,19 @@ restful-sdk 1.0.0.14 - + + com.yly + print_sdk_library + 2.2.2 + system + ${project.basedir}/src/main/resources/jar/yly_sdk_2.2.2.jar + + + + io.github.hyeric + wechatpay-java-codepay + 1.0.0 + @@ -352,6 +364,13 @@ 16 + + org.springframework.boot + spring-boot-maven-plugin + + true + + @@ -368,5 +387,4 @@ https://repo.e-iceblue.cn/repository/maven-public/ - diff --git a/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java b/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java index 1927b0f..8320ec3 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java @@ -132,7 +132,7 @@ public class WebsiteController extends BaseController { // 读取会员信息 if(access_token != null){ // 请求主服务器获取租户信息 - String result = HttpRequest.get("https://server.gxwebsoft.com/api/auth/user") + String result = HttpRequest.get("https://gxtyzx-server.websoft.top/api/auth/user") .header("Authorization", access_token) .header("Tenantid", tenantId.toString()) .timeout(20000)//超时,毫秒 @@ -179,7 +179,7 @@ public class WebsiteController extends BaseController { private void createWebsite(String access_token) { final Integer tenantId = getTenantId(); // 请求主服务器获取租户信息 - String result = HttpRequest.get("https://server.gxwebsoft.com/api/auth/tenant") + String result = HttpRequest.get("https://gxtyzx-server.websoft.top/api/auth/tenant") .header("Authorization", access_token) .header("Tenantid", tenantId.toString()) .timeout(20000)//超时,毫秒 diff --git a/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java b/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java index 7dd44f7..000948d 100644 --- a/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java +++ b/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java @@ -57,7 +57,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { map.put("username", jwtSubject.getUsername()); map.put("tenantId", jwtSubject.getTenantId()); // 链式构建请求 - String result = HttpRequest.post("https://server.gxwebsoft.com/api/auth/user") + String result = HttpRequest.post("https://gxtyzx-server.websoft.top/api/auth/user") .header("Authorization", access_token) .header("Tenantid", jwtSubject.getTenantId().toString()) .body(JSONUtil.toJSONString(map))//表单内容 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 5fe7178..c17a3f7 100644 --- a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java @@ -76,8 +76,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { "/api/think/think-deposit/refund-notify", "/api/think/think-machine-open-log", "/api/think/think-order/check-code", + "/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-cards-bills/make-bill", + "/api/think/think-recharge-log/refund-notify" ) .permitAll() .anyRequest() diff --git a/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java index 45201d2..48d436a 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java @@ -42,7 +42,7 @@ public class FileServerUtil { File outFile = getUploadFile(file.getOriginalFilename(), directory, uuidName); if (!outFile.getParentFile().exists()) { if (!outFile.getParentFile().mkdirs()) { - throw new RuntimeException("make directory fail"); + throw new RuntimeException("make directory fail: " + outFile.getParentFile()); } } file.transferTo(outFile); 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 12f05d7..65d72db 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java @@ -15,7 +15,7 @@ import java.util.HashMap; @Component public class RequestUtil { - private static final String host = "https://server.gxwebsoft.com/api"; + private static final String host = "https://gxtyzx-server.websoft.top/api"; private static String ACCESS_TOKEN; private static String TENANT_ID; diff --git a/src/main/java/com/gxwebsoft/common/core/utils/SignCheckUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/SignCheckUtil.java index c07ab55..ab9c98f 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/SignCheckUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/SignCheckUtil.java @@ -183,7 +183,7 @@ public class SignCheckUtil { return true; } // 服务器域名白名单列表 - whiteDomains.add("server.gxwebsoft.com"); + whiteDomains.add("gxtyzx-server.websoft.top"); System.out.println("whiteDomains = " + whiteDomains); System.out.println(">>> domainName = " + domainName); for(String item: whiteDomains){ diff --git a/src/main/java/com/gxwebsoft/common/core/utils/WxOfficialUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/WxOfficialUtil.java index 077e615..c8bafb5 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/WxOfficialUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/WxOfficialUtil.java @@ -72,7 +72,7 @@ public class WxOfficialUtil { } public String getCodeUrl() throws UnsupportedEncodingException { - String encodedReturnUrl = URLEncoder.encode("https://server.gxwebsoft.com/api/open/wx-official/accessToken","UTF-8"); + String encodedReturnUrl = URLEncoder.encode("https://gxtyzx-server.websoft.top/api/open/wx-official/accessToken","UTF-8"); return "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+ this.appId +"&redirect_uri=" + encodedReturnUrl + "&response_type=code&scope=snsapi_userinfo&state="+ this.tenantId +"#wechat_redirect"; } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/User.java b/src/main/java/com/gxwebsoft/common/system/entity/User.java index c3a2d03..3e4a7ec 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/User.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/User.java @@ -50,6 +50,8 @@ public class User implements UserDetails { @ApiModelProperty("头像") private String avatar; + private String limitSite; + @ApiModelProperty("头像") private String bgImage; diff --git a/src/main/java/com/gxwebsoft/think/controller/PrinterController.java b/src/main/java/com/gxwebsoft/think/controller/PrinterController.java new file mode 100644 index 0000000..1151d78 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/controller/PrinterController.java @@ -0,0 +1,196 @@ +package com.gxwebsoft.think.controller; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.SymmetricAlgorithm; +import cn.hutool.crypto.symmetric.SymmetricCrypto; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.gxwebsoft.common.core.utils.RedisUtil; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.think.entity.*; +import com.gxwebsoft.think.service.*; +import com.yly.print_sdk_library.RequestMethod; +import com.yly.print_sdk_library.UtilUrl; +import com.yly.print_sdk_library.Utils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; + +@Api(tags = "打印") +@RestController +@RequestMapping("/api/print") +public class PrinterController extends BaseController { + @Resource + private ThinkOrderService thinkOrderService; + @Resource + private ThinkSiteService thinkSiteService; + @Resource + private ThinkCardService thinkCardService; + @Resource + private ThinkUsersVipService thinkUsersVipService; + @Resource + private ThinkOrderInfoService thinkOrderInfoService; + + private String client_id = "1070543699"; + + private String client_secret = "e7efb077f7e3d986cc690f8cf5586522"; + @Resource + private RedisUtil redisUtil; + + @PostMapping() + public ApiResult> print(@RequestBody Map body) throws Exception { + String[] payType = { + "", + "微信支付", + "积分", + "支付宝", + "现金", + "POS机", + "VIP月卡", + "VIP年卡", + "VIP次卡", + "IC月卡", + "IC年卡", + "IC次卡", + "免费", + "VIP充值卡", + "IC充值卡", + "积分支付", + "VIP季卡", + "IC季卡" + }; + ThinkOrder thinkOrder = thinkOrderService.getById((Integer) body.get("orderId")); + ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid()); + if (thinkSite.getMachineCode() == null || thinkSite.getMachineCode().isEmpty()) return fail("未配置打印机"); + DateTime dateTime = DateUtil.date((thinkOrder.getCreateTime() * 1000L)); + String createTime = DateUtil.format(dateTime, "yyyy-MM-dd HH:mm:ss"); + + String startTime = DateUtil.format(DateUtil.date((Long.parseLong(thinkOrder.getStartTime()) * 1000L)), "yyyy-MM-dd HH:mm:ss"); + String payTime = ""; + if (thinkOrder.getPayTime() != null && thinkOrder.getPayTime() != 0) { + payTime = DateUtil.format(DateUtil.date((thinkOrder.getPayTime() * 1000L)), "yyyy-MM-dd HH:mm:ss"); + } + String name = thinkOrder.getName().charAt(0) + StrUtil.repeat("*", thinkOrder.getName().length() - 1); + String cardName = ""; + String cardExpired = ""; + BigDecimal remainAmount = BigDecimal.ZERO; + int remainNum = 0; + if (thinkOrder.getCid() != null && thinkOrder.getCid() != 0) { + ThinkCard thinkCard = thinkCardService.getById(thinkOrder.getCid()); + cardName = thinkCard.getName(); + remainAmount = thinkCard.getRemainingMoney(); + remainNum = thinkCard.getNum(); + cardExpired = DateUtil.format(DateUtil.date((thinkCard.getExpireTime() * 1000L)), "yyyy-MM-dd HH:mm:ss"); + } + if (thinkOrder.getVid() != null && thinkOrder.getVid() != 0) { + ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkOrder.getVid()); + cardName = thinkUsersVip.getName(); + remainAmount = thinkUsersVip.getRemainingMoney(); + remainNum = thinkUsersVip.getNum(); + cardExpired = DateUtil.format(DateUtil.date((thinkUsersVip.getExpireTime() * 1000L)), "yyyy-MM-dd HH:mm:ss"); + } + + StringBuilder content = new StringBuilder("" + thinkSite.getName() + ""); + content.append("场租账单"); + content.append(StrUtil.repeat("-", 32)); + + content.append("开始时间: ").append(startTime).append("\n"); + content.append("支付时间: ").append(payTime).append("\n"); + content.append("订单编号: ").append(thinkOrder.getOrderNum()).append("\n"); + content.append("微信订单号: ").append(thinkOrder.getWechatOrder() == null ? "" : thinkOrder.getWechatOrder()).append("\n"); + content.append("姓名: ").append(name).append("\n"); + if (!cardName.isEmpty()) { + content.append("卡类型: ").append(cardName).append("\n"); + content.append("有效期: ").append(cardExpired).append("\n"); + } + + if (thinkSite.getId().equals(37)) { + String secretKey = redisUtil.get("secretKey_10150"); + 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); + String qr = aes.encryptHex(thinkOrder.getId() + "_" + timestamp + "_none_forDevice"); + content.append("06,").append(qr).append(""); + } + + content.append(StrUtil.repeat("-", 32)); + content.append(""); + content.append("项目数量金额"); + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + String date = DateUtil.format(DateUtil.date((thinkOrderInfo.getStartTime() * 1000L)), "yyyy-MM-dd"); + String[] dateTimeList = thinkOrderInfo.getDateTime().split("\\)"); + content.append("") + .append(thinkOrderInfo.getFieldName()) + .append("\n") + .append(date) + .append("\n") + .append(dateTimeList[1]) + .append("") + .append(thinkOrderInfo.getAdultNum()).append("") + .append(thinkOrderInfo.getPrice()).append(""); + } + content.append(""); + content.append(StrUtil.repeat("-", 32)); + content.append("消费金额: ").append(thinkOrder.getTotalPrice()).append("\n"); + content.append("付款方式: ").append(thinkOrder.getPayType() > 0 ? payType[thinkOrder.getPayType()] : "").append("\n"); + if (remainAmount != null) { + content.append("剩余金额: ").append(remainAmount).append("\n"); + content.append("剩余次数: ").append(remainNum).append("\n"); + } + content.append("备注: ").append(thinkOrder.getDesc() == null ? "" : thinkOrder.getDesc()).append("\n"); + content.append("操作员: ").append("\n"); + content.append("下单时间: ").append(createTime).append("\n"); + content.append(StrUtil.repeat("-", 32)); + content.append("").append(thinkSite.getTel()).append("").append("\n"); + content.append("提示:完成的订单不给予退票,入场前请谨慎使用").append("\n"); + print(thinkSite.getMachineCode(), content.toString()); + return success(); + } + + private void print(String machineCode, String content) throws Exception { + RequestMethod requestMethod = RequestMethod.getInstance(); + requestMethod.init(client_id, client_secret); + String token = getToken(); + String res = requestMethod.printIndex(token, machineCode, content, RandomUtil.randomString(32)); + System.out.println(res); + } + + private void printWithQr(String machineCode, String pic) throws Exception { + RequestMethod requestMethod = RequestMethod.getInstance(); + requestMethod.init(client_id, client_secret); + String token = getToken(); + String res = requestMethod.picturePrintIndex(token, machineCode, pic, RandomUtil.randomString(32)); + System.out.println(res); + } + + private String getToken() throws Exception { + String token; + if (redisUtil.get("printerToken") == null) { + RequestMethod requestMethod = RequestMethod.getInstance(); + requestMethod.init(client_id, client_secret); + JSONObject resObj = JSONUtil.parseObj(requestMethod.getAccessToken()); + if (resObj.getInt("error") != 0) throw new Exception(resObj.getStr("error_description")); + JSONObject body = JSONUtil.parseObj(resObj.getStr("body")); + token = body.getStr("access_token"); + redisUtil.set("printerToken", token); + } else token = redisUtil.get("printerToken"); + return token; + } +} diff --git a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java index f1c244d..c042664 100644 --- a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java +++ b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java @@ -1,10 +1,13 @@ package com.gxwebsoft.think.controller; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.think.entity.ThinkOrder; +import com.gxwebsoft.think.entity.ThinkOrderInfo; import com.gxwebsoft.think.entity.ThinkSite; +import com.gxwebsoft.think.service.ThinkOrderInfoService; import com.gxwebsoft.think.service.ThinkOrderService; import com.gxwebsoft.think.service.ThinkSiteService; import io.swagger.annotations.Api; @@ -14,6 +17,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; /** * 定时任务 @@ -31,17 +36,32 @@ public class SchedulingController extends BaseController { private ThinkOrderService thinkOrderService; @Resource private ThinkSiteService thinkSiteService; + @Resource + private ThinkOrderInfoService thinkOrderInfoService; @Scheduled(cron = "* * * * * *") public void task() { // 15分钟取消订单 - thinkOrderService.update( + List orderList = thinkOrderService.list( new LambdaUpdateWrapper() - .set(ThinkOrder::getOrderStatus, 3) .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")) { @@ -51,6 +71,29 @@ public class SchedulingController extends BaseController { ); } + // 每天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(); + thinkOrderService.update( + new LambdaUpdateWrapper() + .in(ThinkOrder::getId, orderIdList) + .eq(ThinkOrder::getOrderStatus, 2) + .eq(ThinkOrder::getPayStatus, 1) + .set(ThinkOrder::getOrderStatus, 1) + ); + } + } + } } \ No newline at end of file diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java index 6e4605c..d5194e2 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java @@ -10,15 +10,9 @@ import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; 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.ThinkUsers; -import com.gxwebsoft.think.entity.ThinkVip; -import com.gxwebsoft.think.entity.ThinkVipCardsBills; +import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.param.ThinkCardParam; -import com.gxwebsoft.think.service.ThinkCardBindLogService; -import com.gxwebsoft.think.service.ThinkCardService; -import com.gxwebsoft.think.service.ThinkVipCardsBillsService; -import com.gxwebsoft.think.service.ThinkVipService; +import com.gxwebsoft.think.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -29,7 +23,9 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Map; /** * 控制器 @@ -49,6 +45,8 @@ public class ThinkCardController extends BaseController { private ThinkVipService thinkVipService; @Resource private ThinkVipCardsBillsService thinkVipCardsBillsService; + @Resource + private ThinkSiteService thinkSiteService; @ApiOperation("用户卡") @PostMapping("/user-card") @@ -57,6 +55,7 @@ public class ThinkCardController extends BaseController { if (getLoginUser() == null) return fail("请先登录"); ThinkUsers thinkUsers = new ThinkUsers(); thinkUsers.setId(getLoginUser().getUid()); + thinkUsers.setPhone(getLoginUser().getPhone()); return success(thinkCardService.userCard(thinkUsers)); } @@ -74,12 +73,18 @@ public class ThinkCardController extends BaseController { return success(thinkCardService.listRel(param)); } - @PreAuthorize("hasAuthority('think:thinkCard:list')") @ApiOperation("根据id查询") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { // 使用关联查询 - return success(thinkCardService.getByIdRel(id)); + ThinkCard thinkCard = thinkCardService.getByIdRel(id); + thinkCard.setSiteList(thinkSiteService.listByIds(Arrays.stream(thinkCard.getSid().split(",")).map(Integer::valueOf).toList())); + if (thinkCard.getOriginCardCode() != null) { + thinkCard.setOldCard(thinkCardService.getByCode(thinkCard.getOriginCardCode())); + } + ThinkCard newCard = thinkCardService.getByOriginCode(thinkCard.getCode()); + if (newCard != null) thinkCard.setNewCard(newCard); + return success(thinkCard); } @ApiOperation("批量生成") @@ -168,12 +173,48 @@ public class ThinkCardController extends BaseController { @ApiOperation("添加") @PostMapping() public ApiResult> save(@RequestBody ThinkCard thinkCard) { + ThinkCard exist = thinkCardService.getByCode(thinkCard.getCode()); + if (exist != null) { + return fail("序列号已存在"); + } + ThinkCard existByCardNum = thinkCardService.getByCardNum(thinkCard.getCardNum()); + if (existByCardNum != null) { + return fail("卡号已存在"); + } + if (thinkCard.getCode() == null) thinkCard.setCode(RandomUtil.randomString(8)); + 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); + } + thinkCard.setCreateTime(DateUtil.currentSeconds()); + thinkCard.setUpdateTime(DateUtil.currentSeconds()); if (thinkCardService.save(thinkCard)) { - return success("添加成功"); + return success("添加成功", thinkCard.getId()); } return fail("添加失败"); } + @ApiOperation("付款码支付") + @PostMapping("/codePay/{id}") + public ApiResult> codePay(@PathVariable Integer id, @RequestBody Map data) { + ThinkCard thinkCard = thinkCardService.getById(id); + String desc = thinkCard.getName(); + Map res = thinkCardService.createWxCodePay(thinkCard.getPrice(), thinkCard.getCode(), desc, data.get("code")); + return success(res); + } + + @ApiOperation("订单状态查询") + @PostMapping("/checkWechatPayRes/{id}") + public ApiResult> checkWechatPayRes(@PathVariable Integer id) { + ThinkCard thinkCard = thinkCardService.getById(id); + Map res = thinkCardService.checkWechatPayRes(thinkCard.getCode()); + return success(res); + } + + @ApiOperation("修改") @PutMapping() public ApiResult> update(@RequestBody ThinkCard thinkCard) { diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java index ca99dcc..d1609d5 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java @@ -1,6 +1,8 @@ package com.gxwebsoft.think.controller; +import cn.hutool.core.date.DateUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.think.entity.ThinkCard; import com.gxwebsoft.think.service.ThinkCardLogService; import com.gxwebsoft.think.entity.ThinkCardLog; import com.gxwebsoft.think.param.ThinkCardLogParam; @@ -10,12 +12,14 @@ 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.ThinkCardService; 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; /** @@ -30,12 +34,14 @@ import java.util.List; public class ThinkCardLogController extends BaseController { @Resource private ThinkCardLogService thinkCardLogService; + @Resource + private ThinkCardService thinkCardService; @ApiOperation("分页查询") @GetMapping("/page") - public ApiResult> page(ThinkCardLogParam param) { + public ApiResult> page(ThinkCardLogParam param, HttpServletRequest request) { // 使用关联查询 - return success(thinkCardLogService.pageRel(param)); + return success(thinkCardLogService.pageRel(param, request)); } @ApiOperation("查询全部") @@ -56,7 +62,33 @@ public class ThinkCardLogController extends BaseController { @ApiOperation("添加") @PostMapping() public ApiResult> save(@RequestBody ThinkCardLog thinkCardLog) { + 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)); + } else { + thinkCard.setExpireTime(thinkCard.getExpireTime() + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30)); + } + // 充值卡 + 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)) { + thinkCard.setNum(thinkCardLog.getCount()); + } else { + thinkCard.setNum(thinkCardLog.getCount() + thinkCard.getCount()); + } +// thinkCard.setNum(thinkCard.getCount() + thinkCard.getCount()); + } + thinkCard.setNumber(thinkCard.getNumber() + 1); + thinkCard.setCount(thinkCard.getCount() + thinkCardLog.getCount()); + thinkCardService.updateById(thinkCard); return success("添加成功"); } return fail("添加失败"); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkDepositController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkDepositController.java index f43f840..b505e12 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkDepositController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkDepositController.java @@ -132,18 +132,25 @@ public class ThinkDepositController extends BaseController { @PostMapping() public ApiResult> save(@RequestBody ThinkDeposit thinkDeposit) { User user = getLoginUser(); - ThinkUsers thinkUsers = thinkUsersService.getById(getLoginUser().getUid()); - thinkDeposit.setName(thinkUsers.getUsername()); - thinkDeposit.setPhone(user.getPhone()); + if (thinkDeposit.getIsAdmin() == null) { + ThinkUsers thinkUsers = thinkUsersService.getById(getLoginUser().getUid()); + thinkDeposit.setName(thinkUsers.getUsername()); + thinkDeposit.setPhone(user.getPhone()); + thinkDeposit.setStatus(0); + thinkDeposit.setAid(0); + } else { + thinkDeposit.setName(user.getUsername()); + thinkDeposit.setAid(user.getUserId()); + } thinkDeposit.setOrderNum(IdUtil.getSnowflake().nextIdStr()); - thinkDeposit.setStatus(0); - thinkDeposit.setAid(0); thinkDeposit.setCreateTime(DateUtil.currentSeconds()); thinkDeposit.setUpdateTime(DateUtil.currentSeconds()); if (thinkDepositService.save(thinkDeposit)) { - String notify = "https://gxtyzx-api.websoft.top/api/think/think-deposit/notify"; - return success(thinkOrderService.createWxOrder(thinkDeposit.getMoney(), thinkDeposit.getOrderNum(), "押金", - getLoginUser().getOpenid(), notify)); + if (thinkDeposit.getIsAdmin() == null) { + String notify = "https://gxtyzx-api2.websoft.top/api/think/think-deposit/notify"; + return success(thinkOrderService.createWxOrder(thinkDeposit.getMoney(), thinkDeposit.getOrderNum(), "押金", + getLoginUser().getOpenid(), notify)); + } else return success("添加成功"); } return fail("添加失败"); } @@ -153,8 +160,10 @@ public class ThinkDepositController extends BaseController { public ApiResult> update(@RequestBody ThinkDeposit thinkDeposit) { if (thinkDepositService.updateById(thinkDeposit)) { ThinkDeposit thinkDeposit1 = thinkDepositService.getByIdRel(thinkDeposit.getId()); - if (thinkDeposit1.getMoneyType().equals(1) && thinkDeposit.getStatus().equals(2)) { - thinkDepositService.refund(thinkDeposit1); + if (thinkDeposit1 != null) { + if (thinkDeposit1.getMoneyType().equals(1) && thinkDeposit.getStatus().equals(2) && thinkDeposit1.getIsAdminOrder().equals(0)) { + thinkDepositService.refund(thinkDeposit1); + } } return success("修改成功"); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java index 89fd38b..44804fd 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java @@ -72,7 +72,7 @@ public class ThinkGoodsOrderController extends BaseController { // 查询订单信息 final ThinkGoodsOrder order = thinkGoodsOrderService.getByOrderNum(transaction.getOutTradeNo()); if (order == null) return "订单不存在"; - if (order.getPayStatus().equals(1)) { + if (order.getPayStatus().equals(2)) { updatePay(order, transaction.getTransactionId(), transaction.getAmount().getPayerTotal()); } return "订单已支付"; @@ -119,7 +119,7 @@ public class ThinkGoodsOrderController extends BaseController { @GetMapping("/page") public ApiResult> page(ThinkGoodsOrderParam param) { // 使用关联查询 - param.setUid(getLoginUser().getUid()); + if (param.getIsAdmin() == null) param.setUid(getLoginUser().getUid()); return success(thinkGoodsOrderService.pageRel(param)); } @@ -155,6 +155,8 @@ public class ThinkGoodsOrderController extends BaseController { thinkGoodsOrder.setUid(thinkUsers.getId()); thinkGoodsOrder.setOrderNum(IdUtil.getSnowflake().nextIdStr()); thinkGoodsOrder.setWechatOrder(""); + thinkGoodsOrder.setCreateTime((int) DateUtil.currentSeconds()); + thinkGoodsOrder.setUpdateTime((int) DateUtil.currentSeconds()); thinkGoodsOrder.setInfo("商城订单"); if (thinkGoodsOrderService.save(thinkGoodsOrder)) { for (ThinkGoodsOrderInfo info : thinkGoodsOrder.getInfoList()) { diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java index 7184bd0..8b38e30 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java @@ -48,11 +48,17 @@ public class ThinkInvoiceController extends BaseController { @Resource private ThinkSiteService thinkSiteService; - private final String taxnum = "339901999999142"; - private final String appKey = "SD56531018"; - private final String appSecret = "SD3C429B318C485E"; - private final String sellerTel = "339901999999142"; - private final String url = "https://sandbox.nuonuocs.cn/open/v1/services"; +// private final String taxnum = "339901999999142"; +// private final String appKey = "SD56531018"; +// private final String appSecret = "SD3C429B318C485E"; +// private final String sellerTel = "339901999999142"; +// private final String url = "https://sandbox.nuonuocs.cn/open/v1/services"; + + private final String taxnum = "91450100737617400R"; + private final String appKey = "92969434"; + private final String appSecret = "D51901886E454FEF"; + private final String sellerTel = "18907712789"; + private final String url = "https://sdk.nuonuo.com/open/v1/services"; @ApiOperation("分页查询") @GetMapping("/page") @@ -62,6 +68,11 @@ public class ThinkInvoiceController extends BaseController { return success(thinkInvoiceService.pageRel(param)); } + @GetMapping("/data") + public ApiResult data(ThinkInvoiceParam param) { + return success(thinkInvoiceService.getData(param)); + } + @ApiOperation("查询全部") @GetMapping() public ApiResult> list(ThinkInvoiceParam param) { @@ -84,16 +95,20 @@ public class ThinkInvoiceController extends BaseController { thinkInvoice.setUid(getLoginUser().getUid()); thinkInvoice.setCode(thinkInvoice.getIncoiveCode()); thinkInvoice.setIncoiveNum(RandomUtil.randomString(20)); - thinkInvoice.setIsOpen(2); + if (!thinkInvoice.getIsOpen().equals(1)) thinkInvoice.setIsOpen(2); thinkInvoice.setCreateTime(DateUtil.currentSeconds()); thinkInvoice.setUpdateTime(DateUtil.currentSeconds()); if (thinkInvoice.getItype().equals(1)) { - List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkInvoice.getOid()); - ThinkOrderInfo thinkOrderInfo = thinkOrderInfoList.get(0); - thinkInvoice.setInfo(thinkOrderInfo.getSiteName() + "-" + thinkOrderInfo.getFieldName() + "(" + thinkOrderInfo.getDateTime() + ")"); + if (thinkInvoice.getOid() != null) { + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkInvoice.getOid()); + ThinkOrderInfo thinkOrderInfo = thinkOrderInfoList.get(0); + thinkInvoice.setInfo(thinkOrderInfo.getSiteName() + "-" + thinkOrderInfo.getFieldName() + "(" + thinkOrderInfo.getDateTime() + ")"); + } } else if (thinkInvoice.getItype().equals(2)) { - ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid()); - thinkInvoice.setInfo(thinkUsersVip.getName() + " 微信订单号: " + thinkUsersVip.getWechatOrder()); + if (thinkInvoice.getOid() != null) { + ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid()); + thinkInvoice.setInfo(thinkUsersVip.getName() + " 微信订单号: " + thinkUsersVip.getWechatOrder()); + } } else if (thinkInvoice.getItype().equals(4)) { thinkInvoice.setInfo("租赁发票"); } @@ -164,7 +179,9 @@ public class ThinkInvoiceController extends BaseController { // String appKey = "92969434"; // String appSecret = "D51901886E454FEF"; String method = "nuonuo.OpeMplatform.requestBillingNew";//API方法名 - String token = NNOpenSDK.getIntance().getMerchantToken(appKey, appSecret); //访问令牌 + String tokenJsonStr = NNOpenSDK.getIntance().getMerchantToken(appKey, appSecret); //访问令牌 + JSONObject tokenJson = JSONObject.parseObject(tokenJsonStr); + String token = tokenJson.getString("access_token"); final NuoNuo nuoNuo = new NuoNuo(); final NuoNuoOrder order = new NuoNuoOrder(); order.setBuyerName(thinkInvoice.getName()); @@ -180,7 +197,19 @@ public class ThinkInvoiceController extends BaseController { order.setInvoiceType(String.valueOf(thinkInvoice.getInvoicetype())); order.setRemark("不动产地址:广西壮族自治区南宁市良庆区五象大道西段669号广西体育中心综合馆;(市)标志:否;"); final NuoNuoGoods goods = new NuoNuoGoods(); - goods.setGoodsName(thinkInvoice.getInfo()); + if (thinkInvoice.getItype().equals(1)) { + final ThinkOrder thinkOrder = thinkOrderService.getById(thinkInvoice.getOid()); + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkInvoice.getOid()); + goods.setGoodsName(thinkOrderInfoList.get(0).getSiteName() + "-" + thinkOrderInfoList.get(0).getFieldName() + + "(" + thinkOrder.getDateTime() + ")"); + } else if (thinkInvoice.getItype().equals(2)) { + goods.setGoodsName("广西体育中心VIP卡"); + } else if (thinkInvoice.getItype().equals(3)) { + goods.setGoodsName("广西体育中心IC卡"); + } else { + goods.setGoodsName("广西体育中心场馆"); + } + // goods.setGoodsCode("3040502029902000000"); goods.setWithTaxFlag("0"); // if (!CollectionUtils.isEmpty(orderInfos)) { @@ -230,6 +259,7 @@ public class ThinkInvoiceController extends BaseController { 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); if (StrUtil.isNotBlank(json)) { diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java index ebed295..f70eb42 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java @@ -65,7 +65,8 @@ public class ThinkMachineOpenLogController extends BaseController { return fail("二维码不能为空"); String[] qrcode = thinkMachineOpenLog.getQrcode().split(","); for (String s : qrcode) { - Map res = thinkOrderService.getByQrCode(s); + Map res = thinkOrderService.getByQrCode(s, false); + 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 b900ea4..1478df0 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java @@ -1,20 +1,26 @@ package com.gxwebsoft.think.controller; import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.exception.BusinessException; +import com.gxwebsoft.common.core.security.JwtUtil; import com.gxwebsoft.common.core.utils.RedisUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; @@ -45,6 +51,10 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -56,7 +66,11 @@ import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.DecimalFormat; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -88,6 +102,12 @@ public class ThinkOrderController extends BaseController { private ThinkVipCardsBillsService thinkVipCardsBillsService; @Resource private ThinkSiteService thinkSiteService; + @Resource + private ThinkCardLogService thinkCardLogService; + @Resource + private ThinkRechargeLogService thinkRechargeLogService; + @Resource + private ThinkVipService thinkVipService; @Autowired private RedisUtil redisUtil; @@ -124,7 +144,7 @@ public class ThinkOrderController extends BaseController { return "订单已支付"; } - private void updatePay(ThinkOrder order, String transactionId, Integer payAmount) { + public void updatePay(ThinkOrder order, String transactionId, Integer payAmount) { order.setPayStatus(1); order.setWechatOrder(transactionId); // order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", transaction.getAmount().getPayerTotal() * 0.01))); @@ -133,19 +153,24 @@ public class ThinkOrderController extends BaseController { order.setQrcode("qrcode/" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyyMMdd") + "/" + IdUtil.getSnowflake().nextIdStr() + ".png"); thinkOrderService.updateById(order); // 更新订单商品的支付状态 - if (order.getType().equals(0)) { - List orderInfoList = thinkOrderInfoService.listInOrder(order.getId()); + int num = 0; + List orderInfoList = thinkOrderInfoService.listInOrder(order.getId()); +// if (order.getType().equals(0)) { + if (!orderInfoList.isEmpty()) { for (ThinkOrderInfo thinkOrderInfo : orderInfoList) { thinkOrderInfo.setPayStatus(1); + num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum(); } thinkOrderInfoService.updateBatchById(orderInfoList); } +// } // 游泳馆限制人数 if (order.getSid() != null && order.getSid().equals(37)) { ThinkSite thinkSite = thinkSiteService.getById(order.getSid()); thinkSite.setDailyNum(thinkSite.getDailyNum() + 1); thinkSiteService.updateById(thinkSite); } + // 使用记录 boolean saveBill = false; ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); @@ -163,32 +188,39 @@ public class ThinkOrderController extends BaseController { } else if (usersVip.getType().equals(4)) { BigDecimal newBalance = usersVip.getRemainingMoney().subtract(usersVip.getEachMoney()); usersVip.setRemainingMoney(newBalance); - usersVip.setNum(usersVip.getNum() - 1); + usersVip.setNum(usersVip.getNum() - num); thinkVipCardsBills.setAmount(usersVip.getEachMoney()); } else { - usersVip.setNum(usersVip.getNum() - 1); + usersVip.setNum(usersVip.getNum() - num); thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP)); } + // 更新会员卡使用时间 + usersVip.setUseTime(DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000); thinkUsersVipService.updateById(usersVip); thinkVipCardsBills.setVid(order.getVid()); saveBill = true; } // IC卡 + ThinkCard card = null; if (order.getCode() != null) { - ThinkCard card = thinkCardService.getByCode(order.getCode()); - if (card.getType().equals(5)) { + card = thinkCardService.getByCode(order.getCode()); + } else { + if (order.getCid() != null) { + card = thinkCardService.getById(order.getCid()); + } + } + if (card != null) { + 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(4)) { - BigDecimal newBalance = card.getRemainingMoney().subtract(card.getEachMoney()); - thinkVipCardsBills.setAmount(card.getEachMoney()); - card.setRemainingMoney(newBalance); } else if (card.getType().equals(2)) { - card.setNum(card.getNum() - 1); + card.setNum(card.getNum() - num); thinkVipCardsBills.setAmount(card.getPrice().divide(BigDecimal.valueOf(card.getCount()), RoundingMode.HALF_UP)); } + // 更新会员卡使用时间 + card.setUseTime(DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000); thinkCardService.updateById(card); thinkVipCardsBills.setCid(card.getId()); @@ -242,9 +274,15 @@ public class ThinkOrderController extends BaseController { @ApiOperation("根据id查询") @GetMapping("/{id}") - public ApiResult get(@PathVariable("id") Integer id) { + public ApiResult get(@PathVariable("id") Integer id, HttpServletRequest request) { // 使用关联查询 ThinkOrder order = thinkOrderService.getByIdRel(id); + if (order.getCid() != null && !order.getCid().equals(0)) { + order.setCard(thinkCardService.getById(order.getCid())); + } + if (order.getVid() != null && !order.getVid().equals(0)) { + order.setThinkVip(thinkUsersVipService.getById(order.getVid())); + } if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) { String secretKey = redisUtil.get("secretKey_10150"); byte[] key = null; @@ -256,9 +294,81 @@ public class ThinkOrderController extends BaseController { } SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key); long timestamp = (int) (System.currentTimeMillis() / 1000); - order.setQrcode(aes.encryptHex(id + "_" + timestamp)); + String qr = id + "_" + timestamp; + order.setQrcode(aes.encryptHex(qr)); order.setQrCodeTimestamp(String.valueOf(timestamp)); } + ThinkSite thinkSite = thinkSiteService.getById(order.getSid()); + order.setSite(thinkSite); + order.setSiteName(thinkSite.getName()); + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(order.getId()); + StringBuilder dateTimeList = new StringBuilder(); + if (!thinkOrderInfoList.isEmpty()) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + String dateTime = thinkOrderInfo.getDateTime(); + dateTime += "(" + thinkOrderInfo.getFieldName() + ")"; + if (dateTimeList.isEmpty()) { + dateTimeList = new StringBuilder(dateTime); + } else { + dateTimeList.append(",").append(dateTime); + } + } + order.setDateTime(dateTimeList.toString()); + } + return success(order); + } + + @ApiOperation("根据id查询") + @GetMapping("/info-for-device/{id}") + public ApiResult infoForDevice(@PathVariable("id") Integer id, HttpServletRequest request) { + // 使用关联查询 + ThinkOrder order = thinkOrderService.getByIdRel(id); + if (order.getCid() != null && !order.getCid().equals(0)) { + order.setCard(thinkCardService.getById(order.getCid())); + } + if (order.getVid() != null && !order.getVid().equals(0)) { + order.setThinkVip(thinkUsersVipService.getById(order.getVid())); + } + if (order.getAid() != null && !order.getAid().equals(0)) { + final RequestUtil requestUtil = new RequestUtil(); + String access_token = JwtUtil.getAccessToken(request); + requestUtil.setAccessToken(access_token); + requestUtil.setTenantId(getTenantId().toString()); + User admin = requestUtil.getByUserId(order.getAid()); + if (admin != null) order.setAdminName(admin.getRealName()); + } + 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(); + 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); + String qr = id + "_" + timestamp + "_none_forDevice"; + order.setQrcode(aes.encryptHex(qr)); + order.setQrCodeTimestamp(String.valueOf(timestamp)); + } + ThinkSite thinkSite = thinkSiteService.getById(order.getSid()); + order.setSite(thinkSite); + order.setSiteName(thinkSite.getName()); + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(order.getId()); + StringBuilder dateTimeList = new StringBuilder(); + if (!thinkOrderInfoList.isEmpty()) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + String dateTime = thinkOrderInfo.getDateTime(); + dateTime += "(" + thinkOrderInfo.getFieldName() + ")"; + if (dateTimeList.isEmpty()) { + dateTimeList = new StringBuilder(dateTime); + } else { + dateTimeList.append(",").append(dateTime); + } + } + order.setDateTime(dateTimeList.toString()); + } return success(order); } @@ -266,13 +376,25 @@ 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); + thinkOrderService.updateById(thinkOrder); + return success("核销成功", order.getQrcode()); + } + + @ApiOperation("检查有消息") + @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()); } @@ -280,23 +402,81 @@ public class ThinkOrderController extends BaseController { @GetMapping("/by-code/{code}") public ApiResult> getByQrCode(@PathVariable("code") String code) { // 使用关联查询 - return success(thinkOrderService.getByQrCode(code)); + return success(thinkOrderService.getOrderByQrCode(code)); } @ApiOperation("添加") @PostMapping() public ApiResult> save(@RequestBody ThinkOrder thinkOrder, HttpServletRequest request) throws IOException, WxErrorException { - for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) { - ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info); - if (checkOrder != null) return fail("该场地已被预定"); - } - if (thinkOrder.getSid().equals(37)) { - ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid()); - if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum()) - return fail("已达上限,无法预定"); - } User user = getLoginUser(); if (user == null) return fail("请先登录"); + if (thinkOrder.getPostTime() == null) return fail("非法请求.code:-1"); + if (thinkOrder.getSign() == null) return fail("非法请求.code:-1"); + String sign = SecureUtil.md5(thinkOrder.getPostTime() + "wxd38cc38c54fa7370" + thinkOrder.getStartTime() + user.getUid()); + if (!Objects.equals(sign, thinkOrder.getSign())) return fail("非法请求.code:-2"); + 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")))) { + return fail("场地预定时间为:8:00-23:00。"); + } + 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) return fail("只能预定7天内的场地"); + // 用户限制订单,单个用户(每个id)每个时段只能订两个场地,每次预订间隔要3分钟 + // 今天的订单 + ThinkOrder todayOrder = thinkOrderService.getTodayOrder(user.getUid()); + if (todayOrder != null) { + if ((System.currentTimeMillis() / 1000) - todayOrder.getCreateTime() < 180) { + return fail("每次预订需间隔3分钟"); + } + } + Map siteTimeNumMap = new HashMap<>(); + siteTimeNumMap.put(thinkOrder.getThinkOrderInfos().get(0).getStartTime(), 1); + if (thinkOrder.getThinkOrderInfos().size() > 1) { + if (!Objects.equals(thinkOrder.getThinkOrderInfos().get(0).getStartTime(), thinkOrder.getThinkOrderInfos().get(1).getStartTime())) { + siteTimeNumMap.put(thinkOrder.getThinkOrderInfos().get(1).getStartTime(), 1); + } else { + siteTimeNumMap.put(thinkOrder.getThinkOrderInfos().get(0).getStartTime(), 2); + } + } + // 用户今天定的这个场的订单 + Map bookingNumMap = new HashMap<>(); + List userTodayOrderListInSite = thinkOrderService.getTodayOrderInSite(user.getUid(), thinkOrder.getSid()); + List userTodayOrderInfoListInSite = new ArrayList<>(); + if (!userTodayOrderListInSite.isEmpty()) { + userTodayOrderInfoListInSite = thinkOrderInfoService.listByOrderIds(userTodayOrderListInSite.stream().map(ThinkOrder::getId).toList()); + for (ThinkOrderInfo info : userTodayOrderInfoListInSite) { + if (bookingNumMap.containsKey(info.getStartTime())) { + bookingNumMap.put(info.getStartTime(), bookingNumMap.get(info.getStartTime()) + 1); + } else { + bookingNumMap.put(info.getStartTime(), 1); + } + } + } + for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) { + if (bookingNumMap.get(info.getStartTime()) != null) { + if (bookingNumMap.get(info.getStartTime()) + siteTimeNumMap.get(info.getStartTime()) > 2) { + return fail("每个时段只能预定两个场地"); + } + } + 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 (thinkOrder.getPayType().equals(2) && thinkOrder.getVid() == null) return fail("请选择会员卡"); if (thinkOrder.getPayType().equals(5) && thinkOrder.getCode() == null) return fail("请选择IC卡"); thinkOrder.setOrderNum(IdUtil.getSnowflake().nextIdStr()); @@ -307,17 +487,35 @@ public class ThinkOrderController extends BaseController { thinkOrder.setPrice(BigDecimal.ZERO); thinkOrder.setUid(user.getUid()); Long now = new Date().getTime(); - int timestamp = (int) (now / 1000); + long timestamp = (now / 1000); + int num = 0; if (thinkOrder.getThinkOrderInfos() != null) { for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { ThinkSiteTime siteTime = thinkSiteTimeService.getById(thinkOrderInfo.getSiteTimeId()); thinkOrderInfo.setPrice(BigDecimal.ZERO); thinkOrderInfo.setChildrenPrice(BigDecimal.ZERO); BigDecimal price = BigDecimal.ZERO; + BigDecimal halfPrice = BigDecimal.ZERO; if (siteTime != null && siteTime.getIsStatus() == 1) { // 半场 - if (thinkOrderInfo.getType().equals(2)) thinkOrderInfo.setPrice(siteTime.getHalfPrice()); - else thinkOrderInfo.setPrice(siteTime.getPrice()); + price = siteTime.getPrice(); + halfPrice = siteTime.getHalfPrice(); + 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); + } + } + 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); + } + } thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice()); thinkOrderInfo.setOrderTime(timestamp); thinkOrderInfo.setTimeFlag(now); @@ -325,20 +523,27 @@ public class ThinkOrderController extends BaseController { if (thinkOrderInfo.getIsChildren().equals(2)) { if (thinkOrderInfo.getAdultNum() < 1) return fail("非法请求,code:1"); if (thinkOrderInfo.getType().equals(2)) - totalPrice = totalPrice.add(siteTime.getHalfPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); + totalPrice = totalPrice.add(halfPrice.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); else - totalPrice = totalPrice.add(siteTime.getPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); - + totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()))); + num += thinkOrderInfo.getAdultNum(); } else { if (thinkOrderInfo.getChildrenNum() < 1) return fail("非法请求,code:2"); thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice()); totalPrice = totalPrice.add(siteTime.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum()))); + num += thinkOrderInfo.getChildrenNum(); + } + if (thinkOrderInfo.getType().equals(2)) { + thinkOrderInfo.setPrice(halfPrice); + } else { + thinkOrderInfo.setPrice(price); } // reducePrice = reducePrice.add(thinkOrderInfo.getChildrenPrice()); } else return fail("非法请求,code:3"); } } thinkOrder.setTotalPrice(totalPrice); + thinkOrder.setPayPrice(totalPrice); // VIP卡 if (thinkOrder.getVid() != null) { ThinkUsersVip usersVip = thinkUsersVipService.getById(thinkOrder.getVid()); @@ -346,30 +551,31 @@ public class ThinkOrderController extends BaseController { if (!usersVip.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1"); if (usersVip.getType().equals(5)) { if (usersVip.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); - BigDecimal discount = usersVip.getDiscount().divide(BigDecimal.valueOf(10), RoundingMode.HALF_UP); - BigDecimal reducePrice = totalPrice.multiply(discount); - thinkOrder.setReducePrice(reducePrice); - thinkOrder.setPayPrice(totalPrice.subtract(reducePrice)); - } else if (usersVip.getType().equals(4)) { - if (usersVip.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); - thinkOrder.setReducePrice(usersVip.getEachMoney()); - thinkOrder.setPayPrice(totalPrice.subtract(usersVip.getEachMoney())); + 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("余额不足"); } else if (usersVip.getType().equals(2)) { - if (usersVip.getNum() < 1) return fail("次数不足"); + if (usersVip.getNum() < num) return fail("次数不足"); thinkOrder.setReducePrice(totalPrice); thinkOrder.setPayPrice(BigDecimal.ZERO); } else { - if (usersVip.getNum() < 1) return fail("次数不足"); - // 上次使用的订单 - ThinkOrder lastOrder = thinkOrderService.getLastOrderByVid(usersVip.getId()); - if (lastOrder != null) { - // 今天是否已经使用 - long todayStart = DateUtil.beginOfDay(new Date()).getTime() / 1000; - long todayEnd = DateUtil.endOfDay(new Date()).getTime() / 1000; - if (lastOrder.getCreateTime() >= todayStart && lastOrder.getCreateTime() <= todayEnd) { - return fail("今天已使用"); - } + if (usersVip.getNum() < num) return fail("次数不足"); + long todayTime = DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000; + if (usersVip.getUseTime().equals(todayTime)) { + return fail("今天已使用"); } + // 上次使用的订单 +// ThinkOrder lastOrder = thinkOrderService.getLastOrderByVid(usersVip.getId()); +// if (lastOrder != null) { + // 今天是否已经使用 +// long todayStart = DateUtil.beginOfDay(new Date()).getTime() / 1000; +// long todayEnd = DateUtil.endOfDay(new Date()).getTime() / 1000; +// if (lastOrder.getCreateTime() >= todayStart && lastOrder.getCreateTime() <= todayEnd) { +// return fail("今天已使用"); +// } +// } thinkOrder.setReducePrice(totalPrice); thinkOrder.setPayPrice(BigDecimal.ZERO); } @@ -392,45 +598,365 @@ public class ThinkOrderController extends BaseController { thinkOrder.setType(3); } break; - // 余额卡 + // 季卡 case 4: { - thinkOrder.setPayType(13); + thinkOrder.setPayType(16); thinkOrder.setType(6); } break; + case 5: { + thinkOrder.setPayType(13); + thinkOrder.setType(12); + } + break; } } // IC卡 if (thinkOrder.getCode() != null) { ThinkCard card = thinkCardService.getByCode(thinkOrder.getCode()); if (card == null) return fail("非法请求,code:0"); - if (!card.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1"); +// if (!card.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1"); + thinkOrder.setCid(card.getId()); if (card.getType().equals(5)) { if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); - BigDecimal discount = card.getDiscount().divide(BigDecimal.valueOf(10), RoundingMode.HALF_UP); - BigDecimal reducePrice = totalPrice.multiply(discount); + 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(totalPrice.subtract(reducePrice)); - } else if (card.getType().equals(4)) { - if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); - thinkOrder.setReducePrice(card.getEachMoney()); - thinkOrder.setPayPrice(totalPrice.subtract(card.getEachMoney())); + thinkOrder.setPayPrice(payPrice); + if (card.getRemainingMoney().compareTo(payPrice) < 0) return fail("余额不足"); } else if (card.getType().equals(2)) { - if (card.getNum() < 1) return fail("次数不足"); + if (card.getNum() < num) 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)) { + return fail("今天已使用"); + } // 上次使用的订单 - ThinkOrder lastOrder = thinkOrderService.getLastOrderByCardCode(card.getCode()); - // 今天是否已经使用 - long todayStart = DateUtil.beginOfDay(new Date()).getTime() / 1000; - long todayEnd = DateUtil.endOfDay(new Date()).getTime() / 1000; - if (lastOrder.getCreateTime() >= todayStart && lastOrder.getCreateTime() <= todayEnd) { +// ThinkOrder lastOrder = thinkOrderService.getLastOrderByCardCode(card.getCode()); +// // 今天是否已经使用 +// long todayStart = DateUtil.beginOfDay(new Date()).getTime() / 1000; +// long todayEnd = DateUtil.endOfDay(new Date()).getTime() / 1000; +// if (lastOrder.getCreateTime() >= todayStart && lastOrder.getCreateTime() <= todayEnd) { +// return fail("今天已使用"); +// } + thinkOrder.setReducePrice(totalPrice); + thinkOrder.setPayPrice(BigDecimal.ZERO); + } + switch (card.getType()) { + // 年卡 + case 1: { + thinkOrder.setPayType(10); + thinkOrder.setType(8); + } + break; + // 次卡 + case 2: { + thinkOrder.setPayType(11); + thinkOrder.setType(9); + } + break; + // 月卡 + case 3: { + thinkOrder.setPayType(9); + thinkOrder.setType(7); + } + break; + // 季卡 + case 4: { + thinkOrder.setPayType(17); + thinkOrder.setType(10); + } + break; + case 5: { + thinkOrder.setPayType(14); + thinkOrder.setType(13); + } + break; + } + } + + thinkOrder.setCreateTime(timestamp); + thinkOrder.setUpdateTime(timestamp); + if (thinkOrderService.save(thinkOrder)) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { + thinkOrderInfo.setOid(thinkOrder.getId()); + } + thinkOrderInfoService.saveBatch(thinkOrder.getThinkOrderInfos()); + return onPay(thinkOrder); + } + return fail("添加失败"); + } + + @ApiOperation("添加") + @PostMapping("/add-from-device") + public ApiResult> addFromDevice(@RequestBody ThinkOrder thinkOrder, HttpServletRequest request) throws IOException, WxErrorException { + ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid()); + + if (thinkOrder.getSid().equals(37)) { + if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum()) + return fail("已达上限,无法预定"); + } else { + for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) { + 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 (thinkOrder.getPayType().equals(1) || thinkOrder.getPayType().equals(4) || thinkOrder.getPayType().equals(5)) { + if (thinkOrder.getWechatOrder() == null || thinkOrder.getWechatOrder().isEmpty()) { + return fail("支付凭证不能为空"); + } + } + } + User user = getLoginUser(); + thinkOrder.setOrderNum(IdUtil.getSnowflake().nextIdStr()); + BigDecimal totalPrice = BigDecimal.ZERO; + thinkOrder.setPayPrice(BigDecimal.ZERO); + thinkOrder.setReducePrice(BigDecimal.ZERO); + thinkOrder.setPrice(BigDecimal.ZERO); + thinkOrder.setAid(user.getUid()); + Long now = new Date().getTime(); + long timestamp = (now / 1000); + + int num = 0; + if (thinkOrder.getThinkOrderInfos() != null) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { + ThinkSiteTime siteTime = thinkSiteTimeService.getById(thinkOrderInfo.getSiteTimeId()); + thinkOrderInfo.setPrice(BigDecimal.ZERO); + thinkOrderInfo.setChildrenPrice(BigDecimal.ZERO); + BigDecimal price = BigDecimal.ZERO; + BigDecimal halfPrice = BigDecimal.ZERO; + if (siteTime != null && siteTime.getIsStatus() == 1) { + halfPrice = siteTime.getHalfPrice(); + price = siteTime.getPrice(); + 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); + } + } + 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); +// thinkOrderInfo.setIsChildren(0); + if (thinkOrderInfo.getIsChildren().equals(2)) { + if (thinkOrderInfo.getAdultNum() < 1) 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"); + thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice()); + totalPrice = totalPrice.add(siteTime.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum()))); + price = siteTime.getChildrenPrice(); + num += thinkOrderInfo.getChildrenNum(); + } + if (thinkOrderInfo.getType().equals(2)) thinkOrderInfo.setPrice(halfPrice); + else thinkOrderInfo.setPrice(price); +// reducePrice = reducePrice.add(thinkOrderInfo.getChildrenPrice()); + } else return fail("非法请求,code:3"); + } + } + + thinkOrder.setTotalPrice(totalPrice); + thinkOrder.setPayPrice(totalPrice); +// if (thinkOrder.getRealPrice() != null && thinkOrder.getRealPrice().compareTo(BigDecimal.ZERO) > 0) +// thinkOrder.setPayPrice(thinkOrder.getRealPrice()); + + if (thinkOrder.getCid() != null && !thinkOrder.getCid().equals(0)) { + ThinkCard card = thinkCardService.getById(thinkOrder.getCid()); + if (card == null) return fail("IC卡不存在"); + if (card.getType().equals(5)) { + BigDecimal discount = card.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP); + BigDecimal payPrice = totalPrice.multiply(discount); + thinkOrder.setReducePrice(totalPrice.subtract(payPrice)); + thinkOrder.setPayPrice(payPrice); + if (card.getRemainingMoney().compareTo(payPrice) < 0) return fail("余额不足"); + } else if (card.getType().equals(2)) { + if (card.getNum() < num) 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)) { return fail("今天已使用"); } thinkOrder.setReducePrice(totalPrice); thinkOrder.setPayPrice(BigDecimal.ZERO); } + switch (card.getType()) { + // 年卡 + case 1: { + thinkOrder.setPayType(10); + thinkOrder.setType(8); + } + break; + // 次卡 + case 2: { + thinkOrder.setPayType(11); + thinkOrder.setType(9); + } + break; + // 月卡 + case 3: { + thinkOrder.setPayType(9); + thinkOrder.setType(7); + } + break; + // 季卡 + case 4: { + thinkOrder.setPayType(17); + thinkOrder.setType(10); + } + break; + case 5: { + thinkOrder.setPayType(14); + thinkOrder.setType(13); + } + break; + } + } + + thinkOrder.setAid(getLoginUserId()); + thinkOrder.setCreateTime(timestamp); + thinkOrder.setUpdateTime(timestamp); + if (thinkOrderService.save(thinkOrder)) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { + thinkOrderInfo.setOid(thinkOrder.getId()); + } + thinkOrderInfoService.saveBatch(thinkOrder.getThinkOrderInfos()); + if (thinkOrder.getPayType() >= 6 || thinkOrder.getPayType().equals(2)) { + thinkOrder.setIsInvoice(3); + thinkOrderService.updateById(thinkOrder); + updatePay(thinkOrder, null, thinkOrder.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue()); + return success(thinkOrder.getId()); + } + return success(thinkOrder.getId()); + } + return fail("添加失败"); + } + + @ApiOperation("付款码支付") + @PostMapping("/codePay/{id}") + public ApiResult> codePay(@PathVariable Integer id, @RequestBody Map data) { + ThinkOrder thinkOrder = thinkOrderService.getByIdRel(id); + String desc = thinkOrder.getThinkOrderInfos().get(0).getSiteName() + "-" + thinkOrder.getThinkOrderInfos().get(0).getFieldName(); + Map res = thinkOrderService.createWxCodePay(thinkOrder.getTotalPrice(), thinkOrder.getOrderNum(), desc, data.get("code")); + return success(res); + } + + @ApiOperation("订单状态查询") + @PostMapping("/checkWechatPayRes/{id}") + public ApiResult> checkWechatPayRes(@PathVariable Integer id) { + ThinkOrder thinkOrder = thinkOrderService.getByIdRel(id); + Map res = thinkOrderService.checkWechatPayRes(thinkOrder.getOrderNum()); + return success(res); + } + + @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())); + } + + 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())); + } + if (order.getPayType() >= 6 || order.getPayType().equals(2)) { + order.setIsInvoice(3); + thinkOrderService.updateById(order); + updatePay(order, null, order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue()); + return success("支付成功", order.getId()); + } + return fail("支付失败"); + } + + @ApiOperation("修改") + @PutMapping() + public ApiResult> update(@RequestBody ThinkOrder thinkOrder) { + 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卡不存在"); + thinkOrder.setTotalPrice(totalPrice); + thinkOrder.setPayPrice(totalPrice); + if (card.getType().equals(5)) { + 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("余额不足"); + + card.setRemainingMoney(card.getRemainingMoney().subtract(payPrice)); + } else if (card.getType().equals(4)) { + if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足"); + thinkOrder.setReducePrice(card.getEachMoney()); + thinkOrder.setPayPrice(totalPrice.subtract(card.getEachMoney())); + card.setRemainingMoney(card.getRemainingMoney().subtract(card.getEachMoney())); + } else if (card.getType().equals(2)) { + if (card.getNum() < 1) return fail("次数不足"); + thinkOrder.setReducePrice(totalPrice); + thinkOrder.setPayPrice(BigDecimal.ZERO); + card.setNum(card.getNum() - 1); + + } else { + long todayTime = DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000; + if (card.getUseTime().equals(todayTime)) { + return fail("今天已使用"); + } + thinkOrder.setReducePrice(totalPrice); + thinkOrder.setPayPrice(BigDecimal.ZERO); + } + thinkCardService.updateById(card); switch (card.getType()) { // 年卡 case 1: { @@ -463,56 +989,29 @@ public class ThinkOrderController extends BaseController { break; } } - thinkOrder.setPayPrice(totalPrice); - - thinkOrder.setCreateTime(timestamp); - thinkOrder.setUpdateTime(timestamp); - if (thinkOrderService.save(thinkOrder)) { - for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) { - thinkOrderInfo.setOid(thinkOrder.getId()); + if (thinkOrder.getOrderStatus() != null && thinkOrder.getOrderStatus().equals(3)) { + // 取消 + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + thinkOrderInfo.setPayStatus(0); + } + 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); + thinkUsersVipService.updateById(thinkUsersVip); + } + } + if (thinkOrder1.getCode() != null && !thinkOrder1.getCode().isEmpty()) { + ThinkCard thinkCard = thinkCardService.getByCode(thinkOrder1.getCode()); + if (thinkCard != null) { + thinkCard.setUseTime(0L); + thinkCardService.updateById(thinkCard); + } } - thinkOrderInfoService.saveBatch(thinkOrder.getThinkOrderInfos()); - return onPay(thinkOrder); } - return fail("添加失败"); - } - - @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()); - for (ThinkOrderInfo info : thinkOrderInfos) { - ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info); - if (checkOrder != null) return fail("该场地已被预定"); - } - - String desc = thinkOrder1.getThinkOrderInfos().get(0).getSiteName() + "-" + thinkOrder1.getThinkOrderInfos().get(0).getFieldName(); - return success("下单成功", thinkOrderService.createWxOrder(thinkOrder1.getPayPrice(), thinkOrder1.getOrderNum(), desc, - getLoginUser().getOpenid())); - } - - 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())); - } - if (order.getPayType() >= 6 || order.getPayType().equals(2)) { - order.setIsInvoice(3); - thinkOrderService.updateById(order); - updatePay(order, null, order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue()); - return success("支付成功", order.getId()); - } - return fail("支付失败"); - } - - @ApiOperation("修改") - @PutMapping() - public ApiResult> update(@RequestBody ThinkOrder thinkOrder) { if (thinkOrderService.updateById(thinkOrder)) { return success("修改成功"); } @@ -582,6 +1081,10 @@ public class ThinkOrderController extends BaseController { for (ThinkOrder order : orderList) { 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(3).setCellValue(order.getPhone()); @@ -612,4 +1115,1116 @@ public class ThinkOrderController extends BaseController { result.setUrl(config.getServerUrl() + "/file/" + filename); return success(result); } + + + @ApiOperation("导出") + @PostMapping("/export-data") + public ApiResult> exportData(@RequestBody ThinkOrderParam param) throws IOException { + String filename = "excel/广西体育中心收入汇总表-" + new Date().getTime() + ".xlsx"; + String path = uploadPath + filename; + XSSFWorkbook workbook = new XSSFWorkbook(Files.newInputStream(Paths.get(uploadPath + "财务小程序报表样表.xlsx"))); + XSSFSheet sheet0 = workbook.getSheetAt(0); + Integer[] sidList = {34, 33, 53, 31, 30, 32, 51, 50, 37, 36, 28, 48, 49, 44}; + + BigDecimal wechatIncome = BigDecimal.ZERO; + BigDecimal posIncome = BigDecimal.ZERO; + BigDecimal businessIncome = BigDecimal.ZERO; + BigDecimal cashIncome = BigDecimal.ZERO; + BigDecimal otherIncome = BigDecimal.ZERO; + + for (int i = 0; i < sidList.length; i++) { + int sid = sidList[i]; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("sum(total_price) as total_income", "pay_type") + .eq("sid", sid) + .eq("pay_status", 1); + 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); + sheet0.getRow(i + 4).getCell(3).setCellValue("0"); + sheet0.getRow(i + 4).getCell(4).setCellValue("0"); + sheet0.getRow(i + 4).getCell(5).setCellValue("0"); + sheet0.getRow(i + 4).getCell(6).setCellValue("0"); + sheet0.getRow(i + 4).getCell(7).setCellValue("0"); + sheet0.getRow(i + 4).getCell(8).setCellValue("0"); + BigDecimal siteIncome = BigDecimal.ZERO; + if (!orderList.isEmpty()) { + for (ThinkOrder order : orderList) { + if (order.getPayType().equals(1)) { + sheet0.getRow(i + 4).getCell(3).setCellValue(String.valueOf(order.getTotalIncome())); + wechatIncome = wechatIncome.add(order.getTotalIncome()); + } else if (order.getPayType().equals(5)) { + sheet0.getRow(i + 4).getCell(4).setCellValue(String.valueOf(order.getTotalIncome())); + posIncome = posIncome.add(order.getTotalIncome()); + } else if (order.getPayType().equals(18)) { + sheet0.getRow(i + 4).getCell(5).setCellValue(String.valueOf(order.getTotalIncome())); + businessIncome = businessIncome.add(order.getTotalIncome()); + } else if (order.getPayType().equals(4)) { + sheet0.getRow(i + 4).getCell(6).setCellValue(String.valueOf(order.getTotalIncome())); + cashIncome = cashIncome.add(order.getTotalIncome()); + } else { + sheet0.getRow(i + 4).getCell(7).setCellValue(String.valueOf(order.getTotalIncome())); + otherIncome = otherIncome.add(order.getTotalIncome()); + } + siteIncome = siteIncome.add(order.getTotalIncome()); + } + } + sheet0.getRow(i + 4).getCell(7).setCellValue(String.valueOf(siteIncome)); + } + BigDecimal totalIncome = wechatIncome.add(posIncome).add(businessIncome).add(cashIncome); + sheet0.getRow(17).getCell(3).setCellValue(wechatIncome.toString()); + sheet0.getRow(17).getCell(4).setCellValue(posIncome.toString()); + sheet0.getRow(17).getCell(5).setCellValue(businessIncome.toString()); + sheet0.getRow(17).getCell(6).setCellValue(cashIncome.toString()); + sheet0.getRow(17).getCell(7).setCellValue(otherIncome.toString()); + sheet0.getRow(17).getCell(8).setCellValue(totalIncome.toString()); + + // 次卡 + BigDecimal timeCardIncome = BigDecimal.ZERO; + // 期间卡(指月卡、季卡、年卡) + BigDecimal monthCardIncome = BigDecimal.ZERO; + // 充值卡(会员卡、IC卡) + BigDecimal chargeCardIncome = BigDecimal.ZERO; + // 其他 + BigDecimal otherCardIncome = BigDecimal.ZERO; + XSSFSheet sheet1 = workbook.getSheetAt(1); + for (int i = 0; i < sidList.length; i++) { + int sid = sidList[i]; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("sum(total_price) as total_income", "pay_type") + .eq("sid", sid) + .eq("pay_status", 1) + .notIn("pay_type", Arrays.asList(1, 5, 18, 4)); + 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); + sheet1.getRow(i + 3).getCell(3).setCellValue("0"); + sheet1.getRow(i + 3).getCell(4).setCellValue("0"); + sheet1.getRow(i + 3).getCell(5).setCellValue("0"); + sheet1.getRow(i + 3).getCell(6).setCellValue("0"); + sheet1.getRow(i + 3).getCell(7).setCellValue("0"); + BigDecimal siteIncome = BigDecimal.ZERO; + if (!orderList.isEmpty()) { + for (ThinkOrder order : orderList) { + if (order.getPayType().equals(8) || order.getPayType().equals(11)) { + sheet1.getRow(i + 3).getCell(3).setCellValue(String.valueOf(order.getTotalIncome())); + timeCardIncome = timeCardIncome.add(order.getTotalIncome()); + } else if (Arrays.asList(6, 7, 9, 10, 16, 17).contains(order.getPayType())) { + sheet1.getRow(i + 3).getCell(4).setCellValue(String.valueOf(order.getTotalIncome())); + monthCardIncome = monthCardIncome.add(order.getTotalIncome()); + } else if (Arrays.asList(13, 14).contains(order.getPayType())) { + sheet1.getRow(i + 3).getCell(5).setCellValue(String.valueOf(order.getTotalIncome())); + chargeCardIncome = chargeCardIncome.add(order.getTotalIncome()); + } else if (Arrays.asList(2, 3, 12, 15).contains(order.getPayType())) { + sheet1.getRow(i + 3).getCell(7).setCellValue(String.valueOf(order.getTotalIncome())); + otherCardIncome = otherCardIncome.add(order.getTotalIncome()); + } + siteIncome = siteIncome.add(order.getTotalIncome()); + } + } + sheet1.getRow(i + 4).getCell(8).setCellValue(String.valueOf(siteIncome)); + } + BigDecimal cardTotalIncome = timeCardIncome.add(monthCardIncome).add(chargeCardIncome).add(otherCardIncome); + sheet1.getRow(17).getCell(3).setCellValue(timeCardIncome.toString()); + sheet1.getRow(17).getCell(4).setCellValue(monthCardIncome.toString()); + sheet1.getRow(17).getCell(5).setCellValue(chargeCardIncome.toString()); + sheet1.getRow(17).getCell(7).setCellValue(otherCardIncome.toString()); + sheet1.getRow(17).getCell(8).setCellValue(cardTotalIncome.toString()); + + + 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); + } + + @PostMapping("/excel-data") + public ApiResult> excelData(@RequestBody ThinkOrderParam param) throws IOException { + Integer[] sidList = {34, 33, 53, 31, 30, 32, 51, 50, 37, 36, 28, 48, 49, 44}; + List> list = new ArrayList<>(); + + BigDecimal wechatIncome = BigDecimal.ZERO; + BigDecimal wechatRefund = BigDecimal.ZERO; + BigDecimal posIncome = BigDecimal.ZERO; + BigDecimal businessIncome = BigDecimal.ZERO; + BigDecimal cashIncome = BigDecimal.ZERO; + BigDecimal otherIncome = BigDecimal.ZERO; + BigDecimal totalIncome = BigDecimal.ZERO; + + List hasCheckCodeList = new ArrayList<>(); + // VIP卡订单 + LambdaQueryWrapper vipQueryWrapper = new LambdaQueryWrapper<>(); + vipQueryWrapper.in(ThinkRechargeLog::getStatus, 1, 3); + if (param.getCreateTimeStart() != null) { + vipQueryWrapper.ge(ThinkRechargeLog::getCreateTime, param.getCreateTimeStart()); + vipQueryWrapper.le(ThinkRechargeLog::getCreateTime, param.getCreateTimeEnd()); + } + List vipOrderList = thinkRechargeLogService.list(vipQueryWrapper); + List vipOrderVipList = new ArrayList<>(); + if (!vipOrderList.isEmpty()) { + Set vipIdSet = new HashSet<>(); + for (ThinkRechargeLog vipOrder : vipOrderList) { + if (vipIdSet.contains(vipOrder.getVid())) continue; + vipIdSet.add(vipOrder.getVid()); + } + vipOrderVipList = thinkUsersVipService.listByIds(vipIdSet); + for (ThinkRechargeLog vipOrder : vipOrderList) { + for (ThinkUsersVip vip : vipOrderVipList) { + if (vip.getId().equals(vipOrder.getVid())) { + vipOrder.setThinkUsersVip(vip); + break; + } + } + } + } + List hasCalRechargeList = new ArrayList<>(); + for (int sid : sidList) { + ThinkSite site = thinkSiteService.getById(sid); + Map data = new HashMap<>(); + data.put("siteName", site.getName()); + data.put("sid", site.getId()); + 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)) + .in(ThinkOrder::getPayStatus, 1); + if (param.getCreateTimeStart() != null) { + + queryWrapper.ge(ThinkOrder::getCreateTime, param.getCreateTimeStart()); + queryWrapper.le(ThinkOrder::getCreateTime, param.getCreateTimeEnd()); + } + List orderList = thinkOrderService.list(queryWrapper); + BigDecimal siteIncome = BigDecimal.ZERO; + data.put("wechatIncome", "0"); + data.put("wechatRefund", "0"); + data.put("posIncome", "0"); + data.put("businessIncome", "0"); + data.put("cashIncome", "0"); + data.put("otherIncome", "0"); + BigDecimal wechatIncomeSum = BigDecimal.ZERO; + BigDecimal wechatRefundSum = BigDecimal.ZERO; + BigDecimal posIncomeSum = BigDecimal.ZERO; + BigDecimal businessIncomeSum = BigDecimal.ZERO; + BigDecimal cashIncomeSum = BigDecimal.ZERO; + BigDecimal otherIncomeSum = BigDecimal.ZERO; + BigDecimal totalIncomeSum = BigDecimal.ZERO; + if (!orderList.isEmpty()) { + BigDecimal otherIncomeTmp = BigDecimal.ZERO; + for (ThinkOrder order : orderList) { + if (order.getPayType().equals(1) && order.getWechatOrder() != null && order.getWechatOrder().contains("420000")) { + wechatIncome = wechatIncome.add(order.getPayPrice()); + wechatIncomeSum = wechatIncomeSum.add(order.getPayPrice()); + siteIncome = siteIncome.add(order.getPayPrice()); + totalIncome = totalIncome.add(order.getPayPrice()); + totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); + } else if (order.getPayType().equals(5) || order.getPayType().equals(3) + || (order.getPayType().equals(1) + && (order.getWechatOrder() != null && !order.getWechatOrder().isEmpty() && !order.getWechatOrder().contains("420000")))) { + if (!order.getOrderStatus().equals(6)) { + posIncome = posIncome.add(order.getPayPrice()); + posIncomeSum = posIncomeSum.add(order.getPayPrice()); + siteIncome = siteIncome.add(order.getPayPrice()); + totalIncome = totalIncome.add(order.getPayPrice()); + totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); + } + } else if (order.getPayType().equals(18)) { + if (!order.getOrderStatus().equals(6)) { + businessIncome = businessIncome.add(order.getPayPrice()); + businessIncomeSum = businessIncomeSum.add(order.getPayPrice()); + siteIncome = siteIncome.add(order.getPayPrice()); + totalIncome = totalIncome.add(order.getPayPrice()); + totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); + } + } else if (order.getPayType().equals(4)) { + 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)) { + otherIncome = otherIncome.add(order.getPayPrice()); + otherIncomeTmp = otherIncomeTmp.add(order.getPayPrice()); + otherIncomeSum = otherIncomeSum.add(order.getPayPrice()); + siteIncome = siteIncome.add(order.getPayPrice()); + totalIncome = totalIncome.add(order.getPayPrice()); + totalIncomeSum = totalIncomeSum.add(order.getPayPrice()); + } + } + + } + } + // 微信退款订单 + LambdaQueryWrapper refundQueryWrapper = new LambdaQueryWrapper<>(); + refundQueryWrapper.like(ThinkOrder::getSid, sid) + .like(ThinkOrder::getWechatOrder, "420000") + .in(ThinkOrder::getOrderStatus, 6); + if (param.getCreateTimeStart() != null) { + refundQueryWrapper.between(ThinkOrder::getRefundTime, param.getCreateTimeStart(), param.getCreateTimeEnd()); + } + List refundOrderList = thinkOrderService.list(refundQueryWrapper); + if (!refundOrderList.isEmpty()) { + for (ThinkOrder order : refundOrderList) { + wechatRefund = wechatRefund.add(order.getPayPrice()); + wechatRefundSum = wechatRefundSum.add(order.getPayPrice()); + siteIncome = siteIncome.subtract(order.getPayPrice()); + totalIncome = totalIncome.subtract(order.getPayPrice()); + } + } + + // 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()); + } + } + // 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) { + 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()); + } + } + } + } + data.put("wechatIncome", new DecimalFormat("##,###.##").format(wechatIncomeSum)); + data.put("wechatRefund", new DecimalFormat("##,###.##").format(wechatRefundSum)); + data.put("posIncome", new DecimalFormat("##,###.##").format(posIncomeSum)); + data.put("businessIncome", new DecimalFormat("##,###.##").format(businessIncomeSum)); + data.put("cashIncome", new DecimalFormat("##,###.##").format(cashIncomeSum)); + data.put("otherIncome", new DecimalFormat("##,###.##").format(otherIncomeSum)); + data.put("siteIncome", new DecimalFormat("##,###.##").format(siteIncome)); + list.add(data); + } + Map data = new HashMap<>(); + data.put("siteName", "合计"); + data.put("wechatIncome", new DecimalFormat("##,###.##").format(wechatIncome)); + data.put("wechatRefund", new DecimalFormat("##,###.##").format(wechatRefund)); + data.put("posIncome", new DecimalFormat("##,###.##").format(posIncome)); + data.put("businessIncome", new DecimalFormat("##,###.##").format(businessIncome)); + data.put("cashIncome", new DecimalFormat("##,###.##").format(cashIncome)); + data.put("siteIncome", new DecimalFormat("##,###.##").format(totalIncome)); + data.put("otherIncome", new DecimalFormat("##,###.##").format(otherIncome)); + + list.add(data); + + return success(list); + } + + @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}; + List> list = new ArrayList<>(); + + // 次卡 + BigDecimal timeCardIncome = BigDecimal.ZERO; + // 期间卡(指月卡、季卡、年卡) + BigDecimal monthCardIncome = BigDecimal.ZERO; + // 充值卡(会员卡、IC卡) + BigDecimal chargeCardIncome = BigDecimal.ZERO; + // 其他 + BigDecimal otherIncome = BigDecimal.ZERO; + BigDecimal totalIncome = BigDecimal.ZERO; + for (int sid : sidList) { + ThinkSite site = thinkSiteService.getById(sid); + Map data = new HashMap<>(); + data.put("siteName", site.getName()); + BigDecimal siteIncome = BigDecimal.ZERO; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("sum(total_price) as total_income", "pay_type") + .eq("sid", sid) + .eq("pay_status", 1) + .notIn("pay_type", Arrays.asList(1, 5, 18, 4)); + 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()); + } + } + data.put("timeCardIncome", timeCardIncomeTmp); + data.put("monthCardIncome", monthCardIncomeTmp); + data.put("chargeCardIncome", chargeCardIncomeTmp); + data.put("otherIncome", otherIncomeTmp); + data.put("siteIncome", siteIncome); + list.add(data); + } + Map data = new HashMap<>(); + data.put("siteName", "合计"); + data.put("timeCardIncome", timeCardIncome); + data.put("monthCardIncome", monthCardIncome); + data.put("chargeCardIncome", chargeCardIncome); + data.put("otherIncome", otherIncome); + data.put("siteIncome", totalIncome); + + list.add(data); + + return success(list); + } + + @PostMapping("/data-for-front") + public ApiResult> dataForFront(@RequestBody ThinkOrderParam param) throws IOException { + String[] payTypeStrList = {"微信支付", "余额支付", "支付宝", "现金", "POS机", "VIP月卡", "VIP年卡", "VIP次卡", + "IC月卡", "IC年卡", "IC次卡", "免费", "VIP充值卡", "IC充值卡", "积分支付", "VIP季卡", "IC季卡"}; + 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) + .eq(ThinkCard::getSid, param.getSid()) + .between(ThinkCard::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .groupBy(ThinkCard::getVid) + ); + BigDecimal totalIncomeIC = BigDecimal.ZERO; + BigDecimal cashIncomeIC = BigDecimal.ZERO; + BigDecimal bankIncomeIC = BigDecimal.ZERO; + BigDecimal wechatIncomeIC = BigDecimal.ZERO; + BigDecimal alipayIncomeIC = BigDecimal.ZERO; + BigDecimal giftIncomeIC = BigDecimal.ZERO; + BigDecimal publicIncomeIC = BigDecimal.ZERO; + int numIC = 0; + if (!cardList.isEmpty()) { + for (int i = 0; i < cardList.size(); i++) { + ThinkCard card = cardList.get(i); + Map data = new HashMap<>(); + List list = thinkCardService.list( + new LambdaQueryWrapper() + .eq(ThinkCard::getVid, card.getVid()) + .eq(ThinkCard::getStatus, 1) + .eq(ThinkCard::getSid, param.getSid()) + .between(ThinkCard::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + ); + BigDecimal totalIncome = list.stream().map(ThinkCard::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal cashIncome = BigDecimal.ZERO; + BigDecimal bankIncome = BigDecimal.ZERO; + BigDecimal wechatIncome = BigDecimal.ZERO; + BigDecimal alipayIncome = BigDecimal.ZERO; + BigDecimal giftIncome = BigDecimal.ZERO; + BigDecimal publicIncome = BigDecimal.ZERO; + + if (!list.isEmpty()) { + data.put("name", card.getName()); + data.put("num", list.size()); + data.put("vid", card.getVid()); + for (ThinkCard card1 : list) { + if (card1.getPayType().equals(1)) { + wechatIncome = wechatIncome.add(card1.getPrice()); + } else if (card1.getPayType().equals(2)) { + alipayIncome = alipayIncome.add(card1.getPrice()); + } else if (card1.getPayType().equals(3)) { + cashIncome = cashIncome.add(card1.getPrice()); + } else if (card1.getPayType().equals(4) || card1.getPayType().equals(5)) { + bankIncome = bankIncome.add(card1.getPrice()); + } else if (card1.getPayType().equals(6)) { + publicIncome = publicIncome.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); + bankIncomeIC = bankIncomeIC.add(bankIncome); + wechatIncomeIC = wechatIncomeIC.add(wechatIncome); + alipayIncomeIC = alipayIncomeIC.add(alipayIncome); + giftIncomeIC = giftIncomeIC.add(giftIncome); + publicIncomeIC = publicIncomeIC.add(publicIncome); + numIC += list.size(); + } + } + + Map ICTotal = new HashMap<>(); + ICTotal.put("name", "IC卡合计"); + ICTotal.put("totalIncome", totalIncomeIC); + ICTotal.put("wechatIncome", wechatIncomeIC); + ICTotal.put("alipayIncome", alipayIncomeIC); + ICTotal.put("cashIncome", cashIncomeIC); + ICTotal.put("bankIncome", bankIncomeIC); + ICTotal.put("giftIncome", giftIncomeIC); + ICTotal.put("publicIncome", publicIncomeIC); + ICTotal.put("num", numIC); + ICTotal.put("group", "IC卡"); + ICTotal.put("rowspan", 0); + ICTotal.put("colspan", 0); + result.add(ICTotal); + } + // VIP卡 + BigDecimal totalIncomeVIP = BigDecimal.ZERO; + BigDecimal cashIncomeVIP = BigDecimal.ZERO; + BigDecimal bankIncomeVIP = BigDecimal.ZERO; + BigDecimal wechatIncomeVIP = BigDecimal.ZERO; + BigDecimal alipayIncomeVIP = BigDecimal.ZERO; + BigDecimal giftIncomeVIP = BigDecimal.ZERO; + BigDecimal publicIncomeVIP = BigDecimal.ZERO; + int numVIP = 0; + List vipList = thinkUsersVipService.list( + new LambdaQueryWrapper() + .select(ThinkUsersVip::getName, ThinkUsersVip::getVid) + .eq(ThinkUsersVip::getStatus, 1) + .eq(ThinkUsersVip::getSid, param.getSid()) + .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); + Map data = new HashMap<>(); + List list = thinkUsersVipService.list( + new LambdaQueryWrapper() + .eq(ThinkUsersVip::getVid, card.getVid()) + .eq(ThinkUsersVip::getStatus, 1) + .eq(ThinkUsersVip::getSid, param.getSid()) + .between(ThinkUsersVip::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + ); + data.put("name", card.getName()); + data.put("num", list.size()); + data.put("vid", card.getVid()); + BigDecimal totalIncome = list.stream().map(ThinkUsersVip::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal cashIncome = BigDecimal.ZERO; + BigDecimal bankIncome = BigDecimal.ZERO; + BigDecimal wechatIncome = BigDecimal.ZERO; + BigDecimal alipayIncome = BigDecimal.ZERO; + BigDecimal giftIncome = BigDecimal.ZERO; + BigDecimal publicIncome = BigDecimal.ZERO; + + for (ThinkUsersVip card1 : list) { + wechatIncome = wechatIncome.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", "VIP卡"); + data.put("rowspan", i == 0 ? vipList.size() + 1 : 0); + data.put("colspan", i == 0 ? 1 : 0); + if (i == 0) data.put("isFirst", true); + result.add(data); + + totalIncomeVIP = totalIncomeVIP.add(totalIncome); + wechatIncomeVIP = wechatIncomeVIP.add(wechatIncome); + numVIP += list.size(); + } + + Map VIPTotal = new HashMap<>(); + VIPTotal.put("name", "VIP合计"); + VIPTotal.put("totalIncome", totalIncomeVIP); + VIPTotal.put("wechatIncome", wechatIncomeVIP); + VIPTotal.put("alipayIncome", alipayIncomeVIP); + VIPTotal.put("cashIncome", cashIncomeVIP); + VIPTotal.put("bankIncome", bankIncomeVIP); + VIPTotal.put("giftIncome", giftIncomeVIP); + VIPTotal.put("publicIncome", publicIncomeVIP); + VIPTotal.put("num", numVIP); + VIPTotal.put("group", "VIP卡"); + VIPTotal.put("rowspan", 0); + VIPTotal.put("colspan", 0); + result.add(VIPTotal); + } + // 线下&小程序 + BigDecimal totalIncomeOfflineAdult = BigDecimal.ZERO; + BigDecimal cashIncomeOfflineAdult = BigDecimal.ZERO; + BigDecimal bankIncomeOfflineAdult = BigDecimal.ZERO; + BigDecimal wechatIncomeOfflineAdult = BigDecimal.ZERO; + BigDecimal alipayIncomeOfflineAdult = BigDecimal.ZERO; + BigDecimal giftIncomeOfflineAdult = BigDecimal.ZERO; + int numOfflineAdult = 0; + + BigDecimal totalIncomeOfflineChild = BigDecimal.ZERO; + BigDecimal cashIncomeOfflineChild = BigDecimal.ZERO; + BigDecimal bankIncomeOfflineChild = BigDecimal.ZERO; + BigDecimal wechatIncomeOfflineChild = BigDecimal.ZERO; + BigDecimal alipayIncomeOfflineChild = BigDecimal.ZERO; + BigDecimal giftIncomeOfflineChild = BigDecimal.ZERO; + int numOfflineChild = 0; + + BigDecimal totalIncomeOnlineAdult = BigDecimal.ZERO; + BigDecimal wechatIncomeOnlineAdult = BigDecimal.ZERO; + int numOnlineAdult = 0; + + BigDecimal totalIncomeOnlineChild = BigDecimal.ZERO; + BigDecimal wechatIncomeOnlineChild = BigDecimal.ZERO; + 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()) + ); + if (!list.isEmpty()) { + BigDecimal totalIncomeAdult = BigDecimal.ZERO; + BigDecimal wechatIncomeAdult = BigDecimal.ZERO; + BigDecimal incomeByCardAdult = BigDecimal.ZERO; + + BigDecimal totalIncomeChild = BigDecimal.ZERO; + BigDecimal wechatIncomeChild = BigDecimal.ZERO; + BigDecimal incomeByCardChild = BigDecimal.ZERO; + + BigDecimal totalIncomeAdultOffline = BigDecimal.ZERO; + BigDecimal cashIncomeAdultOffline = BigDecimal.ZERO; + BigDecimal bankIncomeAdultOffline = BigDecimal.ZERO; + BigDecimal wechatIncomeAdultOffline = BigDecimal.ZERO; + BigDecimal alipayIncomeAdultOffline = BigDecimal.ZERO; + BigDecimal giftIncomeAdultOffline = BigDecimal.ZERO; + BigDecimal incomeByCardAdultOffline = BigDecimal.ZERO; + + + BigDecimal totalIncomeChildOffline = BigDecimal.ZERO; + BigDecimal cashIncomeChildOffline = BigDecimal.ZERO; + BigDecimal bankIncomeChildOffline = BigDecimal.ZERO; + BigDecimal wechatIncomeChildOffline = BigDecimal.ZERO; + BigDecimal alipayIncomeChildOffline = BigDecimal.ZERO; + BigDecimal giftIncomeChildOffline = BigDecimal.ZERO; + BigDecimal incomeByCardChildOffline = BigDecimal.ZERO; + + + List thinkOrderInfoAllList = thinkOrderInfoService.list( + new LambdaQueryWrapper() + .in(ThinkOrderInfo::getOid, list.stream().map(ThinkOrder::getId).toList()) + ); + Set cidList; + Set codeList; + Set userVidList = new HashSet<>(); + if (!list.isEmpty()) { + cidList = list.stream().map(ThinkOrder::getCid).filter(cid -> cid != 0).collect(Collectors.toSet()); + codeList = list.stream().filter(code -> code != null).map(ThinkOrder::getCode).collect(Collectors.toSet()); + userVidList = list.stream().map(ThinkOrder::getVid).filter(uvid -> uvid != 0).collect(Collectors.toSet()); + } else { + codeList = new HashSet<>(); + cidList = new HashSet<>(); + } + List thinkCardList = new ArrayList<>(); + if (!codeList.isEmpty()) { + thinkCardList = thinkCardService.list( + new LambdaQueryWrapper().in(ThinkCard::getCode, codeList) + ); + } + List thinkCardList1 = new ArrayList<>(); + if (!cidList.isEmpty()) { + thinkCardList1 = thinkCardService.list( + new LambdaQueryWrapper().in(ThinkCard::getId, cidList) + ); + } + List thinkUsersVipList = new ArrayList<>(); + if (!userVidList.isEmpty()) { + thinkUsersVipList = thinkUsersVipService.list( + new LambdaQueryWrapper() + .in(ThinkUsersVip::getId, userVidList) + ); + } + thinkCardList.addAll(thinkCardList1); + List vidList = new ArrayList<>(); + vidList.addAll(thinkCardList.stream().map(ThinkCard::getVid).toList()); + vidList.addAll(thinkUsersVipList.stream().map(ThinkUsersVip::getVid).toList()); + List thinkVipList = new ArrayList<>(); + if (!vidList.isEmpty()) + thinkVipList = thinkVipService.listByIds(vidList); + + for (ThinkOrder order : list) { + List thinkOrderInfoList = thinkOrderInfoAllList.stream() + .filter(info -> info.getOid().equals(order.getId())).toList(); + 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); + numOfflineAdult += 1; + } else { + incomeByCardChildOffline = incomeByCardChildOffline.add(amount); + numOfflineChild += 1; + } + } else { + if (info.getAdultNum() > 0) { + incomeByCardAdult = incomeByCardAdult.add(amount); + numOnlineAdult += 1; + } else { + incomeByCardChild = incomeByCardChild.add(amount); + 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: { + amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getMonth() * 365), 2, RoundingMode.HALF_UP); + } + break; + case 7: { + amount = thinkCard.getPrice().divide(new BigDecimal(thinkCard.getTerm() * 30), 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; + } else { + incomeByCardChildOffline = incomeByCardChildOffline.add(amount); + numOfflineChild += 1; + } + } else { + if (info.getAdultNum() > 0) { + incomeByCardAdult = incomeByCardAdult.add(amount); + numOnlineAdult += 1; + } else { + incomeByCardChild = incomeByCardChild.add(amount); + numOnlineChild += 1; + } + } + } else { + // 线下 + if (order.getAid() != 0) { + if (info.getAdultNum() > 0) { + if (order.getPayType().equals(1)) { + wechatIncomeAdultOffline = wechatIncomeAdultOffline.add(order.getTotalPrice()); + numOfflineAdult += 1; + } else if (order.getPayType().equals(3)) { + alipayIncomeAdultOffline = alipayIncomeAdultOffline.add(order.getTotalPrice()); + numOfflineAdult += 1; + } else if (order.getPayType().equals(4)) { + cashIncomeAdultOffline = cashIncomeAdultOffline.add(order.getTotalPrice()); + numOfflineAdult += 1; + } else if (order.getPayType().equals(5)) { + bankIncomeAdultOffline = bankIncomeAdultOffline.add(order.getTotalPrice()); + numOfflineAdult += 1; + } else if (order.getPayType().equals(12)) { + giftIncomeAdultOffline = giftIncomeAdultOffline.add(order.getTotalPrice()); + numOfflineAdult += 1; + } + } else if (info.getChildrenNum() > 0) { + if (order.getPayType().equals(1)) { + wechatIncomeChildOffline = wechatIncomeChildOffline.add(order.getTotalPrice()); + numOfflineChild += 1; + } else if (order.getPayType().equals(3)) { + alipayIncomeChildOffline = alipayIncomeChildOffline.add(order.getTotalPrice()); + numOfflineChild += 1; + } else if (order.getPayType().equals(4)) { + cashIncomeChildOffline = cashIncomeChildOffline.add(order.getTotalPrice()); + numOfflineChild += 1; + } else if (order.getPayType().equals(5)) { + bankIncomeChildOffline = bankIncomeChildOffline.add(order.getTotalPrice()); + numOfflineChild += 1; + } else if (order.getPayType().equals(12)) { + giftIncomeChildOffline = giftIncomeChildOffline.add(order.getTotalPrice()); + numOfflineChild += 1; + } + } + } else { + if (info.getAdultNum() > 0) { + wechatIncomeAdult = wechatIncomeAdult.add(order.getTotalPrice()); + numOnlineAdult += 1; + } else if (info.getChildrenNum() > 0) { + wechatIncomeChild = wechatIncomeChild.add(order.getTotalPrice()); + numOnlineChild += 1; + } + } + } + } + } + totalIncomeOfflineAdult = wechatIncomeAdultOffline.add(alipayIncomeAdultOffline).add(cashIncomeAdultOffline).add(bankIncomeAdultOffline).add(giftIncomeAdultOffline); + totalIncomeOfflineChild = wechatIncomeChildOffline.add(alipayIncomeChildOffline).add(cashIncomeChildOffline).add(bankIncomeChildOffline).add(giftIncomeChildOffline); + totalIncomeOnlineAdult = wechatIncomeAdult; + totalIncomeOnlineChild = wechatIncomeChild; + + + Map data = new HashMap<>(); + data.put("name", "小程序"); + data.put("group", "成人票"); + data.put("totalIncome", incomeByCardAdult); + data.put("wechatIncome", wechatIncomeAdult); + data.put("alipayIncome", BigDecimal.ZERO); + data.put("cashIncome", BigDecimal.ZERO); + data.put("bankIncome", BigDecimal.ZERO); + data.put("giftIncome", BigDecimal.ZERO); + data.put("num", numOnlineAdult); + data.put("publicIncome", BigDecimal.ZERO); + data.put("rowspan", 3); + data.put("colspan", 1); + data.put("isFirst", true); + result.add(data); + + + Map data1 = new HashMap<>(); + data1.put("name", "现场"); + data1.put("group", "成人票"); + data1.put("totalIncome", incomeByCardAdultOffline); + data1.put("wechatIncome", wechatIncomeAdultOffline); + data1.put("alipayIncome", alipayIncomeAdultOffline); + data1.put("cashIncome", cashIncomeAdultOffline); + data1.put("bankIncome", bankIncomeAdultOffline); + data1.put("giftIncome", giftIncomeAdultOffline); + data1.put("num", numOfflineAdult); + data1.put("publicIncome", BigDecimal.ZERO); + data1.put("rowspan", 0); + data1.put("colspan", 0); + result.add(data1); + +// +// wechatIncomeOfflineAdult = wechatIncomeOfflineAdult.add(wechatIncomeAdultOffline); +// alipayIncomeOfflineAdult = alipayIncomeOfflineAdult.add(alipayIncomeAdultOffline); +// cashIncomeOfflineAdult = cashIncomeOfflineAdult.add(cashIncomeAdultOffline); +// bankIncomeOfflineAdult = bankIncomeOfflineAdult.add(bankIncomeAdultOffline); +// giftIncomeOfflineAdult = giftIncomeOfflineAdult.add(giftIncomeAdultOffline); +// wechatIncomeOfflineChild = wechatIncomeOfflineChild.add(wechatIncomeChildOffline); +// alipayIncomeOfflineChild = alipayIncomeOfflineChild.add(alipayIncomeChildOffline); +// cashIncomeOfflineChild = cashIncomeOfflineChild.add(cashIncomeChildOffline); +// bankIncomeOfflineChild = bankIncomeOfflineChild.add(bankIncomeChildOffline); +// giftIncomeOfflineChild = giftIncomeOfflineChild.add(giftIncomeChildOffline); + + Map data2 = new HashMap<>(); + data2.put("name", "消费合计"); + data2.put("group", "成人票"); + data2.put("totalIncome", incomeByCardAdult.add(incomeByCardAdultOffline)); + data2.put("wechatIncome", wechatIncomeAdultOffline.add(wechatIncomeAdult)); + data2.put("alipayIncome", alipayIncomeAdultOffline); + data2.put("cashIncome", cashIncomeAdultOffline); + data2.put("bankIncome", bankIncomeAdultOffline); + data2.put("giftIncome", giftIncomeAdultOffline); + data2.put("num", numOnlineAdult + numOfflineAdult); + data2.put("publicIncome", BigDecimal.ZERO); + data2.put("rowspan", 0); + data2.put("colspan", 0); + result.add(data2); + + + if (param.getSid().equals(37)) { + + Map data3 = new HashMap<>(); + data3.put("name", "小程序"); + data3.put("group", "儿童票"); + data3.put("totalIncome", 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("num", numOnlineChild); + data3.put("publicIncome", BigDecimal.ZERO); + data3.put("rowspan", 3); + data3.put("colspan", 1); + data3.put("isFirst", true); + result.add(data3); + + Map data4 = new HashMap<>(); + data4.put("name", "现场"); + data4.put("group", "儿童票"); + data4.put("totalIncome", incomeByCardChildOffline); + data4.put("wechatIncome", wechatIncomeChildOffline); + data4.put("alipayIncome", alipayIncomeChildOffline); + data4.put("cashIncome", cashIncomeChildOffline); + data4.put("bankIncome", bankIncomeChildOffline); + data4.put("giftIncome", giftIncomeChildOffline); + data4.put("num", numOfflineChild); + data4.put("publicIncome", BigDecimal.ZERO); + data4.put("rowspan", 0); + data4.put("colspan", 0); + result.add(data4); + + Map data5 = new HashMap<>(); + data5.put("name", "消费合计"); + data5.put("group", "儿童票"); + data5.put("totalIncome", 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("publicIncome", BigDecimal.ZERO); + data5.put("rowspan", 0); + data5.put("colspan", 0); + result.add(data5); + } + } + if (param.getIsExport() != null) { + String filename = "excel/广西体育中心报表-" + new Date().getTime() + ".xlsx"; + String path = uploadPath + filename; + SXSSFWorkbook workbook = new SXSSFWorkbook(); + SXSSFSheet sheet = workbook.createSheet(); + sheet.setColumnWidth(0, 15 * 256); + String[] headers = {"卡类型", "卡类型", "销售数量", "总金额", "现金支付", "银行卡支付", "微信支付", "支付宝支付", "对公支付", "赠送数量"}; + SXSSFRow row = sheet.createRow(0); + for (int i = 0; i < headers.length; i++) { + row.createCell(i).setCellValue(headers[i]); + } + int rowNum = 1; + List> mergeList = result.stream().filter(map -> map.get("isFirst") != null).toList(); + int addRowNum = 1; + for (int i = 0; i < result.size(); i++) { + SXSSFRow row0 = sheet.createRow(i + 1); + for (int j = 0; j < 9; j++) { + row0.createCell(j); + } + } + for (Map map : mergeList) { + sheet.addMergedRegion(new CellRangeAddress(addRowNum, addRowNum + (Integer) map.get("rowspan") - 1, 0, 0)); + SXSSFRow row0 = sheet.getRow(addRowNum); + row0.getCell(0).setCellValue((String) map.get("group")); + addRowNum += (Integer) map.get("rowspan"); + } + for (Map map : result) { + 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(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"))); + rowNum += 1; + } + FileOutputStream output = new FileOutputStream(path); + workbook.write(output); + output.flush(); + + FileRecord fileResult = new FileRecord(); + fileResult.setCreateUserId(getLoginUserId()); + fileResult.setName(filename); + fileResult.setPath(path); + fileResult.setUrl(config.getServerUrl() + "/file/" + filename); + return success(fileResult); + } + return + + success(result); + } + + @PostMapping("/data-list-for-front") + public ApiResult> dataListForFront(@RequestBody ThinkOrderParam param) throws IOException { + if (param.getType().equals(0)) { + List list = thinkCardService.list( + new LambdaQueryWrapper() + .eq(ThinkCard::getVid, param.getVid()) + .eq(ThinkCard::getStatus, 1) + .eq(ThinkCard::getSid, param.getSid()) + .between(ThinkCard::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .groupBy(ThinkCard::getDiscount) + ); + for (ThinkCard thinkCard : list) { + thinkCard.setNum(thinkCardService.count( + new LambdaQueryWrapper() + .eq(ThinkCard::getVid, param.getVid()) + .eq(ThinkCard::getStatus, 1) + .eq(ThinkCard::getSid, param.getSid()) + .between(ThinkCard::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .eq(ThinkCard::getDiscount, thinkCard.getDiscount()) + )); + } + return success(list); + } else if (param.getType().equals(1)) { + List list = thinkUsersVipService.list( + new LambdaQueryWrapper() + .eq(ThinkUsersVip::getVid, param.getVid()) + .eq(ThinkUsersVip::getStatus, 1) + .eq(ThinkUsersVip::getSid, param.getSid()) + .between(ThinkUsersVip::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .groupBy(ThinkUsersVip::getDiscount) + ); + for (ThinkUsersVip thinkCard : list) { + thinkCard.setNum(thinkUsersVipService.count( + new LambdaQueryWrapper() + .eq(ThinkUsersVip::getVid, param.getVid()) + .eq(ThinkUsersVip::getStatus, 1) + .eq(ThinkUsersVip::getSid, param.getSid()) + .between(ThinkUsersVip::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd()) + .eq(ThinkUsersVip::getDiscount, thinkCard.getDiscount()) + )); + } + return success(list); + } + return success(); + } } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java index a2949ce..d088a8a 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderRefundLogController.java @@ -45,6 +45,8 @@ public class ThinkOrderRefundLogController extends BaseController { @Resource private ThinkOrderService thinkOrderService; @Resource + private ThinkOrderInfoService thinkOrderInfoService; + @Resource private WechatConfigService wechatConfigService; @Resource private ThinkVipCardsBillsService thinkVipCardsBillsService; @@ -76,7 +78,15 @@ public class ThinkOrderRefundLogController extends BaseController { } if (notification.getRefundStatus().equals(Status.SUCCESS)) { thinkOrderRefundLog.setStatus(2); - if (thinkOrder != null) thinkOrder.setOrderStatus(6); + if (thinkOrder != null) { + thinkOrder.setOrderStatus(6); + thinkOrder.setRefundTime((int) (System.currentTimeMillis() / 1000)); + List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId()); + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + thinkOrderInfo.setPayStatus(0); + } + thinkOrderInfoService.updateBatchById(thinkOrderInfoList); + } } else if (notification.getRefundStatus().equals(Status.ABNORMAL) || notification.getRefundStatus().equals(Status.CLOSED)) { thinkOrderRefundLog.setStatus(4); @@ -121,14 +131,22 @@ public class ThinkOrderRefundLogController extends BaseController { thinkOrderService.updateById(thinkOrder); if (thinkOrder.getPayType().equals(1)) { thinkOrderService.refund(thinkOrderRefundLog); - }else { + } else { + 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.setOrderStatus(6); + thinkOrder.setRefundTime((int) (System.currentTimeMillis() / 1000)); thinkOrderService.updateById(thinkOrder); if (thinkOrder.getVid() != null && thinkOrder.getVid() != 0) { ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); thinkVipCardsBills.setVid(thinkOrder.getVid()); thinkVipCardsBills.setUid(thinkOrder.getUid()); - DateTime dateTime = DateUtil.date(Long.parseLong(thinkOrder.getStartTime()) * 1000L); + DateTime dateTime = DateUtil.date(thinkOrderInfoList.get(0).getStartTime() * 1000L); thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); thinkVipCardsBillsService.cancelLog(thinkVipCardsBills); @@ -139,14 +157,21 @@ public class ThinkOrderRefundLogController extends BaseController { } else if (usersVip.getType().equals(4)) { BigDecimal newBalance = usersVip.getRemainingMoney().add(usersVip.getEachMoney()); usersVip.setRemainingMoney(newBalance); - usersVip.setNum(usersVip.getNum() + 1); + usersVip.setNum(usersVip.getNum() + num); } else { - usersVip.setNum(usersVip.getNum() + 1); + usersVip.setNum(usersVip.getNum() + num); } + usersVip.setUseTime(0L); thinkUsersVipService.updateById(usersVip); } - if (thinkOrder.getCid() != null && thinkOrder.getCid() != 0) { - ThinkCard card = thinkCardService.getByCode(thinkOrder.getCode()); + ThinkCard card = null; + if (thinkOrder.getCode() != null && !thinkOrder.getCode().isEmpty()) { + card = thinkCardService.getByCode(thinkOrder.getCode()); + } + if (card == null && thinkOrder.getCid() != null && thinkOrder.getCid() != 0) { + card = thinkCardService.getById(thinkOrder.getCid()); + } + if (card != null) { if (card.getType().equals(5)) { BigDecimal newBalance = card.getRemainingMoney().add(thinkOrder.getPayPrice()); card.setRemainingMoney(newBalance); @@ -156,11 +181,13 @@ public class ThinkOrderRefundLogController extends BaseController { } else if (card.getType().equals(2)) { card.setNum(card.getNum() + 1); } + card.setUseTime(0L); + thinkCardService.updateById(card); ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills(); thinkVipCardsBills.setCid(thinkOrder.getCid()); thinkVipCardsBills.setUid(thinkOrder.getUid()); - DateTime dateTime = DateUtil.date(Long.parseLong(thinkOrder.getStartTime()) * 1000L); + DateTime dateTime = DateUtil.date(thinkOrderInfoList.get(0).getStartTime() * 1000L); thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd")); thinkVipCardsBillsService.cancelLog(thinkVipCardsBills); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java index 6f85bd8..95aedd0 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkRechargeLogController.java @@ -1,8 +1,9 @@ package com.gxwebsoft.think.controller; +import cn.hutool.core.date.DateUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.service.ThinkRechargeLogService; -import com.gxwebsoft.think.entity.ThinkRechargeLog; import com.gxwebsoft.think.param.ThinkRechargeLogParam; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; @@ -10,13 +11,23 @@ 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.ThinkUsersVipService; +import com.gxwebsoft.think.service.ThinkVipService; +import com.gxwebsoft.think.service.WechatConfigService; +import com.wechat.pay.java.core.notification.NotificationConfig; +import com.wechat.pay.java.core.notification.NotificationParser; +import com.wechat.pay.java.core.notification.RequestParam; +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.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * 控制器 @@ -30,6 +41,64 @@ import java.util.List; public class ThinkRechargeLogController extends BaseController { @Resource private ThinkRechargeLogService thinkRechargeLogService; + @Resource + private WechatConfigService wechatConfigService; + @Resource + private ThinkUsersVipService thinkUsersVipService; + @Resource + private ThinkVipService thinkVipService; + + @PostMapping("/refund-notify") + public ApiResult> refundNotify(@RequestBody String body, @RequestHeader Map header) { + System.out.println("recharge refund body = " + body); + com.wechat.pay.java.core.notification.RequestParam requestParam = new RequestParam.Builder() + .serialNumber(header.get("wechatpay-serial").toString()) + .nonce(header.get("wechatpay-nonce").toString()) + .signature(header.get("wechatpay-signature").toString()) + .timestamp(header.get("wechatpay-timestamp").toString()) + .body(body) + .build(); + NotificationConfig config = wechatConfigService.getNotificationConfig(); + // 初始化 NotificationParser + NotificationParser parser = new NotificationParser(config); + RefundNotification notification = parser.parse(requestParam, RefundNotification.class); + System.out.println("notification = " + notification); + String refundNo = notification.getOutRefundNo(); + if (notification.getRefundStatus().equals(Status.SUCCESS)) { + ThinkRechargeLog thinkRechargeLog = thinkRechargeLogService.getByRefundNumber(refundNo); + if (thinkRechargeLog != null) { + thinkRechargeLog.setStatus(3); + thinkRechargeLogService.updateById(thinkRechargeLog); + ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkRechargeLog.getVid()); + if (thinkUsersVip != null) { + if (thinkUsersVip.getType().equals(4) || thinkUsersVip.getType().equals(5)) { + BigDecimal remain = thinkUsersVip.getRemainingMoney().subtract(thinkUsersVip.getPrice()); + if (remain.compareTo(BigDecimal.ZERO) < 1) thinkUsersVip.setStatus(3); + else thinkUsersVip.setRemainingMoney(remain); + } + else { + int num = thinkUsersVip.getNum() - thinkUsersVip.getCount(); + if (num <= 0) thinkUsersVip.setStatus(3); + else thinkUsersVip.setNum(num); + } + + thinkUsersVipService.updateById(thinkUsersVip); + } + } + } + + return success(); + } + + @ApiOperation("退款") + @PostMapping("/refund") + public ApiResult> refund(@RequestBody ThinkRechargeLog thinkRechargeLog) { + ThinkRechargeLog thinkRechargeLog1 = thinkRechargeLogService.getById(thinkRechargeLog.getId()); + thinkRechargeLog1.setRefundNo("R" + thinkRechargeLog1.getOrderNum()); + thinkRechargeLogService.updateById(thinkRechargeLog1); + thinkRechargeLogService.refund(thinkRechargeLog1); + return success(); + } @ApiOperation("分页查询") @GetMapping("/page") @@ -62,6 +131,7 @@ public class ThinkRechargeLogController extends BaseController { return fail("添加失败"); } + @ApiOperation("修改") @PutMapping() public ApiResult> update(@RequestBody ThinkRechargeLog thinkRechargeLog) { diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java index cdc6170..cc6a082 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkSiteController.java @@ -36,6 +36,7 @@ public class ThinkSiteController extends BaseController { @GetMapping("/page") public ApiResult> page(ThinkSiteParam param) { // 使用关联查询 + if (getLoginUser() != null) param.setLoginUser(getLoginUser()); return success(thinkSiteService.pageRel(param)); } @@ -45,6 +46,7 @@ public class ThinkSiteController extends BaseController { if (param.getIds() != null) { param.setIdList(Arrays.stream(param.getIds().split(",")).map(Integer::parseInt).toList()); } + if (getLoginUser() != null && param.getIsAdmin() != null) param.setLoginUser(getLoginUser()); // 使用关联查询 return success(thinkSiteService.listRel(param)); } diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkSiteTimeController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkSiteTimeController.java index b6f04c6..b59be5f 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkSiteTimeController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkSiteTimeController.java @@ -50,20 +50,12 @@ public class ThinkSiteTimeController extends BaseController { @ApiOperation("查询全部") @GetMapping() public ApiResult> list(ThinkSiteTimeParam param) { - List list = new ArrayList<>(); - String redisList = redisUtil.get("site_time_list_" + param.getSid()); - if (redisList == null || redisList.isEmpty()) { - list = thinkSiteTimeService.list( - new LambdaQueryWrapper() - .eq(ThinkSiteTime::getSid, param.getSid()) - .eq(ThinkSiteTime::getIsStatus, 1) - .orderByAsc(ThinkSiteTime::getSort) - ); - redisUtil.set("site_time_list_" + param.getSid(), JSONUtil.toJsonStr(list)); - }else { - list = JSONUtil.parseArray(redisList).toList(ThinkSiteTime.class); - } - // 使用关联查询 + List list = thinkSiteTimeService.list( + new LambdaQueryWrapper() + .eq(ThinkSiteTime::getSid, param.getSid()) + .eq(ThinkSiteTime::getIsStatus, 1) + .orderByAsc(ThinkSiteTime::getSort) + ); return success(list); } @@ -78,6 +70,8 @@ public class ThinkSiteTimeController extends BaseController { @ApiOperation("添加") @PostMapping() public ApiResult> save(@RequestBody ThinkSiteTime thinkSiteTime) { + thinkSiteTime.setCreateTime((int) (System.currentTimeMillis()/1000)); + thinkSiteTime.setUpdateTime((int) (System.currentTimeMillis()/1000)); if (thinkSiteTimeService.save(thinkSiteTime)) { redisUtil.delete("site_time_list_" + thinkSiteTime.getSid()); return success("添加成功"); @@ -88,6 +82,7 @@ public class ThinkSiteTimeController extends BaseController { @ApiOperation("修改") @PutMapping() public ApiResult> update(@RequestBody ThinkSiteTime thinkSiteTime) { + thinkSiteTime.setUpdateTime((int) (System.currentTimeMillis()/1000)); if (thinkSiteTimeService.updateById(thinkSiteTime)) { redisUtil.delete("site_time_list_" + thinkSiteTime.getSid()); return success("修改成功"); diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipBuyLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipBuyLogController.java new file mode 100644 index 0000000..d74e866 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipBuyLogController.java @@ -0,0 +1,110 @@ +package com.gxwebsoft.think.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.think.service.ThinkUsersVipBuyLogService; +import com.gxwebsoft.think.entity.ThinkUsersVipBuyLog; +import com.gxwebsoft.think.param.ThinkUsersVipBuyLogParam; +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.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Vip购卡记录控制器 + * + * @author 科技小王子 + * @since 2025-03-25 19:21:56 + */ +@Api(tags = "Vip购卡记录管理") +@RestController +@RequestMapping("/api/think/think-users-vip-buy-log") +public class ThinkUsersVipBuyLogController extends BaseController { + @Resource + private ThinkUsersVipBuyLogService thinkUsersVipBuyLogService; + + @ApiOperation("分页查询Vip购卡记录") + @GetMapping("/page") + public ApiResult> page(ThinkUsersVipBuyLogParam param) { + // 使用关联查询 + return success(thinkUsersVipBuyLogService.pageRel(param)); + } + + @ApiOperation("查询全部Vip购卡记录") + @GetMapping() + public ApiResult> list(ThinkUsersVipBuyLogParam param) { + // 使用关联查询 + return success(thinkUsersVipBuyLogService.listRel(param)); + } + + @PreAuthorize("hasAuthority('think:thinkUsersVipBuyLog:list')") + @ApiOperation("根据id查询Vip购卡记录") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(thinkUsersVipBuyLogService.getByIdRel(id)); + } + + @ApiOperation("添加Vip购卡记录") + @PostMapping() + public ApiResult> save(@RequestBody ThinkUsersVipBuyLog thinkUsersVipBuyLog) { + if (thinkUsersVipBuyLogService.save(thinkUsersVipBuyLog)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改Vip购卡记录") + @PutMapping() + public ApiResult> update(@RequestBody ThinkUsersVipBuyLog thinkUsersVipBuyLog) { + if (thinkUsersVipBuyLogService.updateById(thinkUsersVipBuyLog)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除Vip购卡记录") + @DeleteMapping("/{id}") + public ApiResult> remove(@PathVariable("id") Integer id) { + if (thinkUsersVipBuyLogService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加Vip购卡记录") + @PostMapping("/batch") + public ApiResult> saveBatch(@RequestBody List list) { + if (thinkUsersVipBuyLogService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改Vip购卡记录") + @PutMapping("/batch") + public ApiResult> removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(thinkUsersVipBuyLogService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除Vip购卡记录") + @DeleteMapping("/batch") + public ApiResult> removeBatch(@RequestBody List ids) { + if (thinkUsersVipBuyLogService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java index b20d9d1..0779887 100644 --- a/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java +++ b/src/main/java/com/gxwebsoft/think/controller/ThinkUsersVipController.java @@ -7,6 +7,10 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.SymmetricAlgorithm; +import cn.hutool.crypto.symmetric.SymmetricCrypto; +import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.param.ThinkOrderParam; @@ -23,6 +27,7 @@ import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.core.notification.RequestParam; 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.*; @@ -54,6 +59,12 @@ public class ThinkUsersVipController extends BaseController { private ThinkSiteService thinkSiteService; @Resource private ThinkVipCardsBillsService thinkVipCardsBillsService; + @Resource + private ThinkUsersVipBuyLogService thinkUsersVipBuyLogService; + @Resource + private ThinkRechargeLogService thinkRechargeLogService; + @Autowired + private RedisUtil redisUtil; @ApiOperation("分页查询") @GetMapping("/page") @@ -61,6 +72,7 @@ public class ThinkUsersVipController extends BaseController { if (param.getForAdmin() == null) { if (getLoginUser() == null) return fail("请先登录"); param.setUid(getLoginUser().getUid()); + param.setStatus(1); } // 使用关联查询 return success(thinkUsersVipService.pageRel(param)); @@ -72,11 +84,29 @@ public class ThinkUsersVipController extends BaseController { // 使用关联查询 if (param.getForAdmin() == null) { if (getLoginUser() == null) return fail("请先登录"); + param.setStatus(1); param.setUid(getLoginUser().getUid()); } return success(thinkUsersVipService.listRel(param)); } + @ApiOperation("码") + @GetMapping("/code/{id}") + public ApiResult> code(@PathVariable("id") Integer id) { + String secretKey = redisUtil.get("secretKey_10150"); + 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); + String code = aes.encryptHex(id + "_" + timestamp + "_vipCard"); + return success("成功", code); + } + @ApiOperation("根据id查询") @GetMapping("/{id}") public ApiResult> get(@PathVariable("id") Integer id) { @@ -95,6 +125,21 @@ public class ThinkUsersVipController extends BaseController { return success(thinkUsersVip); } + @ApiOperation("根据id查询") + @GetMapping("/info-for-admin/{id}") + public ApiResult> infoForAdmin(@PathVariable("id") Integer id) { + ThinkUsersVip thinkUsersVip = thinkUsersVipService.getByIdRel(id); + String[] siteStrList = thinkUsersVip.getSid().split(","); + List siteNamesList = new ArrayList<>(); + for (String siteStr : siteStrList) { + ThinkSite site = thinkSiteService.getByIdRel(Integer.valueOf(siteStr)); + if (site != null) siteNamesList.add(site.getName()); + } + if (!siteNamesList.isEmpty()) thinkUsersVip.setSiteNames(StrUtil.join(",", siteNamesList)); + // 使用关联查询 + return success(thinkUsersVip); + } + @ApiOperation("微信通知") @PostMapping("/notify") public String notify(@RequestBody String body, @RequestHeader Map header) { @@ -111,6 +156,7 @@ public class ThinkUsersVipController extends BaseController { com.wechat.pay.java.service.payments.model.Transaction transaction = parser.parse(requestParam, com.wechat.pay.java.service.payments.model.Transaction.class); // 查询订单信息 final ThinkUsersVip order = thinkUsersVipService.getByOrderNo(transaction.getOutTradeNo()); + ThinkUsersVip usersVip = null; if (order == null) return "订单不存在"; usersVip = order; @@ -121,16 +167,22 @@ public class ThinkUsersVipController extends BaseController { order.setPrices(order.getTempPrices()); // 查找有没有一样的卡 ThinkUsersVip sameOrder = thinkUsersVipService.getByVidAndUid(order.getVid(), order.getUid()); - if (sameOrder != null) { + System.out.println("sameOrder >>>>> " + sameOrder); + ThinkVip thinkVip = thinkVipService.getByIdRel(order.getVid()); + if (sameOrder != null && !sameOrder.getId().equals(order.getId()) && thinkVip.getMode().equals(0)) { usersVip = sameOrder; - // 是否已过期,过期的从现在开始计算,未过期的在旧卡基础上叠加 - if (sameOrder.getExpireTime() < DateUtil.currentSeconds()) { - sameOrder.setExpireTime(DateUtil.currentSeconds() + (order.getTerm() * 86400 * 365) + (order.getMonth() * 86400 * 30)); + if (thinkVip.getMode().equals(0)) { + // 是否已过期,过期的从现在开始计算,未过期的在旧卡基础上叠加 + if (sameOrder.getExpireTime() < DateUtil.currentSeconds()) { + sameOrder.setExpireTime(DateUtil.currentSeconds() + (order.getTerm() * 86400 * 365) + (order.getMonth() * 86400 * 30)); + } else { + sameOrder.setExpireTime(sameOrder.getExpireTime() + (order.getTerm() * 86400 * 365) + (order.getMonth() * 86400 * 30)); + } } else { - sameOrder.setExpireTime(sameOrder.getExpireTime() + (order.getTerm() * 86400 * 365) + (order.getMonth() * 86400 * 30)); + sameOrder.setExpireTime(DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime() / 1000L); } // 充值卡 - if (sameOrder.getType().equals(4)) { + if (sameOrder.getType().equals(4) || sameOrder.getType().equals(5)) { // 是否已过期,过期的清空,未过期的在旧卡基础上叠加 if (sameOrder.getExpireTime() < DateUtil.currentSeconds()) { sameOrder.setRemainingMoney(order.getPrice()); @@ -143,47 +195,54 @@ public class ThinkUsersVipController extends BaseController { } else { sameOrder.setNum(sameOrder.getCount() + order.getCount()); } - sameOrder.setNum(sameOrder.getCount() + order.getCount()); +// sameOrder.setNum(sameOrder.getCount() + order.getCount()); } thinkUsersVipService.updateById(sameOrder); // 删除订单 + System.out.println("del order >>>>> " + order); thinkUsersVipService.removeById(order.getId()); } else { // 充值卡 - if (order.getType().equals(4)) order.setRemainingMoney(order.getPrice()); + if (order.getType().equals(4) || order.getType().equals(5)) order.setRemainingMoney(order.getPrice()); else order.setNum(order.getCount()); thinkUsersVipService.updateById(order); } - if (usersVip != null) { - if (usersVip.getType().equals(1) || usersVip.getType().equals(3)) { - List list = new ArrayList<>(); - BigDecimal avgAmount = BigDecimal.ZERO; - int dayNum = 0; - 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); - list.add(thinkVipCardsBills); - } - thinkVipCardsBillsService.saveBatch(list); + ThinkRechargeLog thinkRechargeLog = thinkRechargeLogService.getByOrderNumber(transaction.getOutTradeNo()); + if (thinkRechargeLog != null) { + thinkRechargeLog.setVid(usersVip.getId()); + thinkRechargeLog.setStatus(1); + thinkRechargeLog.setWechatOrder(transaction.getTransactionId()); + thinkRechargeLog.setPayTime(LocalDateTimeUtil.now()); + thinkRechargeLogService.updateById(thinkRechargeLog); + } + if (usersVip.getType().equals(1) || usersVip.getType().equals(3)) { + List list = new ArrayList<>(); + BigDecimal avgAmount = BigDecimal.ZERO; + int dayNum = 0; + 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); + list.add(thinkVipCardsBills); + } + thinkVipCardsBillsService.saveBatch(list); } } return "订单已支付"; @@ -195,11 +254,13 @@ public class ThinkUsersVipController extends BaseController { public ApiResult> save(@RequestBody ThinkUsersVip thinkUsersVip) { ThinkVip thinkVip = thinkVipService.getByIdRel(thinkUsersVip.getVid()); if (thinkVip == null) return fail("该会员卡不存在"); - if (thinkVip.getIsUse().equals(0)) return fail("该会员卡已下架"); + if (thinkVip.getIsUse().equals(2)) return fail("该会员卡已下架"); if (getLoginUser() == null) return fail("请先登录"); + + String orderNumber = "UV" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss") + getLoginUser().getUid() + RandomUtil.randomNumbers(4); thinkUsersVip.setSid(thinkVip.getSid()); thinkUsersVip.setUid(getLoginUser().getUid()); - thinkUsersVip.setWechatOrder("UV" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss") + getLoginUser().getUid() + RandomUtil.randomNumbers(4)); + thinkUsersVip.setWechatOrder(orderNumber); thinkUsersVip.setCode(RandomUtil.randomNumbers(12)); thinkUsersVip.setName(thinkVip.getName()); thinkUsersVip.setPrice(thinkVip.getPrice()); @@ -215,17 +276,29 @@ public class ThinkUsersVipController extends BaseController { thinkUsersVip.setTempPrices(thinkVip.getPrices()); thinkUsersVip.setIsIntegral(thinkVip.getIsIntegral()); thinkUsersVip.setTerm(thinkVip.getTerm()); - thinkUsersVip.setMonth(thinkVip.getMonth()); + thinkUsersVip.setMode(thinkVip.getMode()); thinkUsersVip.setCreateTime(DateUtil.currentSeconds()); - if (!thinkVip.getTerm().equals(0)) - thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getTerm() * 365 * 24 * 60 * 60); - if (!thinkVip.getMonth().equals(0)) - thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getMonth() * 30 * 24 * 60 * 60); - if (!thinkVip.getDay().equals(0)) - thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getDay() * 24 * 60 * 60); + if (thinkVip.getMode().equals(0)) { + if (!thinkVip.getTerm().equals(0)) + thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getTerm() * 365 * 24 * 60 * 60); + if (!thinkVip.getMonth().equals(0)) + thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getMonth() * 30 * 24 * 60 * 60); + if (!thinkVip.getDay().equals(0)) + thinkUsersVip.setExpireTime(DateUtil.currentSeconds() + (long) thinkVip.getDay() * 24 * 60 * 60); + } else { + long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime(); + thinkUsersVip.setExpireTime(time / 1000); + } + + ThinkRechargeLog thinkRechargeLog = new ThinkRechargeLog(); + thinkRechargeLog.setUid(getLoginUser().getUid()); + thinkRechargeLog.setOrderNum(orderNumber); + thinkRechargeLog.setMoney(thinkVip.getPrice()); + thinkRechargeLog.setCreateTime(DateUtil.currentSeconds()); + thinkRechargeLogService.save(thinkRechargeLog); if (thinkUsersVipService.save(thinkUsersVip)) { - String notify = "https://gxtyzx-api.websoft.top/api/think/think-users-vip/notify"; + String notify = "https://gxtyzx-api2.websoft.top/api/think/think-users-vip/notify"; return success("下单成功", thinkOrderService.createWxOrder(thinkVip.getPrice(), thinkUsersVip.getWechatOrder(), thinkVip.getName(), getLoginUser().getOpenid(), notify)); } @@ -240,8 +313,9 @@ public class ThinkUsersVipController extends BaseController { if (thinkUsersVip1.getStatus().equals(1)) return fail("该订单已支付"); if (thinkUsersVip1.getStatus().equals(3)) return fail("该订单已退款"); if (thinkUsersVip1.getStatus().equals(0)) return fail("该订单已取消"); - - String notify = "https://gxtyzx-api.websoft.top/api/think/think-users-vip/notify"; + thinkUsersVip1.setWechatOrder("UV" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss") + getLoginUser().getUid() + RandomUtil.randomNumbers(4)); + thinkUsersVipService.updateById(thinkUsersVip1); + String notify = "https://gxtyzx-api2.websoft.top/api/think/think-users-vip/notify"; return success("下单成功", thinkOrderService.createWxOrder(thinkUsersVip1.getPrice(), thinkUsersVip1.getWechatOrder(), thinkUsersVip1.getName(), getLoginUser().getOpenid(), notify)); } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java b/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java index 7b3ad57..c051848 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkCard.java @@ -46,6 +46,9 @@ public class ThinkCard implements Serializable { @TableField(value = "`code`") private String code; + @ApiModelProperty(value = "原卡号") + private String originCardCode; + @ApiModelProperty(value = "会员卡名称") @TableField(value = "`name`") private String name; @@ -132,6 +135,9 @@ public class ThinkCard implements Serializable { @ApiModelProperty(value = "卡号") private String cardNum; + @ApiModelProperty(value = "支付凭证") + private String payVoucher; + @ApiModelProperty(value = "密码") @TableField(value = "`password`") private String password; @@ -156,4 +162,15 @@ public class ThinkCard implements Serializable { @TableField(exist = false) private Integer makeNum; + + @ApiModelProperty(value = "原卡信息") + @TableField(exist = false) + private ThinkCard oldCard; + + @ApiModelProperty(value = "新卡信息") + @TableField(exist = false) + private ThinkCard newCard; + + @TableField(exist = false) + private ThinkVip thinkVip; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkDeposit.java b/src/main/java/com/gxwebsoft/think/entity/ThinkDeposit.java index 80183f0..44838d1 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkDeposit.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkDeposit.java @@ -1,6 +1,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 io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -48,6 +49,8 @@ public class ThinkDeposit implements Serializable { @ApiModelProperty(value = "1已付,2已退") private Integer status; + private Integer isAdminOrder; + private String info; @ApiModelProperty(value = "管理员id") @@ -61,4 +64,6 @@ public class ThinkDeposit implements Serializable { private String failReason; + @TableField(exist = false) + private Boolean isAdmin; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java b/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java index a3993af..4324bf6 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkInvoice.java @@ -100,4 +100,6 @@ public class ThinkInvoice implements Serializable { private String remark; + private String url; + } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java b/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java index bd307ef..7de54fe 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkOrder.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.gxwebsoft.common.system.entity.User; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -52,6 +53,8 @@ public class ThinkOrder implements Serializable { @ApiModelProperty(value = "关联管理员id") private Integer aid; + private Integer addFromAdmin; + @ApiModelProperty(value = "核销管理员id") private Integer adminId; @@ -127,9 +130,9 @@ public class ThinkOrder implements Serializable { private Integer isInvoice; @ApiModelProperty(value = "下单时间") - private Integer createTime; + private Long createTime; - private Integer updateTime; + private Long updateTime; @ApiModelProperty(value = "付款时间") private Integer payTime; @@ -169,4 +172,31 @@ public class ThinkOrder implements Serializable { @TableField(exist = false) private ThinkUsersVip thinkVip; + + @TableField(exist = false) + private BigDecimal totalIncome; + + @TableField(exist = false) + private ThinkSite site; + + @TableField(exist = false) + private Integer day; + + @TableField(exist = false) + private Boolean hasExpired; + + @TableField(exist = false) + private BigDecimal realPrice; + + @TableField(exist = false) + private ThinkMachineOpenLog machineOpenLog; + + @TableField(exist = false) + private String sign; + + @TableField(exist = false) + private Long postTime; + + @TableField(exist = false) + private String adminName; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java index e7a9e71..4fb8b82 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkOrderInfo.java @@ -75,11 +75,23 @@ public class ThinkOrderInfo implements Serializable { private Integer startTime; @ApiModelProperty(value = "下单时间") - private Integer orderTime; + private Long orderTime; @ApiModelProperty(value = "毫秒时间戳") private Long timeFlag; @TableField(exist = false) private int siteTimeId; + + @TableField(exist = false) + private Boolean used; + + @TableField(exist = false) + private Boolean soldButNotUsed; + + @TableField(exist = false) + private Boolean addFromAdmin; + + @TableField(exist = false) + private String timePeriod; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkRechargeLog.java b/src/main/java/com/gxwebsoft/think/entity/ThinkRechargeLog.java index 82d3b17..5124723 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkRechargeLog.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkRechargeLog.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDateTime; /** * @@ -32,6 +33,9 @@ public class ThinkRechargeLog implements Serializable { @ApiModelProperty(value = "充值订单号") private String orderNum; + @ApiModelProperty(value = "退款订单号") + private String refundNo; + @ApiModelProperty(value = "微信支付订单号") private String wechatOrder; @@ -44,6 +48,8 @@ public class ThinkRechargeLog implements Serializable { @ApiModelProperty(value = "充值时间") private Long createTime; + private LocalDateTime payTime; + @ApiModelProperty(value = "VID") private Integer vid; @@ -93,4 +99,9 @@ public class ThinkRechargeLog implements Serializable { @TableField(exist = false) private Long expireTime; + @TableField(exist = false) + private ThinkVip thinkVip; + + @TableField(exist = false) + private ThinkUsersVip thinkUsersVip; } diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java b/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java index 4a61d4f..1741f06 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkSite.java @@ -100,6 +100,8 @@ public class ThinkSite implements Serializable { private Integer dailyNum; + private String machineCode; + @TableField(exist = false) private BigDecimal distance; diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVip.java b/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVip.java index d81fc32..bab4164 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVip.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVip.java @@ -88,6 +88,8 @@ public class ThinkUsersVip implements Serializable { @TableField(value = "`month`") private Integer month; + private Integer mode; + @ApiModelProperty(value = "会员卡类型:1年卡,2次卡,3月卡,4会员VIP") private Integer type; @@ -133,6 +135,8 @@ public class ThinkUsersVip implements Serializable { @ApiModelProperty(value = "对账情况:1=已对账;2=未对账;3=已对账,金额对不上;4=未查询到该订单") private Integer checkBill; + private String remark; + @ApiModelProperty(value = "用户名") @TableField(exist = false) private String username; diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVipBuyLog.java b/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVipBuyLog.java new file mode 100644 index 0000000..9f832a3 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkUsersVipBuyLog.java @@ -0,0 +1,59 @@ +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; + +/** + * Vip购卡记录 + * + * @author 科技小王子 + * @since 2025-03-25 19:21:56 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ThinkUsersVipBuyLog对象", description = "Vip购卡记录") +public class ThinkUsersVipBuyLog implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer uid; + + private Integer vid; + + private String orderNumber; + + private String wechetNumber; + + private BigDecimal amount; + + private Integer payStatus; + + private LocalDateTime payTime; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "注册时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java b/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java index 0c7d0d9..ccd1317 100644 --- a/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java +++ b/src/main/java/com/gxwebsoft/think/entity/ThinkVip.java @@ -90,6 +90,10 @@ public class ThinkVip implements Serializable { private Integer updateTime; + private Integer mode; + + private String expiredTime; + @ApiModelProperty(value = "是否有效:1是,0否") private Integer isUse; diff --git a/src/main/java/com/gxwebsoft/think/mapper/ThinkUsersVipBuyLogMapper.java b/src/main/java/com/gxwebsoft/think/mapper/ThinkUsersVipBuyLogMapper.java new file mode 100644 index 0000000..97b77ad --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/ThinkUsersVipBuyLogMapper.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.ThinkUsersVipBuyLog; +import com.gxwebsoft.think.param.ThinkUsersVipBuyLogParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Vip购卡记录Mapper + * + * @author 科技小王子 + * @since 2025-03-25 19:21:56 + */ +public interface ThinkUsersVipBuyLogMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ThinkUsersVipBuyLogParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ThinkUsersVipBuyLogParam param); + +} 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 e0ed8aa..8671562 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardLogMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardLogMapper.xml @@ -4,9 +4,8 @@ - SELECT a.*, b.truename as adminName, c.name as cardName, c.phone, c.username, c.remaining_money,c.num,c.card_type,c.type,c.expire_time + SELECT a.*, c.name as cardName, c.phone, c.username, c.remaining_money,c.num,c.card_type,c.type,c.expire_time FROM think_card_log a - LEFT JOIN think_users b ON a.aid = b.id LEFT JOIN think_card c ON a.code = c.code @@ -46,6 +45,7 @@ AND (a.code LIKE CONCAT('%', #{param.keywords}, '%') OR c.phone = #{param.keywords} OR c.username = #{param.keywords} + OR c.wechat_order = #{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 e24a020..a45de07 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkCardMapper.xml @@ -61,6 +61,9 @@ AND a.number = #{param.number} + + AND a.number > 0 + AND a.num = #{param.num} @@ -134,9 +137,11 @@ AND a.remark LIKE CONCAT('%', #{param.remark}, '%') - AND (a.username = #{param.keywords} - OR a.phone = #{param.keywords} - OR a.code = #{param.keywords} + 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}, '%') ) 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 111dbb8..1465caf 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkInvoiceMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkInvoiceMapper.xml @@ -6,6 +6,7 @@ SELECT a.* FROM think_invoice a + LEFT JOIN think_order b ON a.oid = b.id AND a.id = #{param.id} @@ -77,7 +78,9 @@ AND a.vid = #{param.vid} - AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + AND ( + b.order_num LIKE CONCAT('%', #{param.keywords}, '%') + OR a.incoive_num 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 85c9654..2d94781 100644 --- a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkOrderMapper.xml @@ -4,9 +4,8 @@ - SELECT a.*, b.site_name, b.date_time + SELECT a.* FROM think_order a - LEFT JOIN think_order_info b ON a.id = b.oid AND a.id = #{param.id} @@ -74,6 +73,12 @@ AND a.pay_type = #{param.payType} + + AND a.pay_type IN + + #{item} + + AND a.pay_status = #{param.payStatus} @@ -98,6 +103,12 @@ AND a.start_time LIKE CONCAT('%', #{param.startTime}, '%') + + AND a.start_time >= #{param.orderTimeStart} + + + AND a.start_time <= #{param.orderTimeEnd} + AND a.is_invoice = #{param.isInvoice} @@ -125,12 +136,15 @@ AND a.check_bill = #{param.checkBill} + + AND a.vid > 0 + AND (a.name = #{param.keywords} OR a.id = #{param.keywords} - OR a.order_num = #{param.keywords} - OR a.phone = #{param.keywords} - OR a.code = #{param.keywords} + OR a.order_num LIKE CONCAT('%', #{param.keywords}, '%') + OR a.phone LIKE CONCAT('%', #{param.keywords}, '%') + OR a.code LIKE CONCAT('%', #{param.keywords}, '%') ) diff --git a/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipBuyLogMapper.xml b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipBuyLogMapper.xml new file mode 100644 index 0000000..d77b975 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/mapper/xml/ThinkUsersVipBuyLogMapper.xml @@ -0,0 +1,63 @@ + + + + + + + SELECT a.* + FROM think_users_vip_buy_log a + + + AND a.id = #{param.id} + + + AND a.uid = #{param.uid} + + + AND a.order_number LIKE CONCAT('%', #{param.orderNumber}, '%') + + + AND a.wechet_number LIKE CONCAT('%', #{param.wechetNumber}, '%') + + + AND a.amount = #{param.amount} + + + AND a.pay_status = #{param.payStatus} + + + 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.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java index 348ad40..fddb7c5 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkCardParam.java @@ -1,6 +1,8 @@ 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; @@ -158,4 +160,10 @@ public class ThinkCardParam extends BaseParam { @ApiModelProperty(value = "备注") private String remark; + @ApiModelProperty(value = "续卡") + @TableField(exist = false) + private Boolean notZeroNumber; + + @TableField(exist = false) + private String orderBy; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkGoodsOrderParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkGoodsOrderParam.java index 832de8f..c0ce037 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkGoodsOrderParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkGoodsOrderParam.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; @@ -81,4 +82,6 @@ public class ThinkGoodsOrderParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer payTime; + @TableField(exist = false) + private Boolean isAdmin; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java index cd0b5e1..50cc768 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkOrderParam.java @@ -11,6 +11,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.List; /** * 查询参数 @@ -157,4 +158,19 @@ public class ThinkOrderParam extends BaseParam { @TableField(exist = false) private Boolean forAdmin; + + @TableField(exist = false) + private Integer orderTimeStart; + + @TableField(exist = false) + private Integer orderTimeEnd; + + @TableField(exist = false) + private Boolean useVip; + + @TableField(exist = false) + private Boolean isExport; + + @TableField(exist = false) + private List payTypeList; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkSiteParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkSiteParam.java index b9a37b0..903f16b 100644 --- a/src/main/java/com/gxwebsoft/think/param/ThinkSiteParam.java +++ b/src/main/java/com/gxwebsoft/think/param/ThinkSiteParam.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.gxwebsoft.common.core.annotation.QueryField; import com.gxwebsoft.common.core.annotation.QueryType; import com.gxwebsoft.common.core.web.BaseParam; +import com.gxwebsoft.common.system.entity.User; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -83,4 +84,10 @@ public class ThinkSiteParam extends BaseParam { @TableField(exist = false) private List idList; + + @TableField(exist = false) + private User loginUser; + + @TableField(exist = false) + private Boolean isAdmin; } diff --git a/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipBuyLogParam.java b/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipBuyLogParam.java new file mode 100644 index 0000000..45be35b --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/param/ThinkUsersVipBuyLogParam.java @@ -0,0 +1,52 @@ +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; + +/** + * Vip购卡记录查询参数 + * + * @author 科技小王子 + * @since 2025-03-25 19:21:56 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ThinkUsersVipBuyLogParam对象", description = "Vip购卡记录查询参数") +public class ThinkUsersVipBuyLogParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer uid; + + private String orderNumber; + + private String wechetNumber; + + @QueryField(type = QueryType.EQ) + private BigDecimal amount; + + @QueryField(type = QueryType.EQ) + private Integer payStatus; + + private String payTime; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + @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/service/ThinkCardLogService.java b/src/main/java/com/gxwebsoft/think/service/ThinkCardLogService.java index 294439c..d4df2f0 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkCardLogService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkCardLogService.java @@ -5,6 +5,7 @@ import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.think.entity.ThinkCardLog; import com.gxwebsoft.think.param.ThinkCardLogParam; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -23,6 +24,8 @@ public interface ThinkCardLogService extends IService { */ PageResult pageRel(ThinkCardLogParam param); + PageResult pageRel(ThinkCardLogParam param, HttpServletRequest request); + /** * 关联查询全部 * diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java b/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java index 7b361bf..240f1f7 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkCardService.java @@ -6,6 +6,8 @@ import com.gxwebsoft.think.entity.ThinkCard; import com.gxwebsoft.think.entity.ThinkUsers; import com.gxwebsoft.think.param.ThinkCardParam; +import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; /** @@ -42,7 +44,15 @@ public interface ThinkCardService extends IService { ThinkCard getByCode(String code); + ThinkCard getByOriginCode(String code); + + ThinkCard getByCardNum(String cardNum); + List userCard(ThinkUsers user); List listByCodeList(List codeList); + + HashMap createWxCodePay(BigDecimal totalPrice, String orderNo, String desc, String authCode); + + HashMap checkWechatPayRes(String code); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java b/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java index 30cadb8..fa44c6a 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkInvoiceService.java @@ -39,4 +39,5 @@ public interface ThinkInvoiceService extends IService { */ ThinkInvoice getByIdRel(Integer id); + ThinkInvoice getData(ThinkInvoiceParam param); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkMachineOpenLogService.java b/src/main/java/com/gxwebsoft/think/service/ThinkMachineOpenLogService.java index 5838841..3edab11 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkMachineOpenLogService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkMachineOpenLogService.java @@ -40,4 +40,6 @@ public interface ThinkMachineOpenLogService extends IService listByOids(List orderIds); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkOrderInfoService.java b/src/main/java/com/gxwebsoft/think/service/ThinkOrderInfoService.java index 95a4bba..abd9e3a 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkOrderInfoService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkOrderInfoService.java @@ -41,5 +41,9 @@ public interface ThinkOrderInfoService extends IService { List listInOrder(Integer orderId); + List listByOrderIds(List orderIdList); + ThinkOrderInfo checkOrder(ThinkOrderInfo thinkOrderInfo); + + List checkOrderList(ThinkOrderInfo thinkOrderInfo); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java b/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java index b6dcce4..924b5d1 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkOrderService.java @@ -44,8 +44,12 @@ public interface ThinkOrderService extends IService { */ ThinkOrder getByIdRel(Integer id); + Map getOrderByQrCode(String qrCode); + Map getByQrCode(String qrCode); + Map getByQrCode(String qrCode, Boolean check); + ThinkOrder getByOrderNum(String orderNum); // HashMap createWxOrder(ThinkOrder order); @@ -54,10 +58,17 @@ public interface ThinkOrderService extends IService { HashMap createWxOrder(BigDecimal totalPrice, String orderNo, String desc, String openid, String notify); + HashMap createWxCodePay(BigDecimal totalPrice, String orderNo, String desc, String authCode); + + HashMap checkWechatPayRes(String orderNo); + Refund refund(ThinkOrderRefundLog orderRefund); ThinkOrder getLastOrderByVid(Integer vid); ThinkOrder getLastOrderByCardCode(String code); + ThinkOrder getTodayOrder(Integer userId); + + List getTodayOrderInSite(Integer userId, Integer sid); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkRechargeLogService.java b/src/main/java/com/gxwebsoft/think/service/ThinkRechargeLogService.java index ef3cb6a..ebe7e00 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkRechargeLogService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkRechargeLogService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.think.entity.ThinkRechargeLog; import com.gxwebsoft.think.param.ThinkRechargeLogParam; +import com.wechat.pay.java.service.refund.model.Refund; import java.util.List; @@ -39,4 +40,9 @@ public interface ThinkRechargeLogService extends IService { */ ThinkRechargeLog getByIdRel(Integer id); + ThinkRechargeLog getByOrderNumber(String orderNum); + + ThinkRechargeLog getByRefundNumber(String refundNum); + + Refund refund(ThinkRechargeLog thinkRechargeLog); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkSiteTimeService.java b/src/main/java/com/gxwebsoft/think/service/ThinkSiteTimeService.java index c404a7e..77a3fdc 100644 --- a/src/main/java/com/gxwebsoft/think/service/ThinkSiteTimeService.java +++ b/src/main/java/com/gxwebsoft/think/service/ThinkSiteTimeService.java @@ -40,4 +40,6 @@ public interface ThinkSiteTimeService extends IService { ThinkSiteTime getByIdRel(Integer id); ThinkSiteTime getBySidNPeriod(Integer sid, String period); + + List getActiveList(Integer sid); } diff --git a/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipBuyLogService.java b/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipBuyLogService.java new file mode 100644 index 0000000..f0e0e19 --- /dev/null +++ b/src/main/java/com/gxwebsoft/think/service/ThinkUsersVipBuyLogService.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.ThinkUsersVipBuyLog; +import com.gxwebsoft.think.param.ThinkUsersVipBuyLogParam; + +import java.util.List; + +/** + * Vip购卡记录Service + * + * @author 科技小王子 + * @since 2025-03-25 19:21:56 + */ +public interface ThinkUsersVipBuyLogService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ThinkUsersVipBuyLogParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ThinkUsersVipBuyLogParam param); + + /** + * 根据id查询 + * + * @param id + * @return ThinkUsersVipBuyLog + */ + ThinkUsersVipBuyLog getByIdRel(Integer id); + + ThinkUsersVipBuyLog getByOrderNumber(String orderNumber); +} 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 ae18527..4c5298c 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardLogServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardLogServiceImpl.java @@ -1,8 +1,11 @@ package com.gxwebsoft.think.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.core.security.JwtUtil; +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.ThinkCardLog; import com.gxwebsoft.think.mapper.ThinkCardLogMapper; import com.gxwebsoft.think.param.ThinkCardLogParam; @@ -11,6 +14,7 @@ import com.gxwebsoft.think.service.ThinkCardService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -25,13 +29,35 @@ public class ThinkCardLogServiceImpl extends ServiceImpl pageRel(ThinkCardLogParam param) { + public PageResult pageRel(ThinkCardLogParam param, HttpServletRequest request) { PageParam page = new PageParam<>(param); page.setDefaultOrder("id desc, create_time desc"); List list = baseMapper.selectPageRel(page, param); + if (list != null && !list.isEmpty()) { + RequestUtil requestUtil = null; + if (request != null) { + requestUtil = new RequestUtil(); + requestUtil.setAccessToken(JwtUtil.getAccessToken(request)); + requestUtil.setTenantId("10150"); + } + + for (ThinkCardLog thinkCardLog : list) { + thinkCardLog.setThinkCard(thinkCardService.getByCode(thinkCardLog.getCode())); + if (requestUtil != null) { + if (thinkCardLog.getAid() != null && !thinkCardLog.getAid().equals(0)) { + User admin = requestUtil.getByUserId(thinkCardLog.getAid()); + if (admin != null) thinkCardLog.setAdminName(admin.getRealName()); + } + } + } + } return new PageResult<>(list, page.getTotal()); } + public PageResult pageRel(ThinkCardLogParam param) { + return pageRel(param, null); + } + @Override public List listRel(ThinkCardLogParam param) { List list = baseMapper.selectListRel(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 47ec9fd..18fa075 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkCardServiceImpl.java @@ -3,6 +3,7 @@ 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.ThinkUsers; +import com.gxwebsoft.think.entity.ThinkVip; import com.gxwebsoft.think.mapper.ThinkCardMapper; import com.gxwebsoft.think.service.ThinkCardService; import com.gxwebsoft.think.entity.ThinkCard; @@ -10,11 +11,23 @@ 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; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.payments.wxcodepay.CodePayService; +import com.wechat.pay.java.service.payments.wxcodepay.model.PrepayResponse; 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.stream.Collectors; /** * Service实现 @@ -26,15 +39,30 @@ import java.util.List; public class ThinkCardServiceImpl extends ServiceImpl implements ThinkCardService { @Resource private ThinkSiteService thinkSiteService; + @Resource + private WechatConfigService wechatConfigService; + @Resource + private ThinkVipService thinkVipService; + + // private String mchId = "1604773943"; + private String mchId = "1246610101"; + private String appId = "wxd38cc38c54fa7370"; @Override public PageResult pageRel(ThinkCardParam param) { PageParam page = new PageParam<>(param); - page.setDefaultOrder("id desc, create_time desc"); + if (param.getOrderBy() != null) { + page.setDefaultOrder(param.getOrderBy()); + } else page.setDefaultOrder("id desc, create_time desc"); List list = baseMapper.selectPageRel(page, param); - for (ThinkCard item : list) { - String[] sids = item.getSid().split(","); - item.setSiteList(thinkSiteService.listByIds(Arrays.stream(sids).map(Integer::valueOf).toList())); + if (!list.isEmpty()) { + Set vidList = list.stream().map(ThinkCard::getVid).collect(Collectors.toSet()); + List vipList = thinkVipService.listByIds(vidList); + for (ThinkCard item : list) { + String[] sids = item.getSid().split(","); + item.setSiteList(thinkSiteService.listByIds(Arrays.stream(sids).map(Integer::valueOf).toList())); + item.setThinkVip(vipList.stream().filter(item1 -> item1.getId().equals(item.getVid())).findFirst().orElse(null)); + } } return new PageResult<>(list, page.getTotal()); } @@ -62,11 +90,28 @@ public class ThinkCardServiceImpl extends ServiceImpl() + .eq(ThinkCard::getOriginCardCode, code) + .last("limit 1") + ); + } + + @Override + public ThinkCard getByCardNum(String cardNum) { + ThinkCardParam param = new ThinkCardParam(); + param.setCardNum(cardNum); + return param.getOne(baseMapper.selectListRel(param)); + } + @Override public List userCard(ThinkUsers user) { return list( new LambdaQueryWrapper() - .eq(ThinkCard::getUid, user.getId()) +// .eq(ThinkCard::getUid, user.getId()) + .eq(ThinkCard::getPhone, user.getPhone()) .eq(ThinkCard::getStatus, 1) .isNotNull(ThinkCard::getExpireTime) .and(w -> w.or(w1 -> w1.gt(ThinkCard::getNum, 0)) @@ -84,4 +129,81 @@ public class ThinkCardServiceImpl extends ServiceImpl createWxCodePay(BigDecimal totalPrice, String orderNo, String desc, String authCode) { + final HashMap orderInfo = new HashMap<>(); + + // 计算金额 +// BigDecimal decimal = order.getTotalPrice(); + final BigDecimal multiply = totalPrice.multiply(new BigDecimal(100)); + Integer money = multiply.intValue(); + Config wxConfig = wechatConfigService.getConfig(); + com.wechat.pay.java.service.payments.wxcodepay.model.Amount amount = new com.wechat.pay.java.service.payments.wxcodepay.model.Amount(); + amount.setTotal(money); + amount.setCurrency("CNY"); + amount.setTotal(money); + + CodePayService service = new CodePayService.Builder().config(wxConfig).build(); + com.wechat.pay.java.service.payments.wxcodepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.wxcodepay.model.PrepayRequest(); + prepayRequest.setAppid(appId); + prepayRequest.setMchid(mchId); + prepayRequest.setDescription(desc); + prepayRequest.setOutTradeNo(orderNo); + prepayRequest.setAmount(amount); + com.wechat.pay.java.service.payments.wxcodepay.model.Payer payer = new com.wechat.pay.java.service.payments.wxcodepay.model.Payer(); + payer.setAuthCode(authCode); + prepayRequest.setPayer(payer); + com.wechat.pay.java.service.payments.wxcodepay.model.SceneInfo sceneInfo = new com.wechat.pay.java.service.payments.wxcodepay.model.SceneInfo(); + com.wechat.pay.java.service.payments.wxcodepay.model.StoreInfo storeInfo = new com.wechat.pay.java.service.payments.wxcodepay.model.StoreInfo(); + storeInfo.setId("0002"); + sceneInfo.setStoreInfo(storeInfo); + prepayRequest.setSceneInfo(sceneInfo); + PrepayResponse prepayResponse = service.prepay(prepayRequest); + System.out.println(prepayResponse.toString()); + return orderInfo; + } + + @Override + public HashMap checkWechatPayRes(String code) { + QueryOrderByOutTradeNoRequest queryRequest = new QueryOrderByOutTradeNoRequest(); + queryRequest.setMchid(mchId); + queryRequest.setOutTradeNo(code); + + try { + Config wxConfig = wechatConfigService.getConfig(); + CodePayService service = new CodePayService.Builder().config(wxConfig).build(); + Transaction result = service.queryOrderByOutTradeNo(queryRequest); + if (result.getTradeState().equals(Transaction.TradeStateEnum.SUCCESS)) { + ThinkCard thinkCard = getOne(new LambdaQueryWrapper() + .eq(ThinkCard::getCode, code) + .orderByDesc(ThinkCard::getId) + .last("limit 1") + ); + thinkCard.setPayType(1); + thinkCard.setStatus(1); + thinkCard.setWechatOrder(result.getTransactionId()); + updateById(thinkCard); + } + return new HashMap<>() {{ + put("state", result.getTradeState().toString()); + put("stateDesc", result.getTradeStateDesc()); + }}; + } catch (ServiceException e) { + // API返回失败, 例如ORDER_NOT_EXISTS + System.out.printf("code=[%s], message=[%s]\n", e.getErrorCode(), e.getErrorMessage()); + System.out.printf("reponse body=[%s]\n", e.getResponseBody()); + return new HashMap<>() {{ + put("state", "FAIL"); + put("stateDesc", e.getErrorMessage()); + }}; + } + } } diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkDepositServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkDepositServiceImpl.java index a29e448..972d856 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkDepositServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkDepositServiceImpl.java @@ -68,7 +68,7 @@ public class ThinkDepositServiceImpl extends ServiceImpl list = list( new LambdaQueryWrapper() .eq(ThinkField::getSid, param.getSid()) + .eq(ThinkField::getIsStatus, 1) .orderByDesc(ThinkField::getSort) ); List orderList = new ArrayList<>(); + List orderInfoList = new ArrayList<>(); if (!list.isEmpty()) { List fidList = list.stream().map(ThinkField::getId).toList(); - List orderInfoList = thinkOrderInfoService.list( + orderInfoList = thinkOrderInfoService.list( new LambdaQueryWrapper() + .ne(ThinkOrderInfo::getPayStatus, 0) .in(ThinkOrderInfo::getFid, fidList) .in(ThinkOrderInfo::getStartTime, param.getPeriodVoList().stream().map(FieldPeriodVo::getTimestamp).toList()) ); @@ -80,16 +83,23 @@ public class ThinkFieldServiceImpl extends ServiceImpl() .in(ThinkOrder::getId, orderInfoList.stream().map(ThinkOrderInfo::getOid).toList()) - .in(ThinkOrder::getStartTime, param.getPeriodVoList().stream().map(FieldPeriodVo::getTimestamp).toList()) +// .in(ThinkOrder::getStartTime, param.getPeriodVoList().stream().map(FieldPeriodVo::getTimestamp).toList()) .in(ThinkOrder::getOrderStatus, ORDER_STATUS_DONE, ORDER_STATUS_UNUSED, - ORDER_STATUS_CANCELING, - ORDER_STATUS_CANCEL_REFUSE) + ORDER_STATUS_CANCELING) ); if (!orderList.isEmpty()) { - for (ThinkOrder order : orderList) { - for (ThinkOrderInfo orderInfo : orderInfoList) { - if (orderInfo.getOid().equals(order.getId())) order.setFid(orderInfo.getFid()); + for (ThinkOrderInfo orderInfo : orderInfoList) { + orderInfo.setUsed(false); + orderInfo.setSoldButNotUsed(false); + for (ThinkOrder order : orderList) { + if (orderInfo.getOid().equals(order.getId())) { + if (order.getOrderStatus().equals(ORDER_STATUS_DONE)) orderInfo.setUsed(true); + if (order.getOrderStatus().equals(ORDER_STATUS_UNUSED)) + orderInfo.setSoldButNotUsed(true); + orderInfo.setAddFromAdmin(order.getAddFromAdmin().equals(1)); + } + } } } @@ -103,16 +113,27 @@ public class ThinkFieldServiceImpl extends ServiceImpl pageRel(ThinkGoodsOrderInfoParam param) { PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); return new PageResult<>(list, page.getTotal()); } @@ -34,7 +33,6 @@ public class ThinkGoodsOrderInfoServiceImpl extends ServiceImpl list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); - page.setDefaultOrder("create_time desc"); return page.sortRecords(list); } 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 0dde20b..5063a52 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkInvoiceServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkInvoiceServiceImpl.java @@ -1,5 +1,6 @@ package com.gxwebsoft.think.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.think.mapper.ThinkInvoiceMapper; import com.gxwebsoft.think.service.ThinkInvoiceService; @@ -44,4 +45,18 @@ public class ThinkInvoiceServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.select("sum(price) as price") + .eq("is_open", 1); + if (param.getCreateTimeStart() != null) { + queryWrapper.ge("create_time", param.getCreateTimeStart()); + if (param.getCreateTimeEnd() != null) { + queryWrapper.le("create_time", param.getCreateTimeEnd()); + } + } + return getOne(queryWrapper); + } + } diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkMachineOpenLogServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkMachineOpenLogServiceImpl.java index d8ffdae..41bcf42 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkMachineOpenLogServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkMachineOpenLogServiceImpl.java @@ -1,5 +1,6 @@ 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.mapper.ThinkMachineOpenLogMapper; import com.gxwebsoft.think.service.ThinkMachineOpenLogService; @@ -51,4 +52,12 @@ public class ThinkMachineOpenLogServiceImpl extends ServiceImpl listByOids(List orderIds) { + return list( + new LambdaQueryWrapper() + .in(ThinkMachineOpenLog::getOrderId, orderIds) + ); + } + } diff --git a/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderInfoServiceImpl.java b/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderInfoServiceImpl.java index 290d9c3..ee271ed 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderInfoServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderInfoServiceImpl.java @@ -53,6 +53,14 @@ public class ThinkOrderInfoServiceImpl extends ServiceImpl listByOrderIds(List orderIdList) { + return list( + new LambdaQueryWrapper() + .in(ThinkOrderInfo::getOid, orderIdList) + ); + } + @Override public ThinkOrderInfo checkOrder(ThinkOrderInfo thinkOrderInfo) { return getOne( @@ -60,8 +68,19 @@ public class ThinkOrderInfoServiceImpl extends ServiceImpl checkOrderList(ThinkOrderInfo thinkOrderInfo) { + return list( + new LambdaQueryWrapper() + .eq(ThinkOrderInfo::getSid, thinkOrderInfo.getSid()) + .eq(ThinkOrderInfo::getFid, thinkOrderInfo.getFid()) + .eq(ThinkOrderInfo::getStartTime, thinkOrderInfo.getStartTime()) + .ne(ThinkOrderInfo::getPayStatus, 0) + ); + } } 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 a9d3162..68edd74 100644 --- a/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/think/service/impl/ThinkOrderServiceImpl.java @@ -1,39 +1,45 @@ package com.gxwebsoft.think.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.utils.RedisUtil; -import com.gxwebsoft.think.entity.ThinkOrderInfo; -import com.gxwebsoft.think.entity.ThinkOrderRefundLog; +import com.gxwebsoft.think.controller.ThinkOrderController; +import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.mapper.ThinkOrderMapper; import com.gxwebsoft.think.service.*; -import com.gxwebsoft.think.entity.ThinkOrder; import com.gxwebsoft.think.param.ThinkOrderParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import com.wechat.pay.java.core.Config; +import com.wechat.pay.java.core.exception.ServiceException; import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; -import com.wechat.pay.java.service.payments.jsapi.model.Amount; -import com.wechat.pay.java.service.payments.jsapi.model.Payer; -import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest; -import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.jsapi.model.*; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.payments.wxcodepay.CodePayService; +import com.wechat.pay.java.service.payments.wxcodepay.model.PrepayResponse; import com.wechat.pay.java.service.refund.RefundService; import com.wechat.pay.java.service.refund.model.AmountReq; import com.wechat.pay.java.service.refund.model.CreateRequest; import com.wechat.pay.java.service.refund.model.Refund; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Base64; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.*; +import java.util.concurrent.TimeUnit; /** * Service实现 @@ -55,45 +61,151 @@ public class ThinkOrderServiceImpl extends ServiceImpl pageRel(ThinkOrderParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); List list = baseMapper.selectPageRel(page, param); - list.forEach(d -> { - d.setThinkOrderInfos(thinkOrderInfoService.list(new LambdaQueryWrapper().eq(ThinkOrderInfo::getOid, d.getId()))); - if (d.getCid() != null && !d.getCid().equals(0)) { - d.setCard(thinkCardService.getById(d.getCid())); + List sidList = new ArrayList<>(); + if (!list.isEmpty()) sidList = list.stream().map(ThinkOrder::getSid).toList(); + if (!sidList.isEmpty()) { + List siteList = thinkSiteService.listByIds(sidList); + list.forEach(d -> { + d.setSiteName(siteList.stream().filter(s -> s.getId().equals(d.getSid())).findFirst().orElse(new ThinkSite()).getName()); + }); + } + if (!list.isEmpty()) { + List idList = list.stream().map(ThinkOrder::getId).toList(); + List cidList = list.stream().filter(i -> ObjectUtil.isNotNull(i.getCid()) && !i.getCid().equals(0)) + .map(ThinkOrder::getCid).toList(); + List vidList = list.stream().filter(i -> ObjectUtil.isNotNull(i.getVid()) && !i.getVid().equals(0)) + .map(ThinkOrder::getVid).toList(); + List thinkCardList; + if (!cidList.isEmpty()) { + thinkCardList = thinkCardService.listByIds(cidList); + } else { + thinkCardList = new ArrayList<>(); } - if (d.getVid() != null && !d.getVid().equals(0)) { - d.setThinkVip(thinkUsersVipService.getById(d.getVid())); + List thinkUsersVipList; + if (!vidList.isEmpty()) { + thinkUsersVipList = thinkUsersVipService.listByIds(vidList); + } else { + thinkUsersVipList = new ArrayList<>(); } - - }); + List thinkMachineOpenLogList = thinkMachineOpenLogService.listByOids(idList); + List thinkOrderInfoArr = thinkOrderInfoService.listByOrderIds(idList); + list.forEach(d -> { + List thinkOrderInfoList = thinkOrderInfoArr.stream().filter(i -> i.getOid().equals(d.getId())).toList(); + StringBuilder dateTimeList = new StringBuilder(); + if (!thinkOrderInfoList.isEmpty()) { + for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) { + String dateTime = thinkOrderInfo.getDateTime(); + dateTime += "(" + thinkOrderInfo.getFieldName() + ")"; + if (dateTimeList.isEmpty()) { + dateTimeList = new StringBuilder(dateTime); + } else { + dateTimeList.append(",").append(dateTime); + } + } + d.setDateTime(dateTimeList.toString()); + } + d.setThinkOrderInfos(thinkOrderInfoList); + if (thinkCardList != null && !thinkCardList.isEmpty() && d.getCid() != null && !d.getCid().equals(0)) { + d.setCard(thinkCardList.stream().filter(c -> c.getId().equals(d.getCid())).findFirst().orElse(null)); + } + if (thinkUsersVipList != null && !thinkUsersVipList.isEmpty() && d.getVid() != null && !d.getVid().equals(0)) { + d.setThinkVip(thinkUsersVipList.stream().filter(c -> c.getId().equals(d.getVid())) + .findFirst().orElse(null)); + } + if (d.getSid().equals(37)) + d.setMachineOpenLog(thinkMachineOpenLogList.stream().filter(c -> c.getOrderId().equals(d.getId())) + .findFirst().orElse(null)); + }); + } return new PageResult<>(list, page.getTotal()); } @Override public List listRel(ThinkOrderParam param) { List list = baseMapper.selectListRel(param); + if (list.isEmpty()) return list; + List sidList = new ArrayList<>(); + if (!list.isEmpty()) sidList = list.stream().map(ThinkOrder::getSid).toList(); + if (!sidList.isEmpty()) { + List siteList = thinkSiteService.listByIds(sidList); + list.forEach(d -> { + d.setSiteName(siteList.stream().filter(s -> s.getId().equals(d.getSid())).findFirst().orElse(new ThinkSite()).getName()); + }); + } + List orderInfoList = thinkOrderInfoService.listByOrderIds(list.stream().map(ThinkOrder::getId).toList()); + Set cidList = new HashSet<>(); + Set codeList = new HashSet<>(); + Set vidList = new HashSet<>(); list.forEach(d -> { - d.setThinkOrderInfos(thinkOrderInfoService.list(new LambdaQueryWrapper().eq(ThinkOrderInfo::getOid, d.getId()))); if (d.getCid() != null && !d.getCid().equals(0)) { - d.setCard(thinkCardService.getById(d.getCid())); + cidList.add(d.getCid()); + } + if (d.getCode() != null && !d.getCode().isEmpty() && !d.getCode().equals("0")) { + codeList.add(d.getCode()); } if (d.getVid() != null && !d.getVid().equals(0)) { - d.setThinkVip(thinkUsersVipService.getById(d.getVid())); + vidList.add(d.getVid()); } + StringBuilder dateTimeList = new StringBuilder(); }); + List cardList = new ArrayList<>(); + if (!cidList.isEmpty()) cardList = thinkCardService.listByIds(new ArrayList<>(cidList)); + if (!codeList.isEmpty()) { + List cardListByCode = thinkCardService.listByCodeList(new ArrayList<>(codeList)); + // 合并 + cardList.addAll(cardListByCode); + } + List