diff --git a/modules/common/system/controller/WxOfficialController.java b/modules/common/system/controller/WxOfficialController.java
index fab9a90..b264617 100644
--- a/modules/common/system/controller/WxOfficialController.java
+++ b/modules/common/system/controller/WxOfficialController.java
@@ -246,7 +246,7 @@ public class WxOfficialController extends BaseController {
.execute().body();
JSONObject jsonObject = JSONObject.parseObject(result);
- System.out.println("jsonObject = " + jsonObject);
+// System.out.println("jsonObject = " + jsonObject);
if(jsonObject != null){
return success(jsonObject);
}
diff --git a/pom.xml b/pom.xml
index 76e8f91..b231a39 100644
--- a/pom.xml
+++ b/pom.xml
@@ -233,6 +233,12 @@
commons-logging
1.2
+
+
+ commons-net
+ commons-net
+ 3.9.0
+
com.alibaba
diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java
index 1ef1103..a262e4f 100644
--- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java
+++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java
@@ -136,6 +136,7 @@ public class MybatisPlusConfig {
"think_wechat_bill",
"think_wechat_bill_log",
"think_wechat_deposit",
+ "think_card_balance",
"sys_log"
// "booking_user",
diff --git a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java
index 8b0b82d..5cfb786 100644
--- a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java
+++ b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java
@@ -79,7 +79,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
"/api/think/think-order/check-code-only",
"/api/think/think-vip-cards-bills/make-bill",
"/api/think/think-cards-bills/make-bill",
- "/api/think/think-recharge-log/refund-notify"
+ "/api/think/think-recharge-log/refund-notify",
+ "/api/think/think-ftp-check-bill/async",
+ "/api/think/think-card-balance/set-data"
// "/api/think/think-order/fixInvoiceData"
)
.permitAll()
diff --git a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java
index 65d72db..1ff53d0 100644
--- a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java
+++ b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java
@@ -48,6 +48,25 @@ public class RequestUtil {
}
+ public User getOrgAdmin(Integer orgId) {
+ String path = "/system/user/org-admin/" + orgId;
+ try {
+ // 链式构建请求
+ String result = HttpRequest.get(host.concat(path))
+ .header("Authorization", ACCESS_TOKEN)
+ .header("Tenantid", TENANT_ID)
+ .timeout(20000)//超时,毫秒
+ .execute().body();
+
+ JSONObject jsonObject = JSONObject.parseObject(result);
+ final String data = jsonObject.getString("data");
+ return JSONObject.parseObject(data, User.class);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
public User getUserByPhone(String phone) {
String path = "/system/user/getByPhone/" + phone;
try {
@@ -78,7 +97,7 @@ public class RequestUtil {
.execute().body();
JSONObject jsonObject = JSONObject.parseObject(result);
- System.out.println("jsonObject = " + jsonObject);
+// System.out.println("jsonObject = " + jsonObject);
final String data = jsonObject.getString("data");
return JSONObject.parseObject(data, User.class);
} catch (Exception e) {
diff --git a/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java b/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java
index eab091a..7972c4d 100644
--- a/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java
+++ b/src/main/java/com/gxwebsoft/common/core/web/ApiResult.java
@@ -21,6 +21,9 @@ public class ApiResult implements Serializable {
@ApiModelProperty(value = "状态信息")
private String message;
+ @ApiModelProperty(value = "内容")
+ private T content;
+
@ApiModelProperty(value = "返回数据")
private T data;
@@ -66,6 +69,15 @@ public class ApiResult implements Serializable {
return this;
}
+ public T getContent() {
+ return this.content;
+ }
+
+ public ApiResult setContent(T content) {
+ this.content = content;
+ return this;
+ }
+
public T getData() {
return this.data;
}
diff --git a/src/main/java/com/gxwebsoft/common/core/web/BaseController.java b/src/main/java/com/gxwebsoft/common/core/web/BaseController.java
index 22dff4f..de80cf1 100644
--- a/src/main/java/com/gxwebsoft/common/core/web/BaseController.java
+++ b/src/main/java/com/gxwebsoft/common/core/web/BaseController.java
@@ -27,10 +27,10 @@ import java.util.Map;
* @since 2017-06-10 10:10:19
*/
public class BaseController {
- @Resource
- private HttpServletRequest request;
- @Resource
- private RedisUtil redisUtil;
+ @Resource
+ private HttpServletRequest request;
+ @Resource
+ private RedisUtil redisUtil;
/**
* 获取当前登录的user
@@ -68,27 +68,27 @@ public class BaseController {
* @return tenantId
*/
public Integer getTenantId() {
- // 1 从登录用户拿tenantId
- User loginUser = getLoginUser();
- if (loginUser != null) {
- return loginUser.getTenantId();
- }
- // 2 从域名拿ID
- String Domain = request.getHeader("Domain");
- if (StrUtil.isNotBlank(Domain)) {
- String key = "Domain:" + Domain;
- String tenantId = redisUtil.get(key);
- if(tenantId != null){
- System.out.println("从域名拿ID = " + tenantId);
- return Integer.valueOf(tenantId);
+ // 1 从登录用户拿tenantId
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ return loginUser.getTenantId();
}
- }
- // 3 从请求头拿ID
- String tenantId = request.getHeader("tenantId");
- if(StrUtil.isNotBlank(tenantId)){
- return Integer.valueOf(tenantId);
- }
- return null;
+ // 2 从域名拿ID
+ String Domain = request.getHeader("Domain");
+ if (StrUtil.isNotBlank(Domain)) {
+ String key = "Domain:" + Domain;
+ String tenantId = redisUtil.get(key);
+ if (tenantId != null) {
+ System.out.println("从域名拿ID = " + tenantId);
+ return Integer.valueOf(tenantId);
+ }
+ }
+ // 3 从请求头拿ID
+ String tenantId = request.getHeader("tenantId");
+ if (StrUtil.isNotBlank(tenantId)) {
+ return Integer.valueOf(tenantId);
+ }
+ return null;
}
/**
@@ -130,6 +130,11 @@ public class BaseController {
return success(data).setMessage(message);
}
+
+ public ApiResult success(String message, T data, T content) {
+ return success(data).setMessage(message).setContent(content);
+ }
+
/**
* 返回分页查询数据
*
@@ -200,20 +205,20 @@ public class BaseController {
}
// 自定义函数
- public String getAuthorization(){
- return request.getHeader("Authorization");
+ public String getAuthorization() {
+ return request.getHeader("Authorization");
}
public String getAppId() {
- // 兼容小写
- if(request.getHeader("appid") != null){
- return request.getHeader("appid");
- }
- return request.getHeader("AppId");
+ // 兼容小写
+ if (request.getHeader("appid") != null) {
+ return request.getHeader("appid");
+ }
+ return request.getHeader("AppId");
}
public String getSign() {
- return request.getParameter("sign");
+ return request.getParameter("sign");
}
/**
@@ -221,49 +226,49 @@ public class BaseController {
* 存在签名信息则需要验证
*/
public void isCheckSign() {
- if (StrUtil.isNotBlank(getSign())) {
- if(getTenantId() == null){
- throw new BusinessException("签名失败:TenantId不能为空");
+ if (StrUtil.isNotBlank(getSign())) {
+ if (getTenantId() == null) {
+ throw new BusinessException("签名失败:TenantId不能为空");
+ }
+
+ String timestamp1 = request.getParameter("timestamp");
+ long timestamp2 = System.currentTimeMillis();
+ long time = timestamp2 - Long.parseLong(timestamp1);
+ if (time > 600000L) {
+ throw new BusinessException("签名失败:请求超时");
+ }
+
+ Enumeration names = request.getParameterNames();
+ //2.遍历正文名称的枚举获得请求参数
+ Map params = new HashMap<>();
+ while (names.hasMoreElements()) {
+ String name = names.nextElement();
+ String value = request.getParameter(name);
+ params.put(name, value);
+ }
+ String signString = SignCheckUtil.getSignString(params, getAppSecret());
+ System.out.println("请求的参数 = " + params);
+ System.out.println("正确的签名 = " + signString);
+ System.out.println("签名是否正确 = " + SignCheckUtil.signCheck(params, getAppSecret()));
+
+ if (!SignCheckUtil.signCheck(params, getAppSecret())) {
+ throw new BusinessException("签名失败");
+ }
}
- String timestamp1 = request.getParameter("timestamp");
- long timestamp2 = System.currentTimeMillis();
- long time = timestamp2 - Long.parseLong(timestamp1);
- if(time > 600000L){
- throw new BusinessException("签名失败:请求超时");
- }
+ // 模拟提交参数
+ // String key = "FRbMx1FkG4Qz6GZxY";
+ // Map param0 = new HashMap<>();
+ // param0.put("orderId", "D2018062976332656413");
+ // param0.put("MainAccountID", "DC3NHPJ73S");
+ // param0.put("MainAccountSN", "320");
+ // param0.put("payStatus", "2");
+ // param0.put("title","测试");
+ // System.out.println("请求的参数 = " + param0);
+ // String signString0 = SignCheckUtil.getSignString(param0, key);
+ // System.out.println("signString0 = " + signString0);
- Enumeration names = request.getParameterNames();
- //2.遍历正文名称的枚举获得请求参数
- Map params = new HashMap<>();
- while(names.hasMoreElements()){
- String name = names.nextElement();
- String value = request.getParameter(name);
- params.put(name,value);
- }
- String signString = SignCheckUtil.getSignString(params, getAppSecret());
- System.out.println("请求的参数 = " + params);
- System.out.println("正确的签名 = " + signString);
- System.out.println("签名是否正确 = " + SignCheckUtil.signCheck(params, getAppSecret()));
-
- if (!SignCheckUtil.signCheck(params, getAppSecret())) {
- throw new BusinessException("签名失败");
- }
- }
-
- // 模拟提交参数
- // String key = "FRbMx1FkG4Qz6GZxY";
- // Map param0 = new HashMap<>();
- // param0.put("orderId", "D2018062976332656413");
- // param0.put("MainAccountID", "DC3NHPJ73S");
- // param0.put("MainAccountSN", "320");
- // param0.put("payStatus", "2");
- // param0.put("title","测试");
- // System.out.println("请求的参数 = " + param0);
- // String signString0 = SignCheckUtil.getSignString(param0, key);
- // System.out.println("signString0 = " + signString0);
-
- // return SignCheckUtil.signCheck(params, getAppSecret());
+ // return SignCheckUtil.signCheck(params, getAppSecret());
}
/**
@@ -272,9 +277,9 @@ public class BaseController {
* @return AppSecret
*/
public String getAppSecret() {
- String key = "cache5:AppSecret:" + Integer.valueOf(getAppId());
- System.out.println("key = " + key);
- return redisUtil.get(key);
+ String key = "cache5:AppSecret:" + Integer.valueOf(getAppId());
+ System.out.println("key = " + key);
+ return redisUtil.get(key);
}
/**
diff --git a/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java b/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java
index 115e557..19bf601 100644
--- a/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java
+++ b/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java
@@ -66,7 +66,9 @@ public class AreaController extends BaseController {
if (level != null) str += "-" + level;
List topList;
String topListString = redisTemplate.opsForValue().get(str);
- if (topListString == null) {
+ System.out.println("str: " + str);
+ System.out.println("topListString: " + topListString);
+// if (topListString == null || topListString.equals("[]")) {
topList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 1));
for (Area top : topList) {
List secondList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 2).eq(Area::getFid, top.getId()));
@@ -79,7 +81,7 @@ public class AreaController extends BaseController {
top.setChildren(secondList);
}
redisTemplate.opsForValue().set(str, JSON.toJSONString(topList));
- } else topList = JSON.parseArray(topListString, Area.class);
+// } else topList = JSON.parseArray(topListString, Area.class);
return success(topList);
// 使用关联查询
//return success(areaService.listRel(param));
diff --git a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java
index 404cfbd..a89ef69 100644
--- a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java
@@ -1,5 +1,7 @@
package com.gxwebsoft.think.controller;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -21,8 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
import java.util.concurrent.TimeUnit;
/**
@@ -53,91 +54,158 @@ public class SchedulingController extends BaseController {
@Scheduled(cron = "* * * * * *")
public void task() {
- // 15分钟取消订单
- List orderList = thinkOrderService.list(
- new LambdaUpdateWrapper()
- .eq(ThinkOrder::getPayStatus, 2)
- .eq(ThinkOrder::getOrderStatus, 2)
- .apply("UNIX_TIMESTAMP() > `create_time` + " + 15 * 60)
- );
- if (!orderList.isEmpty()) {
- List orderInfoList = new ArrayList<>();
- for (ThinkOrder thinkOrder : orderList) {
- thinkOrder.setOrderStatus(3);
- List orderInfoListTmp = thinkOrderInfoService.listInOrder(thinkOrder.getId());
- orderInfoList.addAll(orderInfoListTmp);
- thinkOrder.setUpdateTime(System.currentTimeMillis() / 1000);
- }
- for (ThinkOrderInfo thinkOrderInfo : orderInfoList) {
- thinkOrderInfo.setPayStatus(0);
- }
- thinkOrderService.updateBatchById(orderList);
- thinkOrderInfoService.updateBatchById(orderInfoList);
- }
-
- //每天0点清空人数
- if (DateUtil.format(LocalDateTime.now(), "HH:mm:ss").equals("00:00:00")) {
- thinkSiteService.update(
- new LambdaUpdateWrapper()
- .set(ThinkSite::getDailyNum, 0)
+ String newTime = DateUtil.format(LocalDateTime.now(), "HH:mm");
+ if ((newTime.equals("21:30") || newTime.equals("21:45")) && redisUtil.get("swimmingCheck") == null) {
+ redisUtil.set("swimmingCheck", 1, 3L, TimeUnit.HOURS);
+ // 每天21:30后核销游泳馆订单
+ List swimmingOrderList = thinkOrderService.list(
+ new LambdaQueryWrapper()
+ .eq(ThinkOrder::getSid, 37)
+ .eq(ThinkOrder::getPayStatus, 1)
+ .in(ThinkOrder::getOrderStatus, 2)
);
- }
-
- // 每天21:30后核销游泳馆订单
- if (DateUtil.format(LocalDateTime.now(), "HH:mm:ss").equals("21:30:10")) {
- // 今天0点时间戳
- final long dayStart = DateUtil.beginOfDay(DateUtil.date()).getTime() / 1000;
- List orderInfoList = thinkOrderInfoService.list(
- new LambdaQueryWrapper()
- .select(ThinkOrderInfo::getOid)
- .eq(ThinkOrderInfo::getSid, 37)
- .eq(ThinkOrderInfo::getPayStatus, 1)
- .between(ThinkOrderInfo::getStartTime, dayStart, (int) (System.currentTimeMillis() / 1000))
- );
- if (!orderInfoList.isEmpty()) {
- List orderIdList = orderInfoList.stream().map(ThinkOrderInfo::getOid).toList();
+ if (!swimmingOrderList.isEmpty()) {
+ List orderIdList = swimmingOrderList.stream().map(ThinkOrder::getId).toList();
thinkOrderService.update(
new LambdaUpdateWrapper()
.in(ThinkOrder::getId, orderIdList)
- .eq(ThinkOrder::getOrderStatus, 2)
- .eq(ThinkOrder::getPayStatus, 1)
.set(ThinkOrder::getOrderStatus, 1)
+ .set(ThinkOrder::getUpdateTime, DateUtil.currentSeconds())
);
}
- }
+ } else {
+ // 2分钟取消订单
+ List orderList = thinkOrderService.list(
+ new LambdaUpdateWrapper()
+ .eq(ThinkOrder::getPayStatus, 2)
+ .eq(ThinkOrder::getOrderStatus, 2)
+ .apply("UNIX_TIMESTAMP() > `create_time` + " + (2 * 60))
+ );
+ if (!orderList.isEmpty()) {
+ List orderInfoList = new ArrayList<>();
+ for (ThinkOrder thinkOrder : orderList) {
+ thinkOrder.setOrderStatus(3);
+ List orderInfoListTmp = thinkOrderInfoService.listInOrder(thinkOrder.getId());
+ orderInfoList.addAll(orderInfoListTmp);
+ thinkOrder.setUpdateTime(System.currentTimeMillis() / 1000);
+ }
+ for (ThinkOrderInfo thinkOrderInfo : orderInfoList) {
+ thinkOrderInfo.setPayStatus(0);
+ redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString());
+ }
+ thinkOrderService.updateBatchById(orderList);
+ thinkOrderInfoService.updateBatchById(orderInfoList);
+ }
- // 核销订单
- List otherOrderList = thinkOrderService.list(
- new LambdaUpdateWrapper()
- .ne(ThinkOrder::getSid, 37)
- .eq(ThinkOrder::getPayStatus, 1)
- .eq(ThinkOrder::getOrderStatus, 2)
- );
- for (ThinkOrder thinkOrder : otherOrderList) {
- List orderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId());
- ThinkOrderInfo lastOne = orderInfoList.get(orderInfoList.size() - 1);
- if ((int) (System.currentTimeMillis() / 1000) > (lastOne.getStartTime() + 1800)) {
- thinkOrder.setOrderStatus(1);
- thinkOrderService.updateById(thinkOrder);
+ // 清除占场redis
+ List cancelOrderList = thinkOrderService.list(
+ new LambdaUpdateWrapper()
+ .in(ThinkOrder::getOrderStatus, 3, 4, 5, 6)
+ .between(ThinkOrder::getCreateTime, DateUtil.beginOfDay(DateUtil.date()).getTime() / 1000, (int) (System.currentTimeMillis() / 1000))
+ );
+ if (!cancelOrderList.isEmpty()) {
+ List orderIdList = cancelOrderList.stream().map(ThinkOrder::getId).toList();
+ List orderInfoListTmp = thinkOrderInfoService.listByOrderIds(orderIdList);
+ for (ThinkOrderInfo thinkOrderInfo : orderInfoListTmp) {
+ redisUtil.delete(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString());
+ }
+ }
+
+ //每天0点清空人数
+ if (DateUtil.format(LocalDateTime.now(), "HH:mm:ss").equals("00:00:00")) {
+ thinkSiteService.update(
+ new LambdaUpdateWrapper()
+ .set(ThinkSite::getDailyNum, 0)
+ );
+ }
+
+ // 核销订单
+ List otherOrderList = thinkOrderService.list(
+ new LambdaUpdateWrapper()
+ .ne(ThinkOrder::getSid, 37)
+ .eq(ThinkOrder::getPayStatus, 1)
+ .eq(ThinkOrder::getOrderStatus, 2)
+ );
+ for (ThinkOrder thinkOrder : otherOrderList) {
+ List orderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId());
+ ThinkOrderInfo lastOne = orderInfoList.get(orderInfoList.size() - 1);
+ if ((int) (System.currentTimeMillis() / 1000) > (lastOne.getStartTime() + 1800)) {
+ thinkOrder.setOrderStatus(1);
+ thinkOrder.setCheckBy(1);
+ thinkOrder.setCheckTime(new Date());
+ thinkOrderService.updateById(thinkOrder);
+ }
+ }
+
+ // 查询开票
+ String invoiceFlag = redisUtil.get("invoiceFlag");
+ if (invoiceFlag == null) {
+ redisUtil.set("invoiceFlag", "1", 3L, TimeUnit.MINUTES);
+ ThinkInvoice thinkInvoice = thinkInvoiceService.getOne(
+ new LambdaUpdateWrapper()
+ .gt(ThinkInvoice::getId, 5481)
+ .eq(ThinkInvoice::getIsOpen, 2)
+ .eq(ThinkInvoice::getType, 2)
+ .eq(ThinkInvoice::getDeleted, 0)
+ .groupBy(ThinkInvoice::getIncoiveNum)
+ .last("order by RAND() limit 1")
+ );
+// for (ThinkInvoice thinkInvoice : invoiceList) {
+ if (thinkInvoice != null)
+ thinkInvoiceController.getRes(thinkInvoice.getId());
+// }
+ }
+
+ // 每2分钟检测撞场
+ if (redisUtil.get("sameOrderCheck") == null) {
+ redisUtil.set("sameOrderCheck", 1, 2L, TimeUnit.MINUTES);
+ List checkOrderList = thinkOrderService.list(
+ new LambdaQueryWrapper()
+ .ne(ThinkOrder::getSid, 37)
+ .in(ThinkOrder::getOrderStatus, 1, 2)
+ .eq(ThinkOrder::getPayStatus, 1)
+ .gt(ThinkOrder::getCreateTime, 1748707200)
+ .orderByAsc(ThinkOrder::getCreateTime)
+ );
+ Set refundOrderIdList = new HashSet<>();
+ if (!checkOrderList.isEmpty()) {
+ for (ThinkOrder thinkOrder : checkOrderList) {
+ List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId());
+ for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) {
+ List checkThinkOrderInfoList = thinkOrderInfoService.list(
+ new LambdaQueryWrapper()
+ .ne(ThinkOrderInfo::getOid, thinkOrder.getId())
+ .eq(ThinkOrderInfo::getFid, thinkOrderInfo.getFid())
+ .eq(ThinkOrderInfo::getSid, thinkOrderInfo.getSid())
+ .eq(ThinkOrderInfo::getStartTime, thinkOrderInfo.getStartTime())
+ );
+ if (!checkThinkOrderInfoList.isEmpty()) {
+ for (ThinkOrderInfo checkThinkOrderInfo : checkThinkOrderInfoList) {
+ ThinkOrder sameOrder = thinkOrderService.getOne(
+ new LambdaQueryWrapper()
+ .eq(ThinkOrder::getId, checkThinkOrderInfo.getOid())
+ );
+ if (sameOrder.getPayStatus().equals(1) && (sameOrder.getOrderStatus().equals(1) || sameOrder.getOrderStatus().equals(2))) {
+ refundOrderIdList.add(sameOrder.getId());
+ }
+ }
+ }
+ }
+ }
+ }
+ if (!refundOrderIdList.isEmpty()) {
+ List doCancelOrderList = thinkOrderService.listByIds(refundOrderIdList.stream().toList());
+ for (ThinkOrder refundOrder : doCancelOrderList) {
+ System.out.println("撞场订单: " + refundOrder.getOrderNum());
+ thinkOrderService.cancelOrder(refundOrder, true, 2);
+ refundOrder.setOrderStatus(6);
+ refundOrder.setRefundTime((int) (System.currentTimeMillis() / 1000));
+ thinkOrderService.updateById(refundOrder);
+ }
+ }
}
}
- // 查询开票
- String invoiceFlag = redisUtil.get("invoiceFlag");
- if (invoiceFlag == null) {
- redisUtil.set("invoiceFlag", "1", 5L, TimeUnit.MINUTES);
- ThinkInvoice thinkInvoice = thinkInvoiceService.getOne(
- new LambdaUpdateWrapper()
- .gt(ThinkInvoice::getId, 5481)
- .eq(ThinkInvoice::getIsOpen, 2)
- .eq(ThinkInvoice::getType, 2)
- .groupBy(ThinkInvoice::getIncoiveNum)
- .last("order by id asc limit 1")
- );
-// for (ThinkInvoice thinkInvoice : invoiceList) {
- thinkInvoiceController.getRes(thinkInvoice.getId());
-// }
- }
}
}
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardBalanceController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardBalanceController.java
new file mode 100644
index 0000000..f4910ed
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardBalanceController.java
@@ -0,0 +1,319 @@
+package com.gxwebsoft.think.controller;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.think.entity.*;
+import com.gxwebsoft.think.service.*;
+import com.gxwebsoft.think.param.ThinkCardBalanceParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jacoco.agent.rt.RT;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.websocket.server.PathParam;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+/**
+ * 卡余额记录控制器
+ *
+ * @author 科技小王子
+ * @since 2025-06-20 20:58:38
+ */
+@Api(tags = "卡余额记录管理")
+@RestController
+@RequestMapping("/api/think/think-card-balance")
+public class ThinkCardBalanceController extends BaseController {
+ @Resource
+ private ThinkCardBalanceService thinkCardBalanceService;
+ @Resource
+ private ThinkCardService thinkCardService;
+ @Resource
+ private ThinkUsersVipService thinkUsersVipService;
+ @Resource
+ private ThinkVipService thinkVipService;
+ @Resource
+ private ThinkOrderService thinkOrderService;
+
+ @GetMapping("/set-data")
+ public ApiResult> setData() {
+ List thinkCardList = thinkCardService.list(
+ new LambdaQueryWrapper().gt(ThinkCard::getExpireTime, DateUtil.currentSeconds())
+ );
+ List thinkUsersVipList = thinkUsersVipService.list(
+ new LambdaQueryWrapper().gt(ThinkUsersVip::getExpireTime, DateUtil.currentSeconds())
+ );
+ List thinkVipList = thinkVipService.list();
+ for (ThinkCard thinkCard : thinkCardList) {
+ ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(thinkCard.getVid())).findFirst().orElse(null);
+ if (thinkVip == null) return fail(thinkCard.getVid() + "NOT FOUND");
+ BigDecimal reduceEach = BigDecimal.ZERO;
+ BigDecimal balance = BigDecimal.ZERO;
+ if (thinkVip.getMode().equals(0)) {
+ reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip);
+ if (thinkVip.getType().equals(1) || thinkVip.getType().equals(3) || thinkVip.getType().equals(4)) {
+ DateTime dateTime = DateUtil.date(thinkCard.getExpireTime() * 1000);
+ String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59";
+ double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis();
+ double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000));
+ balance = reduceEach.multiply(BigDecimal.valueOf(remainDay));
+
+ } else if (thinkVip.getType().equals(2)) {
+ balance = reduceEach.multiply(BigDecimal.valueOf(thinkCard.getNum()));
+ } else if (thinkVip.getType().equals(5)) {
+ balance = thinkCard.getRemainingMoney();
+ }
+ } else {
+ long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime();
+ DateTime dateTime = DateUtil.date(time);
+ String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59";
+ double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - (thinkCard.getCreateTime() * 1000);
+ double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000));
+ reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP);
+
+ double remainToNowTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis();
+ double remainToNowDay = Math.ceil(remainToNowTimestampD / (24 * 60 * 60 * 1000));
+ BigDecimal usedMoney = reduceEach.multiply(BigDecimal.valueOf(remainDay).subtract(BigDecimal.valueOf(remainToNowDay)));
+ balance = thinkVip.getPrice().subtract(usedMoney);
+ }
+ ThinkCardBalance thinkCardBalance = new ThinkCardBalance();
+ thinkCardBalance.setCid(thinkCard.getId());
+ thinkCardBalance.setUid(thinkCard.getUid());
+ thinkCardBalance.setBalance(balance);
+ thinkCardBalance.setReduceEach(reduceEach);
+ thinkCardBalance.setType(thinkVip.getType());
+ thinkCardBalance.setDiscount(thinkVip.getDiscount());
+ thinkCardBalance.setVipId(thinkVip.getId());
+ thinkCardBalance.setUpdateTime(DateUtil.currentSeconds());
+ thinkCardBalance.setCreateTime(DateUtil.currentSeconds());
+ thinkCardBalanceService.save(thinkCardBalance);
+ }
+ for (ThinkUsersVip thinkCard : thinkUsersVipList) {
+ ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(thinkCard.getVid())).findFirst().orElse(null);
+ if (thinkVip == null) return fail(thinkCard.getVid() + "NOT FOUND");
+ BigDecimal reduceEach = BigDecimal.ZERO;
+ BigDecimal balance = BigDecimal.ZERO;
+ if (thinkVip.getMode().equals(0)) {
+ reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip);
+ if (thinkVip.getType().equals(1) || thinkVip.getType().equals(3) || thinkVip.getType().equals(4)) {
+ DateTime dateTime = DateUtil.date(thinkCard.getExpireTime() * 1000);
+ String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59";
+ double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis();
+ double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000));
+ balance = reduceEach.multiply(BigDecimal.valueOf(remainDay));
+
+ } else if (thinkVip.getType().equals(2)) {
+ balance = reduceEach.multiply(BigDecimal.valueOf(thinkCard.getNum()));
+ } else if (thinkVip.getType().equals(5)) {
+ balance = thinkCard.getRemainingMoney();
+ }
+ } else {
+ long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime();
+ DateTime dateTime = DateUtil.date(time);
+ String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59";
+ double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - (thinkCard.getCreateTime() * 1000);
+ double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000));
+ reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP);
+
+ double remainToNowTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis();
+ double remainToNowDay = Math.ceil(remainToNowTimestampD / (24 * 60 * 60 * 1000));
+ BigDecimal usedMoney = reduceEach.multiply(BigDecimal.valueOf(remainDay).subtract(BigDecimal.valueOf(remainToNowDay)));
+ balance = thinkVip.getPrice().subtract(usedMoney);
+ }
+
+ ThinkCardBalance thinkCardBalance = new ThinkCardBalance();
+ thinkCardBalance.setVid(thinkCard.getId());
+ thinkCardBalance.setUid(thinkCard.getUid());
+ thinkCardBalance.setBalance(balance);
+ thinkCardBalance.setReduceEach(reduceEach);
+ thinkCardBalance.setDiscount(thinkVip.getDiscount());
+ thinkCardBalance.setVipId(thinkVip.getId());
+ thinkCardBalance.setType(thinkVip.getType());
+ thinkCardBalance.setUpdateTime(DateUtil.currentSeconds());
+ thinkCardBalance.setCreateTime(DateUtil.currentSeconds());
+ thinkCardBalanceService.save(thinkCardBalance);
+ }
+ return success();
+ }
+
+ @GetMapping("/set-order-data")
+ public ApiResult> setOrderData(@PathParam("page") Integer page) {
+// IPage cardBalanceListNot5 = thinkCardBalanceService.page(
+// new Page<>(page, 1000),
+// new LambdaQueryWrapper()
+// .ne(ThinkCardBalance::getType, 5)
+// );
+// for (ThinkCardBalance thinkCardBalance : cardBalanceListNot5.getRecords()) {
+// LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+// .eq(ThinkOrder::getUid, thinkCardBalance.getUid())
+// .eq(ThinkOrder::getPayStatus, 1);
+// if (thinkCardBalance.getCid() != null) wrapper.eq(ThinkOrder::getCid, thinkCardBalance.getCid());
+// else wrapper.eq(ThinkOrder::getVid, thinkCardBalance.getVid());
+// List orderList = thinkOrderService.list(wrapper);
+// if (!orderList.isEmpty()) {
+// for (ThinkOrder thinkOrder : orderList) {
+// thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(thinkCardBalance.getReduceEach()));
+// thinkOrder.setPayPrice(thinkCardBalance.getReduceEach());
+// thinkOrderService.updateById(thinkOrder);
+// }
+// }
+// }
+//
+// List cardBalanceList5 = thinkCardBalanceService.list(
+// new LambdaQueryWrapper()
+// .eq(ThinkCardBalance::getType, 5)
+// );
+// for (ThinkCardBalance thinkCardBalance : cardBalanceList5) {
+// LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+// .eq(ThinkOrder::getUid, thinkCardBalance.getUid())
+// .eq(ThinkOrder::getPayStatus, 1);
+// if (thinkCardBalance.getCid() != null) wrapper.eq(ThinkOrder::getCid, thinkCardBalance.getCid());
+// else wrapper.eq(ThinkOrder::getVid, thinkCardBalance.getVid());
+// List orderList = thinkOrderService.list(wrapper);
+// if (!orderList.isEmpty()) {
+// for (ThinkOrder thinkOrder : orderList) {
+// BigDecimal discount = thinkCardBalance.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP);
+// BigDecimal payPrice = thinkOrder.getTotalPrice().multiply(discount);
+// thinkOrder.setPayPrice(payPrice);
+// thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(payPrice));
+// thinkOrderService.updateById(thinkOrder);
+// }
+// }
+//
+// }
+
+// List thinkCardBalanceList = thinkCardBalanceService.list(
+// new LambdaQueryWrapper()
+// .isNotNull(ThinkCardBalance::getVid)
+// );
+// for (ThinkCardBalance thinkCardBalance : thinkCardBalanceList) {
+// ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkCardBalance.getVid());
+// if (thinkUsersVip != null) {
+// thinkCardBalance.setType(thinkUsersVip.getType());
+// thinkCardBalanceService.updateById(thinkCardBalance);
+// }
+// }
+
+ List orderList = thinkOrderService.list(
+ new LambdaQueryWrapper()
+ .eq(ThinkOrder::getPayStatus, 1)
+ .eq(ThinkOrder::getPayPrice, 0)
+ .gt(ThinkOrder::getCreateTime, 1742400000)
+ .in(ThinkOrder::getPayType, 6, 7, 8, 9, 10, 11, 16, 17)
+ );
+
+ for (ThinkOrder thinkOrder : orderList) {
+ ThinkCardBalance thinkCardBalance = null;
+ if (!thinkOrder.getCid().equals(0)) {
+ thinkCardBalance = thinkCardBalanceService.getByCid(thinkOrder.getCid());
+ }
+ if (thinkOrder.getVid() != null) {
+ thinkCardBalance = thinkCardBalanceService.getByVid(thinkOrder.getVid());
+ }
+ if (thinkCardBalance != null) {
+ if (!thinkCardBalance.getType().equals(5)) {
+ thinkOrder.setPayPrice(thinkCardBalance.getReduceEach());
+ thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(thinkCardBalance.getReduceEach()));
+ thinkOrderService.updateById(thinkOrder);
+ } else {
+ BigDecimal discount = thinkCardBalance.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP);
+ BigDecimal payPrice = thinkOrder.getTotalPrice().multiply(discount);
+ thinkOrder.setPayPrice(payPrice);
+ thinkOrder.setReducePrice(thinkOrder.getTotalPrice().subtract(payPrice));
+ thinkOrderService.updateById(thinkOrder);
+ }
+ }
+ }
+ return success();
+ }
+
+ @ApiOperation("分页查询卡余额记录")
+ @GetMapping("/page")
+ public ApiResult> page(ThinkCardBalanceParam param) {
+ // 使用关联查询
+ return success(thinkCardBalanceService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部卡余额记录")
+ @GetMapping()
+ public ApiResult> list(ThinkCardBalanceParam param) {
+ // 使用关联查询
+ return success(thinkCardBalanceService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('think:thinkCardBalance:list')")
+ @ApiOperation("根据id查询卡余额记录")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(thinkCardBalanceService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加卡余额记录")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ThinkCardBalance thinkCardBalance) {
+ if (thinkCardBalanceService.save(thinkCardBalance)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改卡余额记录")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ThinkCardBalance thinkCardBalance) {
+ if (thinkCardBalanceService.updateById(thinkCardBalance)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除卡余额记录")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (thinkCardBalanceService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加卡余额记录")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (thinkCardBalanceService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改卡余额记录")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(thinkCardBalanceService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除卡余额记录")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (thinkCardBalanceService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java
index 9d56936..c2b739f 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardController.java
@@ -2,9 +2,11 @@ package com.gxwebsoft.think.controller;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.BatchParam;
@@ -20,6 +22,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
@@ -47,6 +50,10 @@ public class ThinkCardController extends BaseController {
private ThinkVipCardsBillsService thinkVipCardsBillsService;
@Resource
private ThinkSiteService thinkSiteService;
+ @Resource
+ private ThinkLogService thinkLogService;
+ @Resource
+ private ThinkCardBalanceService thinkCardBalanceService;
@ApiOperation("用户卡")
@PostMapping("/user-card")
@@ -182,20 +189,41 @@ public class ThinkCardController extends BaseController {
return fail("卡号已存在");
}
if (thinkCard.getCode() == null) thinkCard.setCode(RandomUtil.randomString(8));
+ BigDecimal reduceEach = BigDecimal.ZERO;
ThinkVip thinkVip = thinkVipService.getById(thinkCard.getVid());
- if (thinkVip.getMode().equals(0))
- thinkCard.setExpireTime(DateUtil.currentSeconds() + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30));
- else{
- long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime();
- thinkCard.setExpireTime(time / 1000);
+ if (thinkCard.getIsChange() == null) {
+ if (thinkVip.getMode().equals(0)) {
+ reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip);
+ thinkCard.setExpireTime(DateUtil.currentSeconds() + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30) + (thinkVip.getDay() * 86400));
+ } else {
+ long time = DateUtil.parse(thinkVip.getExpiredTime(), "yyyy-MM-dd").getTime();
+ DateTime dateTime = DateUtil.date(time);
+ String date = DateUtil.format(dateTime, "yyyy-MM-dd") + " 23:59:59";
+ thinkCard.setExpireTime(DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() / 1000L);
+ double remainTimestampD = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss").getTime() - System.currentTimeMillis();
+ double remainDay = Math.ceil(remainTimestampD / (24 * 60 * 60 * 1000));
+ reduceEach = thinkVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP);
+ }
+ thinkCard.setCreateTime(DateUtil.currentSeconds());
+ thinkCard.setUpdateTime(DateUtil.currentSeconds());
+ thinkCard.setRemainingMoney(thinkVip.getPrice());
+ thinkCard.setNum(thinkVip.getCount());
+ thinkCard.setCount(thinkVip.getCount());
+ thinkCard.setDiscount(thinkVip.getDiscount());
+ thinkCard.setAid(getLoginUserId());
}
- thinkCard.setCreateTime(DateUtil.currentSeconds());
- thinkCard.setUpdateTime(DateUtil.currentSeconds());
- thinkCard.setRemainingMoney(thinkVip.getPrice());
- thinkCard.setNum(thinkVip.getCount());
- thinkCard.setCount(thinkVip.getCount());
- thinkCard.setDiscount(thinkVip.getDiscount());
if (thinkCardService.save(thinkCard)) {
+ ThinkCardBalance thinkCardBalance = new ThinkCardBalance();
+ thinkCardBalance.setCid(thinkCard.getId());
+ thinkCardBalance.setUid(thinkCard.getUid());
+ thinkCardBalance.setBalance(thinkVip.getPrice());
+ thinkCardBalance.setReduceEach(reduceEach);
+ thinkCardBalance.setType(thinkVip.getType());
+ thinkCardBalance.setDiscount(thinkVip.getDiscount());
+ thinkCardBalance.setVipId(thinkVip.getId());
+ thinkCardBalance.setUpdateTime(DateUtil.currentSeconds());
+ thinkCardBalance.setCreateTime(DateUtil.currentSeconds());
+ thinkCardBalanceService.save(thinkCardBalance);
return success("添加成功", thinkCard.getId());
}
return fail("添加失败");
@@ -221,11 +249,35 @@ public class ThinkCardController extends BaseController {
@ApiOperation("修改")
@PutMapping()
- public ApiResult> update(@RequestBody ThinkCard thinkCard) {
+ public ApiResult> update(@RequestBody ThinkCard thinkCard, HttpServletRequest request) {
+ ThinkLog thinkLog = null;
+ if (thinkCard.getSaveLog() != null && thinkCard.getSaveLog()) {
+ ThinkCard thinkCard1 = thinkCardService.getById(thinkCard.getId());
+ thinkLog = new ThinkLog();
+ // 实体类转json
+ String json = JSON.toJSONString(thinkCard1);
+ String desc = "修改IC卡:".concat(thinkCard1.getCode()).concat(".修改后数据:").concat(json);
+ thinkLog.setAdminId(getLoginUserId());
+ thinkLog.setAdminName(getLoginUser().getRealName());
+ thinkLog.setDescription(desc);
+ thinkLog.setIp(request.getRemoteAddr());
+ thinkLog.setStatus(1);
+ thinkLog.setAddTime(System.currentTimeMillis() / 1000);
+ thinkLog.setLogType(0);
+ thinkLog.setOperateType(4);
+ }
if (thinkCardService.updateById(thinkCard)) {
thinkVipCardsBillsService.setCardUid(thinkCard.getId(), thinkCard.getUid());
+ if (thinkLog != null) {
+ thinkLog.setDescription(thinkLog.getDescription() + ".成功");
+ thinkLogService.save(thinkLog);
+ }
return success("修改成功");
}
+ if (thinkLog != null) {
+ thinkLog.setDescription(thinkLog.getDescription() + ".失败");
+ thinkLogService.save(thinkLog);
+ }
return fail("修改失败");
}
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java
index d1609d5..1dc44bf 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkCardLogController.java
@@ -2,7 +2,11 @@ package com.gxwebsoft.think.controller;
import cn.hutool.core.date.DateUtil;
import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.system.entity.FileRecord;
import com.gxwebsoft.think.entity.ThinkCard;
+import com.gxwebsoft.think.entity.ThinkCardBalance;
+import com.gxwebsoft.think.entity.ThinkVip;
+import com.gxwebsoft.think.service.ThinkCardBalanceService;
import com.gxwebsoft.think.service.ThinkCardLogService;
import com.gxwebsoft.think.entity.ThinkCardLog;
import com.gxwebsoft.think.param.ThinkCardLogParam;
@@ -13,14 +17,23 @@ import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.think.service.ThinkCardService;
+import com.gxwebsoft.think.service.ThinkVipService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
+import com.gxwebsoft.common.core.config.ConfigProperties;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFRow;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Date;
/**
* 控制器
@@ -36,6 +49,12 @@ public class ThinkCardLogController extends BaseController {
private ThinkCardLogService thinkCardLogService;
@Resource
private ThinkCardService thinkCardService;
+ @Resource
+ private ThinkVipService thinkVipService;
+ @Resource
+ private ThinkCardBalanceService thinkCardBalanceService;
+ @Resource
+ private ConfigProperties config;
@ApiOperation("分页查询")
@GetMapping("/page")
@@ -65,24 +84,41 @@ public class ThinkCardLogController extends BaseController {
thinkCardLog.setAid(getLoginUserId());
if (thinkCardLogService.save(thinkCardLog)) {
ThinkCard thinkCard = thinkCardService.getByCode(thinkCardLog.getCode());
- if (thinkCard.getExpireTime() > (DateUtil.currentSeconds() / 1000)) {
- thinkCard.setExpireTime((DateUtil.currentSeconds() / 1000) + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30));
+ ThinkVip thinkVip = thinkVipService.getById(thinkCard.getVid());
+
+ if (thinkCard.getExpireTime() < DateUtil.currentSeconds()) {
+ thinkCard.setExpireTime((DateUtil.currentSeconds()) + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30) + (thinkVip.getDay() * 86400));
} else {
- thinkCard.setExpireTime(thinkCard.getExpireTime() + (thinkCard.getTerm() * 86400 * 365) + (thinkCard.getMonth() * 86400 * 30));
+ thinkCard.setExpireTime(thinkCard.getExpireTime() + (thinkVip.getTerm() * 86400 * 365) + (thinkVip.getMonth() * 86400 * 30) + (thinkVip.getDay() * 86400));
}
+
+ ThinkCardBalance thinkCardBalance = new ThinkCardBalance();
+ thinkCardBalance.setCid(thinkCard.getId());
+ thinkCardBalance.setUid(thinkCard.getUid());
+ thinkCardBalance.setBalance(thinkVip.getPrice());
+ thinkCardBalance.setReduceEach(thinkCardBalanceService.getThinkCardBalance(thinkVip));
+ thinkCardBalance.setType(thinkVip.getType());
+ thinkCardBalance.setDiscount(thinkVip.getDiscount());
+ thinkCardBalance.setVipId(thinkVip.getId());
+ thinkCardBalance.setUpdateTime(DateUtil.currentSeconds());
+ thinkCardBalance.setCreateTime(DateUtil.currentSeconds());
+ thinkCardBalanceService.save(thinkCardBalance);
+
+ if (thinkCard.getExpireTime() < (DateUtil.currentSeconds())) {
+ thinkCard.setRemainingMoney(thinkCardLog.getMoney());
+ } else {
+ thinkCard.setRemainingMoney(thinkCardLog.getMoney().add(thinkCard.getRemainingMoney()));
+ }
+
// 充值卡
if (thinkCard.getType().equals(4) || thinkCard.getType().equals(5)) {
// 是否已过期,过期的清空,未过期的在旧卡基础上叠加
- if (thinkCard.getExpireTime() < (DateUtil.currentSeconds() / 1000)) {
- thinkCard.setRemainingMoney(thinkCardLog.getMoney());
- } else {
- thinkCard.setRemainingMoney(thinkCardLog.getMoney().add(thinkCard.getRemainingMoney()));
- }
+
} else {
- if (thinkCard.getExpireTime() < (DateUtil.currentSeconds() / 1000)) {
+ if (thinkCard.getExpireTime() < (DateUtil.currentSeconds())) {
thinkCard.setNum(thinkCardLog.getCount());
} else {
- thinkCard.setNum(thinkCardLog.getCount() + thinkCard.getCount());
+ thinkCard.setNum(thinkCardLog.getCount() + thinkCard.getNum());
}
// thinkCard.setNum(thinkCard.getCount() + thinkCard.getCount());
}
@@ -139,4 +175,49 @@ public class ThinkCardLogController extends BaseController {
return fail("删除失败");
}
+ @ApiOperation("导出")
+ @PostMapping("/export")
+ public ApiResult> export(@RequestBody ThinkCardLogParam param) throws IOException {
+ List logList = thinkCardLogService.listRel(param);
+ String filename = "excel/卡充值记录-" + new Date().getTime() + ".xlsx";
+ String path = config.getUploadPath() + filename;
+ SXSSFWorkbook workbook = new SXSSFWorkbook();
+ SXSSFSheet sheet = workbook.createSheet();
+ String[] headers = {"卡号", "姓名", "手机号", "会员卡名称", "支付方式", "充值金额", "充值次数", "操作员", "第三方订单号", "充值时间"};
+ for (int i = 0; i < headers.length; i++) {
+ sheet.setColumnWidth(i, 20 * 256);
+ }
+ SXSSFRow row = sheet.createRow(0);
+ for (int i = 0; i < headers.length; i++) {
+ row.createCell(i).setCellValue(headers[i]);
+ }
+ String[] payTypeArr = {"", "微信支付", "支付宝支付", "现金支付", "POS机支付"};
+ int rowNum = 1;
+ for (ThinkCardLog log : logList) {
+ SXSSFRow dataRow = sheet.createRow(rowNum);
+ dataRow.createCell(0).setCellValue(log.getCode() != null ? log.getCode() : "");
+ dataRow.createCell(1).setCellValue(log.getUsername() != null ? log.getUsername() : "");
+ dataRow.createCell(2).setCellValue(log.getPhone() != null ? log.getPhone() : "");
+ dataRow.createCell(3).setCellValue(log.getCardName() != null ? log.getCardName() : "");
+ String payTypeStr = (log.getPayType() != null && log.getPayType() > 0 && log.getPayType() < payTypeArr.length) ? payTypeArr[log.getPayType()] : "";
+ dataRow.createCell(4).setCellValue(payTypeStr);
+ dataRow.createCell(5).setCellValue(log.getMoney() != null ? log.getMoney().toString() : "");
+ dataRow.createCell(6).setCellValue(log.getCount() != null ? log.getCount() : 0);
+ dataRow.createCell(7).setCellValue(log.getAdminName() != null ? log.getAdminName() : "");
+ dataRow.createCell(8).setCellValue(log.getWechatOrder() != null ? log.getWechatOrder() : "");
+ dataRow.createCell(9).setCellValue(log.getCreateTime() != null ? DateUtil.format(DateUtil.date(log.getCreateTime() * 1000), "yyyy-MM-dd HH:mm:ss") : "");
+ rowNum++;
+ }
+ FileOutputStream output = new FileOutputStream(path);
+ workbook.write(output);
+ output.flush();
+
+ FileRecord result = new FileRecord();
+ result.setCreateUserId(getLoginUserId());
+ result.setName(filename);
+ result.setPath(path);
+ result.setUrl(config.getServerUrl() + "/file/" + filename);
+ return success(result);
+ }
+
}
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java
index 07e6e23..cb30d1b 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkFieldController.java
@@ -1,5 +1,6 @@
package com.gxwebsoft.think.controller;
+import cn.hutool.core.date.DateUtil;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.think.service.ThinkFieldService;
import com.gxwebsoft.think.entity.ThinkField;
@@ -63,6 +64,8 @@ public class ThinkFieldController extends BaseController {
@ApiOperation("添加")
@PostMapping()
public ApiResult> save(@RequestBody ThinkField thinkField) {
+ thinkField.setCreateTime((int) DateUtil.currentSeconds());
+ thinkField.setUpdateTime((int) DateUtil.currentSeconds());
if (thinkFieldService.save(thinkField)) {
return success("添加成功");
}
@@ -72,6 +75,7 @@ public class ThinkFieldController extends BaseController {
@ApiOperation("修改")
@PutMapping()
public ApiResult> update(@RequestBody ThinkField thinkField) {
+ thinkField.setUpdateTime((int) DateUtil.currentSeconds());
if (thinkFieldService.updateById(thinkField)) {
return success("修改成功");
}
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkFtpCheckBillController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkFtpCheckBillController.java
new file mode 100644
index 0000000..0e2af39
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkFtpCheckBillController.java
@@ -0,0 +1,401 @@
+package com.gxwebsoft.think.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.io.FileUtil;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.think.entity.ThinkOrder;
+import com.gxwebsoft.think.service.ThinkFtpCheckBillService;
+import com.gxwebsoft.think.entity.ThinkFtpCheckBill;
+import com.gxwebsoft.think.param.ThinkFtpCheckBillParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import com.gxwebsoft.think.service.ThinkOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.net.ftp.FTP;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+import org.apache.commons.net.ftp.FTPReply;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 控制器
+ *
+ * @author 科技小王子
+ * @since 2025-05-21 11:58:28
+ */
+@Api(tags = "管理")
+@RestController
+@RequestMapping("/api/think/think-ftp-check-bill")
+public class ThinkFtpCheckBillController extends BaseController {
+ @Resource
+ private ThinkFtpCheckBillService thinkFtpCheckBillService;
+ @Resource
+ private ThinkOrderService thinkOrderService;
+
+ @Value("${config.upload-path}")
+ private String uploadPath;
+
+ @ApiOperation("分页查询")
+ @GetMapping("/page")
+ public ApiResult> page(ThinkFtpCheckBillParam param) {
+ // 使用关联查询
+ return success(thinkFtpCheckBillService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部")
+ @GetMapping()
+ public ApiResult> list(ThinkFtpCheckBillParam param) {
+ // 使用关联查询
+ return success(thinkFtpCheckBillService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('think:thinkFtpCheckBill:list')")
+ @ApiOperation("根据id查询")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(thinkFtpCheckBillService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ThinkFtpCheckBill thinkFtpCheckBill) {
+ if (thinkFtpCheckBillService.save(thinkFtpCheckBill)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ThinkFtpCheckBill thinkFtpCheckBill) {
+ if (thinkFtpCheckBillService.updateById(thinkFtpCheckBill)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (thinkFtpCheckBillService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (thinkFtpCheckBillService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(thinkFtpCheckBillService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (thinkFtpCheckBillService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("FTP同步")
+ @GetMapping("/async")
+ public ApiResult> async() {
+ FTPClient ftpClient = new FTPClient();
+ try {
+ // 配置FTP连接参数
+ ftpClient.connect("uisftp.chinaums.com", 21);
+ ftpClient.login("103000-8984501651390AT", "651390At!");
+ ftpClient.enterLocalPassiveMode();
+ ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
+ ftpClient.setControlEncoding("UTF-8");
+
+ // 连接到FTP服务器
+ int replyCode = ftpClient.getReplyCode();
+ if (!FTPReply.isPositiveCompletion(replyCode)) {
+ throw new RuntimeException("FTP服务器连接失败");
+ }
+ ftpClient.changeWorkingDirectory("/build");
+ // 文件列表
+ for (FTPFile file : ftpClient.listFiles()) {
+ if (file.isFile()) {
+ // 获取文件名
+ String fileName = file.getName();
+ // 下载文件
+ String remoteFilePath = "/build/" + fileName;
+ String localFilePath = uploadPath + "excel/" + fileName;
+ if (!FileUtil.exist(localFilePath)) {
+ FileOutputStream outputStream = new FileOutputStream(localFilePath);
+ ftpClient.retrieveFile(remoteFilePath, outputStream);
+ outputStream.flush();
+ outputStream.close();
+ System.out.println("对账文件: " + fileName);
+ FileInputStream fileInputStream = new FileInputStream(localFilePath);
+ HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
+ Sheet sheet = workbook.getSheetAt(0);
+ List thinkFtpCheckBillList = new ArrayList<>();
+ for (Row row : sheet) {
+ if (row.getRowNum() > 3 &&
+ (row.getCell(4).toString().equals("消费") || row.getCell(5).toString().equals("消费"))) {
+ String deviceNo = "";
+ String cardNo = "";
+ double amount = 0;
+ double settleAmount = 0;
+ double feeAmount = 0;
+ double paidAmount = 0;
+ String refNo = "";
+ String flowNo = "";
+ String cardType = "";
+ String postCardType = "";
+ String payType = "";
+ String orderNo = "";
+ LocalDateTime payTime = null;
+ if (row.getCell(4).toString().equals("消费")) {
+ cardNo = row.getCell(3).toString();
+ amount = row.getCell(5).getNumericCellValue();
+ deviceNo = row.getCell(6).toString();
+ settleAmount = Double.parseDouble(row.getCell(7).toString());
+ feeAmount = Double.parseDouble(row.getCell(8).toString());
+ refNo = row.getCell(9).toString();
+ flowNo = row.getCell(10).toString();
+ paidAmount = Double.parseDouble(row.getCell(16).toString());
+ cardType = row.getCell(11).toString();
+ orderNo = row.getCell(12).toString();
+ postCardType = row.getCell(21).toString();
+ payType = row.getCell(13).toString();
+ } else {
+ deviceNo = row.getCell(3).toString();
+ cardNo = row.getCell(4).toString();
+ amount = row.getCell(6).getNumericCellValue();
+ settleAmount = Double.parseDouble(row.getCell(7).toString());
+ feeAmount = Double.parseDouble(row.getCell(8).toString());
+ paidAmount = Double.parseDouble(row.getCell(9).toString());
+ refNo = row.getCell(10).toString();
+ flowNo = row.getCell(11).toString();
+ cardType = row.getCell(12).toString();
+ postCardType = row.getCell(13).toString();
+ payType = row.getCell(14).toString();
+ orderNo = row.getCell(15).toString();
+ }
+ Date dateItem = row.getCell(1).getDateCellValue();
+ String date = DateUtil.format(dateItem, "yyyy-MM-dd");
+ long startTime = dateItem.getTime() / 1000;
+ long endTime = DateUtil.parse(date + " 23:59:59", "yyyy-MM-dd HH:mm:ss").getTime() / 1000;
+ payTime = LocalDateTimeUtil.parse(date + " " + row.getCell(2).toString(), "yyyy-MM-dd HH:mm:ss");
+ if (!flowNo.isEmpty() && !orderNo.isEmpty()) {
+ ThinkFtpCheckBill check = thinkFtpCheckBillService.getByOrderNo(orderNo);
+ if (check == null) {
+ ThinkFtpCheckBill thinkFtpCheckBill = new ThinkFtpCheckBill();
+ thinkFtpCheckBill.setDeviceNo(deviceNo);
+ thinkFtpCheckBill.setCardNo(cardNo);
+ thinkFtpCheckBill.setOrderNo(orderNo);
+ thinkFtpCheckBill.setAmount(BigDecimal.valueOf(amount));
+ thinkFtpCheckBill.setSettleAmount(BigDecimal.valueOf(settleAmount));
+ thinkFtpCheckBill.setFeeAmount(BigDecimal.valueOf(feeAmount));
+ thinkFtpCheckBill.setPaidAmount(BigDecimal.valueOf(paidAmount));
+ thinkFtpCheckBill.setRefNo(refNo);
+ thinkFtpCheckBill.setFlowNo(flowNo);
+ thinkFtpCheckBill.setCardType(cardType);
+ thinkFtpCheckBill.setPostCardType(postCardType);
+ thinkFtpCheckBill.setPayType(payType);
+ thinkFtpCheckBill.setPayTime(payTime);
+ if (payTime != null) {
+ thinkFtpCheckBill.setPayTime(payTime);
+ }
+ thinkFtpCheckBillList.add(thinkFtpCheckBill);
+ }
+ ThinkOrder thinkOrder = thinkOrderService.getUnCheckBillByWechatCode(flowNo, startTime, endTime);
+ if (thinkOrder != null) {
+ BigDecimal price = BigDecimal.valueOf(amount);
+ if (thinkOrder.getPayPrice().compareTo(price) == 0) {
+ System.out.println("check bill: " + thinkOrder.getOrderNum());
+ thinkOrder.setCheckBill(1);
+ thinkOrderService.updateById(thinkOrder);
+ }
+ }
+ }
+ }
+ }
+ if (!thinkFtpCheckBillList.isEmpty()) {
+ thinkFtpCheckBillService.saveBatch(thinkFtpCheckBillList);
+ }
+ }
+ }
+ }
+ // 断开与FTP服务器的连接
+ ftpClient.logout();
+ ftpClient.disconnect();
+ return success();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("PDF文件下载失败");
+ return fail(e.getMessage());
+ }
+ }
+
+
+ @ApiOperation("FTP同步")
+ public void ftpAsync() {
+ FTPClient ftpClient = new FTPClient();
+ try {
+ // 配置FTP连接参数
+ ftpClient.connect("uisftp.chinaums.com", 21);
+ ftpClient.login("103000-8984501651390AT", "651390At!");
+ ftpClient.enterLocalPassiveMode();
+ ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
+ ftpClient.setControlEncoding("UTF-8");
+
+ // 连接到FTP服务器
+ int replyCode = ftpClient.getReplyCode();
+ if (!FTPReply.isPositiveCompletion(replyCode)) {
+ throw new RuntimeException("FTP服务器连接失败");
+ }
+ ftpClient.changeWorkingDirectory("/build");
+ // 文件列表
+ for (FTPFile file : ftpClient.listFiles()) {
+ if (file.isFile()) {
+ // 获取文件名
+ String fileName = file.getName();
+ // 下载文件
+ String remoteFilePath = "/build/" + fileName;
+ String localFilePath = uploadPath + "excel/" + fileName;
+ if (!FileUtil.exist(localFilePath)) {
+ FileOutputStream outputStream = new FileOutputStream(localFilePath);
+ ftpClient.retrieveFile(remoteFilePath, outputStream);
+ outputStream.flush();
+ outputStream.close();
+ System.out.println("对账文件: " + fileName);
+ FileInputStream fileInputStream = new FileInputStream(localFilePath);
+ HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
+ Sheet sheet = workbook.getSheetAt(0);
+ List thinkFtpCheckBillList = new ArrayList<>();
+ for (Row row : sheet) {
+ if (row.getRowNum() > 3 &&
+ (row.getCell(4).toString().equals("消费") || row.getCell(5).toString().equals("消费"))) {
+ String deviceNo = "";
+ String cardNo = "";
+ double amount = 0;
+ double settleAmount = 0;
+ double feeAmount = 0;
+ double paidAmount = 0;
+ String refNo = "";
+ String flowNo = "";
+ String cardType = "";
+ String postCardType = "";
+ String payType = "";
+ String orderNo = "";
+ LocalDateTime payTime = null;
+ if (row.getCell(4).toString().equals("消费")) {
+ cardNo = row.getCell(3).toString();
+ amount = row.getCell(5).getNumericCellValue();
+ deviceNo = row.getCell(6).toString();
+ settleAmount = Double.parseDouble(row.getCell(7).toString());
+ feeAmount = Double.parseDouble(row.getCell(8).toString());
+ refNo = row.getCell(9).toString();
+ flowNo = row.getCell(10).toString();
+ paidAmount = Double.parseDouble(row.getCell(16).toString());
+ cardType = row.getCell(11).toString();
+ orderNo = row.getCell(12).toString();
+ postCardType = row.getCell(21).toString();
+ payType = row.getCell(13).toString();
+ } else {
+ deviceNo = row.getCell(3).toString();
+ cardNo = row.getCell(4).toString();
+ amount = row.getCell(6).getNumericCellValue();
+ settleAmount = Double.parseDouble(row.getCell(7).toString());
+ feeAmount = Double.parseDouble(row.getCell(8).toString());
+ paidAmount = Double.parseDouble(row.getCell(9).toString());
+ refNo = row.getCell(10).toString();
+ flowNo = row.getCell(11).toString();
+ cardType = row.getCell(12).toString();
+ postCardType = row.getCell(13).toString();
+ payType = row.getCell(14).toString();
+ orderNo = row.getCell(15).toString();
+ }
+ Date dateItem = row.getCell(1).getDateCellValue();
+ String date = DateUtil.format(dateItem, "yyyy-MM-dd");
+ long startTime = dateItem.getTime() / 1000;
+ long endTime = DateUtil.parse(date + " 23:59:59", "yyyy-MM-dd HH:mm:ss").getTime() / 1000;
+ payTime = LocalDateTimeUtil.parse(date + " " + row.getCell(2).toString(), "yyyy-MM-dd HH:mm:ss");
+ if (!flowNo.isEmpty() && !orderNo.isEmpty()) {
+ ThinkFtpCheckBill check = thinkFtpCheckBillService.getByOrderNo(orderNo);
+ if (check == null) {
+ ThinkFtpCheckBill thinkFtpCheckBill = new ThinkFtpCheckBill();
+ thinkFtpCheckBill.setDeviceNo(deviceNo);
+ thinkFtpCheckBill.setCardNo(cardNo);
+ thinkFtpCheckBill.setOrderNo(orderNo);
+ thinkFtpCheckBill.setAmount(BigDecimal.valueOf(amount));
+ thinkFtpCheckBill.setSettleAmount(BigDecimal.valueOf(settleAmount));
+ thinkFtpCheckBill.setFeeAmount(BigDecimal.valueOf(feeAmount));
+ thinkFtpCheckBill.setPaidAmount(BigDecimal.valueOf(paidAmount));
+ thinkFtpCheckBill.setRefNo(refNo);
+ thinkFtpCheckBill.setFlowNo(flowNo);
+ thinkFtpCheckBill.setCardType(cardType);
+ thinkFtpCheckBill.setPostCardType(postCardType);
+ thinkFtpCheckBill.setPayType(payType);
+ thinkFtpCheckBill.setPayTime(payTime);
+ if (payTime != null) {
+ thinkFtpCheckBill.setPayTime(payTime);
+ }
+ thinkFtpCheckBillList.add(thinkFtpCheckBill);
+ }
+ ThinkOrder thinkOrder = thinkOrderService.getUnCheckBillByWechatCode(flowNo, startTime, endTime);
+ if (thinkOrder != null) {
+ BigDecimal price = BigDecimal.valueOf(amount);
+ if (thinkOrder.getPayPrice().compareTo(price) == 0) {
+ System.out.println("check bill: " + thinkOrder.getOrderNum());
+ thinkOrder.setCheckBill(1);
+ thinkOrderService.updateById(thinkOrder);
+ }
+ }
+ }
+ }
+ }
+ if (!thinkFtpCheckBillList.isEmpty()) {
+ thinkFtpCheckBillService.saveBatch(thinkFtpCheckBillList);
+ }
+ }
+ }
+ }
+ // 断开与FTP服务器的连接
+ ftpClient.logout();
+ ftpClient.disconnect();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("PDF文件下载失败");
+ }
+ }
+}
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java
index 44804fd..ca1849c 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkGoodsOrderController.java
@@ -172,7 +172,8 @@ public class ThinkGoodsOrderController extends BaseController {
// 微信统一下单接口
if (order.getPayType().equals(PAY_TYPE_WECHAT)) {
String desc = order.getInfoList().get(0).getTitle();
- return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), desc, getLoginUser().getOpenid()));
+ return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(),
+ desc, getLoginUser().getOpenid(), "https://gxtyzx-api2.websoft.top/api/think/think-order/notify"));
}
if (order.getPayType().equals(2)) {
updatePay(order, null, order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue());
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java
index 83a3951..dd2e51e 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkInvoiceController.java
@@ -55,7 +55,11 @@ public class ThinkInvoiceController extends BaseController {
@Resource
private ThinkSiteService thinkSiteService;
@Resource
+ private ThinkCardService thinkCardService;
+ @Resource
private RedisUtil redisUtil;
+ @Resource
+ private ThinkRechargeLogService thinkRechargeLogService;
// private final String taxnum = "339901999999142";
// private final String appKey = "SD56531018";
@@ -68,12 +72,17 @@ public class ThinkInvoiceController extends BaseController {
private final String appSecret = "D51901886E454FEF";
private final String sellerTel = "18907712789";
private final String url = "https://sdk.nuonuo.com/open/v1/services";
+ private final String clerk = "刘绍仪";
+ private final String extensionNumber = "6192";
+// private final String clerk = "赵裕璐";
+// private final String extensionNumber = "7426";
@ApiOperation("分页查询")
@GetMapping("/page")
public ApiResult> page(ThinkInvoiceParam param) {
if (param.getForAdmin() == null) param.setUid(getLoginUser().getUid());
// 使用关联查询
+ param.setDeleted(0);
return success(thinkInvoiceService.pageRel(param));
}
@@ -85,7 +94,9 @@ public class ThinkInvoiceController extends BaseController {
@ApiOperation("查询全部")
@GetMapping()
public ApiResult> list(ThinkInvoiceParam param) {
+ if (param.getForAdmin() == null) param.setUid(getLoginUser().getUid());
// 使用关联查询
+ param.setDeleted(0);
return success(thinkInvoiceService.listRel(param));
}
@@ -100,9 +111,11 @@ public class ThinkInvoiceController extends BaseController {
@ApiOperation("添加")
@PostMapping()
public ApiResult> save(@RequestBody ThinkInvoice thinkInvoice) {
+ if (thinkInvoice.getCode() == null || thinkInvoice.getCode().isEmpty())
+ return fail("请输入税号");
thinkInvoice.setIncoiveNum("");
thinkInvoice.setUid(getLoginUser().getUid());
- thinkInvoice.setCode(thinkInvoice.getIncoiveCode());
+// thinkInvoice.setCode(thinkInvoice.getIncoiveCode());
thinkInvoice.setIncoiveNum(RandomUtil.randomString(20));
if (!thinkInvoice.getIsOpen().equals(1)) thinkInvoice.setIsOpen(2);
thinkInvoice.setCreateTime(DateUtil.currentSeconds());
@@ -115,8 +128,10 @@ public class ThinkInvoiceController extends BaseController {
}
} else if (thinkInvoice.getItype().equals(2)) {
if (thinkInvoice.getOid() != null) {
- ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid());
- thinkInvoice.setInfo(thinkUsersVip.getName() + " 微信订单号: " + thinkUsersVip.getWechatOrder());
+// ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid());
+// thinkInvoice.setInfo(thinkUsersVip.getName() + " 微信订单号: " + thinkUsersVip.getWechatOrder());
+ ThinkRechargeLog thinkRechargeLog = thinkRechargeLogService.getById(thinkInvoice.getOid());
+ thinkInvoice.setInfo("订单号: " + thinkRechargeLog.getOrderNum());
}
} else if (thinkInvoice.getItype().equals(4)) {
thinkInvoice.setInfo("租赁发票");
@@ -175,6 +190,9 @@ public class ThinkInvoiceController extends BaseController {
@ApiOperation("发票合开")
@PostMapping("/doInvoiceByList")
public ApiResult> doInvoiceByList(@RequestBody ThinkInvoice thinkInvoice) {
+ if (thinkInvoice.getCode() == null) return fail("请输入税号");
+ String taxCode = thinkInvoice.getCode().replaceAll(" ", "");
+ thinkInvoice.setCode(taxCode);
List thinkInvoiceList = new ArrayList<>();
List thinkOrderList = thinkOrderService.listByIds(thinkInvoice.getOrderIdList());
List thinkOrderInfoList = thinkOrderInfoService.listByOrderIds(thinkInvoice.getOrderIdList());
@@ -182,13 +200,9 @@ public class ThinkInvoiceController extends BaseController {
// startTimeList排序
ThinkOrder firstOrder = thinkOrderList.get(0);
ThinkSite thinkSite = thinkSiteService.getById(firstOrder.getSid());
- String rentStartTime = thinkSite.getRentStartDate();
- String rentEndTime = thinkSite.getRentEndDate();
- if (!startTimeList.isEmpty()) {
- startTimeList.sort(Integer::compareTo);
- rentStartTime = DateUtil.format(DateUtil.date((startTimeList.get(0) * 1000L)), "yyyy-MM-dd");
- rentEndTime = DateUtil.format(DateUtil.date((startTimeList.get(startTimeList.size() - 1) * 1000L)), "yyyy-MM-dd");
- }
+ startTimeList = startTimeList.stream().sorted().toList();
+ String rentStartTime = DateUtil.format(DateUtil.date((startTimeList.get(0) * 1000L)), "yyyy-MM-dd");
+ String rentEndTime = DateUtil.format(DateUtil.date((startTimeList.get(startTimeList.size() - 1) * 1000L)), "yyyy-MM-dd");
String invoiceNum = RandomUtil.randomString(20);
for (Integer orderId : thinkInvoice.getOrderIdList()) {
ThinkOrder thinkOrder = thinkOrderList.stream().filter(o -> o.getId().equals(orderId)).findFirst().orElse(null);
@@ -220,6 +234,10 @@ public class ThinkInvoiceController extends BaseController {
thinkInvoiceList.add(thinkInvoice1);
}
}
+ for (ThinkOrder thinkOrder : thinkOrderList) {
+ thinkOrder.setIsInvoice(1);
+ }
+ thinkOrderService.updateBatchById(thinkOrderList);
thinkInvoiceService.saveBatch(thinkInvoiceList);
NNOpenSDK sdk = NNOpenSDK.getIntance();
String method = "nuonuo.OpeMplatform.requestBillingNew";//API方法名
@@ -234,7 +252,7 @@ public class ThinkInvoiceController extends BaseController {
order.setSalerTel(sellerTel);
order.setOrderNo(invoiceNum);
order.setInvoiceDate(DateUtil.now());
- order.setClerk("赵裕璐");
+ order.setClerk(clerk);
order.setPayee("班嘉良");
order.setChecker("蓝蕙孚");
order.setShowCheckerType("1");
@@ -244,10 +262,8 @@ public class ThinkInvoiceController extends BaseController {
goods.setGoodsName("*经营租赁*场地费");
goods.setGoodsCode("3040502029902");
- // 不含税单价
- final BigDecimal taxExcludedAmount = thinkInvoice.getPrice().multiply(new BigDecimal("0.95")).setScale(2, RoundingMode.HALF_UP);
- goods.setPrice(taxExcludedAmount.toString());
- goods.setNum("1");
+// goods.setPrice(thinkInvoice.getPrice().toString());
+ goods.setNum(thinkSite.getSize().toString());
goods.setWithTaxFlag("0");
goods.setDField1("无");
goods.setDField2("无");
@@ -256,21 +272,29 @@ public class ThinkInvoiceController extends BaseController {
goods.setDField5("无");
goods.setTaxRate("0.05");
goods.setFavouredPolicyFlag("09");
- final BigDecimal tax = thinkInvoice.getPrice().multiply(new BigDecimal("0.05")).setScale(2, RoundingMode.HALF_UP);
+
+ BigDecimal taxRate = BigDecimal.valueOf(0.05);
+ goods.setPrice(thinkInvoice.getPrice()
+ .divide(BigDecimal.valueOf(1.05), 8, RoundingMode.HALF_UP)
+ .divide(thinkSite.getSize(), 8, RoundingMode.HALF_UP).toString());
+ final BigDecimal tax = thinkInvoice.getPrice().divide(BigDecimal.valueOf(1.05), 2, RoundingMode.HALF_UP)
+ .multiply(taxRate).setScale(2, RoundingMode.DOWN);
goods.setTax(tax.toString());
+ goods.setTaxIncludedAmount(thinkInvoice.getPrice().toString());
+ goods.setTaxExcludedAmount(thinkInvoice.getPrice().subtract(tax).toString());
order.setInvoiceDetail(goods);
NuoNuoRealPropertyRentInfo nuoNuoRealPropertyRentInfo = new NuoNuoRealPropertyRentInfo();
nuoNuoRealPropertyRentInfo.setRealPropertyAddress(thinkSite.getProvince() + thinkSite.getCity() + thinkSite.getRegion());
nuoNuoRealPropertyRentInfo.setDetailAddress(thinkSite.getAddress());
- nuoNuoRealPropertyRentInfo.setRealPropertyCertificate(thinkSite.getRealPropertyCertificate());
+ nuoNuoRealPropertyRentInfo.setRealPropertyCertificate("无");
nuoNuoRealPropertyRentInfo.setRentStartDate(rentStartTime);
nuoNuoRealPropertyRentInfo.setRentEndDate(rentEndTime);
nuoNuoRealPropertyRentInfo.setCrossCityFlag("0");
nuoNuoRealPropertyRentInfo.setUnit("2");
order.setRealPropertyRentInfo(nuoNuoRealPropertyRentInfo);
order.setSpecificFactor("6");
- order.setExtensionNumber("7426");
+ order.setExtensionNumber(extensionNumber);
nuoNuo.setOrder(order);
@@ -278,12 +302,12 @@ public class ThinkInvoiceController extends BaseController {
String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码
String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API
- System.out.println("json = " + json);
+// System.out.println("json = " + json);
if (StrUtil.isNotBlank(json)) {
final JSONObject jsonObject = JSONObject.parseObject(json);
final String code = jsonObject.getString("code");
final String result = jsonObject.getString("result");
- System.out.println("jsonObject = " + jsonObject);
+// System.out.println("jsonObject = " + jsonObject);
if (code.equals("E0000")) {
final JSONObject resNo = JSONObject.parseObject(result);
final String invoiceSerialNum = resNo.getString("invoiceSerialNum");
@@ -296,20 +320,27 @@ public class ThinkInvoiceController extends BaseController {
}
thinkInvoiceService.updateBatchById(thinkInvoiceList);
return success("发票开具成功", json);
+ } else {
+ return fail(jsonObject.getString("describe"));
}
}
return fail("开票失败");
}
-
@ApiOperation("开具发票")
@PostMapping("/doInvoice")
public ApiResult> doInvoice(@RequestBody ThinkInvoice thinkInvoice) {
+ if (thinkInvoice.getCode() != null) {
+ String code = thinkInvoice.getCode().replaceAll(" ", "");
+ thinkInvoice.setCode(code);
+ }
thinkInvoice.setStatus(1);
if (thinkInvoice.getId() != null) thinkInvoiceService.updateById(thinkInvoice);
else {
if (thinkInvoice.getOrderNum() == null) return fail("非法请求");
- ThinkInvoice check = thinkInvoiceService.getByOrderNum(thinkInvoice.getOrderNum());
+ if (thinkInvoice.getOid() == null) return fail("非法请求");
+ if (thinkInvoice.getItype() == null) return fail("非法请求");
+ ThinkInvoice check = thinkInvoiceService.getByOidNType(thinkInvoice.getOid(), thinkInvoice.getItype());
if (check != null) return fail("该订单已开过发票");
thinkInvoice.setIncoiveCode("91450100737617400R");
thinkInvoice.setCreateTime(System.currentTimeMillis() / 1000);
@@ -317,10 +348,12 @@ public class ThinkInvoiceController extends BaseController {
if (thinkInvoice.getIncoiveNum() == null) thinkInvoice.setIncoiveNum("");
if (thinkInvoice.getEmail() == null) thinkInvoice.setEmail("");
if (thinkInvoice.getIsOpen() == null) thinkInvoice.setIsOpen(2);
+// thinkInvoice.setOrderNum(RandomUtil.randomString(20));
thinkInvoiceService.save(thinkInvoice);
}
String json = newInvoice(thinkInvoice);
if (!json.isEmpty()) return success("开票成功", json);
+
return fail("发票开具失败");
}
@@ -343,6 +376,11 @@ public class ThinkInvoiceController extends BaseController {
System.out.println("invoice retry res:" + result);
}
+ @PostMapping("/getRes")
+ public ApiResult> getRes(@RequestBody ThinkInvoice thinkInvoice) {
+ return success("查询成功", getRes(thinkInvoice.getId()));
+ }
+
public String getRes(Integer id) {
final ThinkInvoice thinkInvoice = thinkInvoiceService.getById(id);
NNOpenSDK sdk = NNOpenSDK.getIntance();
@@ -367,29 +405,53 @@ public class ThinkInvoiceController extends BaseController {
JSONArray jsonArray = JSONArray.parseArray(body);
for (int i = 0; i < jsonArray.size(); i++) {
String status = jsonArray.getJSONObject(i).getString("status");
+ String pdfUrl = jsonArray.getJSONObject(i).getString("pdfUrl");
+ String xmlUrl = jsonArray.getJSONObject(i).getString("xmlUrl");
if (status.equals("2")) {
thinkInvoiceService.update(
new LambdaUpdateWrapper()
.eq(ThinkInvoice::getIncoiveNum, thinkInvoice.getIncoiveNum())
.set(ThinkInvoice::getIsOpen, 1)
+ .set(ThinkInvoice::getUrl, pdfUrl)
+ .set(ThinkInvoice::getXmlUrl, xmlUrl)
);
} else if (status.equals("22")) {
retry(id);
}
}
return body;
- }else if(code.equals("E9500")) {
+ } else if (code.equals("E9500")) {
newInvoice(thinkInvoice);
}
return result;
}
+ @ApiOperation("发票红冲")
+ @PostMapping("/invoiceRed")
+ public ApiResult> invoiceRed(@RequestBody ThinkInvoice thinkInvoice) {
+ NNOpenSDK sdk = NNOpenSDK.getIntance();
+ String method = "nuonuo.OpeMplatform.fastInvoiceRed";//API方法名
+ String token = getInvoiceToken();
+ ThinkInvoice thinkInvoice1 = thinkInvoiceService.getById(thinkInvoice.getId());
+ final NuoNuo nuoNuo = new NuoNuo();
+ final NuoNuoOrder order = new NuoNuoOrder();
+ order.setOrderNo(thinkInvoice1.getOrderNum());
+ order.setTaxNum(taxnum);
+ order.setBillNo(taxnum);
+ String content = JSONUtil.toJSONString(nuoNuo);//API私有请求参数
+ String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码
+
+ String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API
+// System.out.println("json = " + json);
+ return success("操作成功");
+ }
+
private String newInvoice(ThinkInvoice thinkInvoice) {
// 开票接口
NNOpenSDK sdk = NNOpenSDK.getIntance();
String method = "nuonuo.OpeMplatform.requestBillingNew";//API方法名
String token = getInvoiceToken();
-
+// String invoiceNum = RandomUtil.randomString(20);
final NuoNuo nuoNuo = new NuoNuo();
final NuoNuoOrder order = new NuoNuoOrder();
order.setBuyerName(thinkInvoice.getName());
@@ -399,7 +461,7 @@ public class ThinkInvoiceController extends BaseController {
order.setSalerTel(sellerTel);
order.setOrderNo((thinkInvoice.getOrderNum() == null || thinkInvoice.getOrderNum().isEmpty()) ? thinkInvoice.getIncoiveNum() : thinkInvoice.getOrderNum());
order.setInvoiceDate(DateUtil.now());
- order.setClerk("赵裕璐");
+ order.setClerk(clerk);
order.setPayee("班嘉良");
order.setChecker("蓝蕙孚");
order.setShowCheckerType("1");
@@ -412,7 +474,6 @@ public class ThinkInvoiceController extends BaseController {
goods.setGoodsName("*预付卡销售*预付卡");
}
- goods.setWithTaxFlag("1");
goods.setDField1("无");
goods.setDField2("无");
goods.setDField3("无");
@@ -420,20 +481,22 @@ public class ThinkInvoiceController extends BaseController {
goods.setDField5("无");
BigDecimal taxRate = BigDecimal.valueOf(0.05);
-
if (thinkInvoice.getItype().equals(1)) {
List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkInvoice.getOid());
String startTime = DateUtil.format(DateUtil.date((thinkOrderInfoList.get(0).getStartTime() * 1000L)), "yyyy-MM-dd");
goods.setTaxRate(taxRate.toString());
- final BigDecimal tax = thinkInvoice.getPrice().multiply(taxRate).setScale(2, RoundingMode.HALF_UP);
+ final BigDecimal tax = thinkInvoice.getPrice().divide(BigDecimal.valueOf(1.05), 2, RoundingMode.HALF_UP)
+ .multiply(taxRate).setScale(2, RoundingMode.DOWN);
goods.setFavouredPolicyFlag("09");
final ThinkOrder thinkOrder = thinkOrderService.getById(thinkInvoice.getOid());
ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid());
goods.setPrice(thinkInvoice.getPrice()
- .divide(BigDecimal.valueOf(1.05), 2, RoundingMode.HALF_UP)
- .divide(thinkSite.getSize(), 2, RoundingMode.HALF_UP)
- .setScale(2, RoundingMode.HALF_UP).toString());
+ .divide(BigDecimal.valueOf(1.05), 8, RoundingMode.HALF_UP)
+ .divide(thinkSite.getSize(), 8, RoundingMode.HALF_UP).toString());
+// goods.setPrice(thinkInvoice.getPrice().toString());
goods.setTax(tax.toString());
+ goods.setTaxIncludedAmount(thinkInvoice.getPrice().toString());
+ goods.setTaxExcludedAmount(thinkInvoice.getPrice().subtract(tax).toString());
goods.setGoodsCode("3040502029902");
NuoNuoRealPropertyRentInfo nuoNuoRealPropertyRentInfo = new NuoNuoRealPropertyRentInfo();
goods.setNum(thinkSite.getSize().toString());
@@ -446,6 +509,7 @@ public class ThinkInvoiceController extends BaseController {
nuoNuoRealPropertyRentInfo.setUnit("2");
order.setRealPropertyRentInfo(nuoNuoRealPropertyRentInfo);
order.setSpecificFactor("6");
+ goods.setWithTaxFlag("0");
} else {
goods.setTaxRate("0.00");
goods.setZeroRateFlag("2");
@@ -454,9 +518,10 @@ public class ThinkInvoiceController extends BaseController {
goods.setPrice(thinkInvoice.getPrice().setScale(2, RoundingMode.HALF_UP).toString());
goods.setTax("0.00");
goods.setGoodsCode("6010000000000000000");
+ goods.setWithTaxFlag("1");
}
order.setInvoiceDetail(goods);
- order.setExtensionNumber("7426");
+ order.setExtensionNumber(extensionNumber); // 13807717477
nuoNuo.setOrder(order);
@@ -464,12 +529,12 @@ public class ThinkInvoiceController extends BaseController {
String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码
String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API
- System.out.println("json = " + json);
+// System.out.println("json = " + json);
if (StrUtil.isNotBlank(json)) {
final JSONObject jsonObject = JSONObject.parseObject(json);
final String code = jsonObject.getString("code");
final String result = jsonObject.getString("result");
- System.out.println("jsonObject = " + jsonObject);
+ System.out.println("invoice jsonObject = " + jsonObject);
if (code.equals("E0000")) {
final JSONObject resNo = JSONObject.parseObject(result);
final String invoiceSerialNum = resNo.getString("invoiceSerialNum");
@@ -478,11 +543,15 @@ public class ThinkInvoiceController extends BaseController {
thinkOrder.setIsInvoice(1);
thinkOrderService.updateById(thinkOrder);
} else if (thinkInvoice.getItype().equals(2)) {
- final ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkInvoice.getOid());
- thinkUsersVip.setIsInvoice(1);
- thinkUsersVipService.updateById(thinkUsersVip);
+ final ThinkRechargeLog thinkRechargeLog = thinkRechargeLogService.getById(thinkInvoice.getOid());
+ thinkRechargeLog.setIsInvoice(1);
+ thinkRechargeLogService.updateById(thinkRechargeLog);
+ } else if (thinkInvoice.getItype().equals(3)) {
+ ThinkCard thinkCard = thinkCardService.getById(thinkInvoice.getOid());
+ thinkCard.setIsInvoice(1);
+ thinkCardService.updateById(thinkCard);
}
- System.out.println("invoiceSerialNum = " + invoiceSerialNum);
+// System.out.println("invoiceSerialNum = " + invoiceSerialNum);
thinkInvoice.setIncoiveNum(invoiceSerialNum);
getRes(thinkInvoice.getId());
// thinkInvoice.setIsOpen(1);
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java
index f70eb42..da94895 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkMachineOpenLogController.java
@@ -66,7 +66,7 @@ public class ThinkMachineOpenLogController extends BaseController {
String[] qrcode = thinkMachineOpenLog.getQrcode().split(",");
for (String s : qrcode) {
Map res = thinkOrderService.getByQrCode(s, false);
- System.out.println(res);
+// System.out.println(res);
ThinkOrder thinkOrder = (ThinkOrder) res.get("data");
if (thinkOrder != null) {
ThinkMachineOpenLog openLog = thinkMachineOpenLogService.getByOrderId(thinkOrder.getId());
diff --git a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java
index cc5c90d..5d904ce 100644
--- a/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java
+++ b/src/main/java/com/gxwebsoft/think/controller/ThinkOrderController.java
@@ -21,6 +21,7 @@ import com.gxwebsoft.common.system.entity.FileRecord;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.think.entity.*;
import com.gxwebsoft.think.param.ThinkOrderParam;
+import com.gxwebsoft.think.param.ThinkVipParam;
import com.gxwebsoft.think.service.*;
import com.wechat.pay.java.core.notification.NotificationConfig;
import com.wechat.pay.java.core.notification.NotificationParser;
@@ -50,6 +51,7 @@ import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.gxwebsoft.think.consts.OrderStatusConsts.PAY_TYPE_WECHAT;
@@ -88,6 +90,10 @@ public class ThinkOrderController extends BaseController {
private ThinkVipService thinkVipService;
@Resource
private ThinkOrderRefundLogService thinkOrderRefundLogService;
+ @Resource
+ private ThinkOrderOffCheckService thinkOrderOffCheckService;
+ @Resource
+ private ThinkCardBalanceService thinkCardBalanceService;
@Autowired
private RedisUtil redisUtil;
@@ -102,50 +108,36 @@ public class ThinkOrderController extends BaseController {
// private NotificationConfig config;
- @Deprecated
@ApiOperation("修复数据")
- @GetMapping("/fixInvoiceData")
+ @GetMapping("/fixCardData")
public ApiResult> fixInvoiceData() {
List thinkOrderList = thinkOrderService.list(
new LambdaQueryWrapper()
.eq(ThinkOrder::getPayStatus, 1)
- .eq(ThinkOrder::getOrderStatus, 1)
- .eq(ThinkOrder::getIsInvoice, 3)
+ .isNull(ThinkOrder::getCode)
.gt(ThinkOrder::getCreateTime, 1742400000)
- .ne(ThinkOrder::getUid, 0)
+ .ne(ThinkOrder::getCid, 0)
+ .last("limit 500")
);
List updateList = new ArrayList<>();
- for (ThinkOrder thinkOrder : thinkOrderList) {
- if (thinkOrder.getCid() != 0) {
- ThinkCard thinkCard = thinkCardService.getById(thinkOrder.getCid());
- if (thinkCard != null && thinkCard.getIsInvoice() == 2) {
- thinkOrder.setIsInvoice(2);
+ Set cidList = new HashSet<>();
+ if (!thinkOrderList.isEmpty()) {
+ for (ThinkOrder thinkOrder : thinkOrderList) {
+ cidList.add(thinkOrder.getCid());
+ }
+ List thinkCardList = thinkCardService.listByIds(cidList.stream().toList());
+ for (ThinkOrder thinkOrder : thinkOrderList) {
+ ThinkCard thinkCard = thinkCardList.stream().filter(d -> d.getId().equals(thinkOrder.getCid())).findFirst().orElse(null);
+ if (thinkCard != null) {
+ thinkOrder.setCode(thinkCard.getCode());
+ if (thinkOrder.getPhone() == null) {
+ thinkOrder.setPhone(thinkCard.getPhone());
+ }
updateList.add(thinkOrder);
}
- } else {
- if (thinkOrder.getCode() != null) {
- ThinkCard thinkCard = thinkCardService.getByCode(thinkOrder.getCode());
- if (thinkCard != null && thinkCard.getIsInvoice() == 2) {
- thinkOrder.setIsInvoice(2);
- updateList.add(thinkOrder);
- }
- } else {
- if (thinkOrder.getVid() != 0) {
- ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkOrder.getVid());
- if (thinkUsersVip != null && thinkUsersVip.getIsInvoice() == 2) {
- thinkOrder.setIsInvoice(2);
- updateList.add(thinkOrder);
- }
- } else {
- if (thinkOrder.getWechatOrder() != null) {
- thinkOrder.setIsInvoice(2);
- updateList.add(thinkOrder);
- }
- }
- }
}
+ if (!updateList.isEmpty()) thinkOrderService.updateBatchById(updateList);
}
- if (!updateList.isEmpty()) thinkOrderService.updateBatchById(updateList);
return success();
}
@@ -153,7 +145,6 @@ public class ThinkOrderController extends BaseController {
@ApiOperation("微信通知")
@PostMapping("/notify")
public String notify(@RequestBody String body, @RequestHeader Map header) {
- System.out.println("支付通知 >>>>> ");
com.wechat.pay.java.core.notification.RequestParam requestParam = new RequestParam.Builder()
.serialNumber(header.get("wechatpay-serial").toString())
.nonce(header.get("wechatpay-nonce").toString())
@@ -164,11 +155,26 @@ public class ThinkOrderController extends BaseController {
NotificationConfig config = wechatConfigService.getNotificationConfig();
NotificationParser parser = new NotificationParser(config);
com.wechat.pay.java.service.payments.model.Transaction transaction = parser.parse(requestParam, com.wechat.pay.java.service.payments.model.Transaction.class);
+ System.out.println("支付通知 >>>>> " + transaction.toString());
// 查询订单信息
final ThinkOrder order = thinkOrderService.getByOrderNum(transaction.getOutTradeNo());
if (order == null) return "订单不存在";
if (order.getPayStatus().equals(2)) {
- updatePay(order, transaction.getTransactionId(), transaction.getAmount().getPayerTotal());
+ // 已取消的退回
+ if (order.getOrderStatus().equals(3)) {
+ ThinkOrderRefundLog thinkOrderRefundLog = new ThinkOrderRefundLog();
+ thinkOrderRefundLog.setOid(order.getId());
+ thinkOrderRefundLog.setRefundNo("R" + order.getOrderNum());
+ thinkOrderRefundLog.setType(0);
+ thinkOrderRefundLog.setRefundAmount(order.getPayPrice());
+ thinkOrderRefundLog.setUid(order.getUid());
+ thinkOrderRefundLog.setCreateTime(LocalDateTimeUtil.now());
+ thinkOrderRefundLogService.save(thinkOrderRefundLog);
+ thinkOrderRefundLog.setOrder(order);
+ thinkOrderService.refund(thinkOrderRefundLog);
+ } else {
+ updatePay(order, transaction.getTransactionId(), transaction.getAmount().getPayerTotal());
+ }
}
return "订单已支付";
}
@@ -208,20 +214,69 @@ public class ThinkOrderController extends BaseController {
thinkVipCardsBills.setUsed(1);
thinkVipCardsBills.setDate(DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd"));
// VIP卡
- if (order.getVid() != null) {
+ if (order.getVid() != null && !order.getVid().equals(0)) {
ThinkUsersVip usersVip = thinkUsersVipService.getById(order.getVid());
+ ThinkCardBalance thinkCardBalance = thinkCardBalanceService.getByVid(usersVip.getId());
+ if (thinkCardBalance != null) {
+ if (!thinkCardBalance.getType().equals(5)) {
+ BigDecimal payPrice = thinkCardBalance.getReduceEach().multiply(BigDecimal.valueOf(num));
+ order.setPayPrice(payPrice);
+ order.setReducePrice(order.getTotalPrice().subtract(payPrice));
+ thinkOrderService.updateById(order);
+ }
+ thinkCardBalance.setBalance(thinkCardBalance.getBalance().subtract(order.getPayPrice()));
+ thinkCardBalanceService.updateById(thinkCardBalance);
+ } else {
+ ThinkVip thinkVip = thinkVipService.getById(usersVip.getVid());
+ BigDecimal reduceEach = thinkCardBalanceService.getThinkCardBalance(thinkVip);
+
+ ThinkCardBalance thinkCardBalance1 = new ThinkCardBalance();
+ thinkCardBalance1.setVid(usersVip.getId());
+ thinkCardBalance1.setUid(usersVip.getUid());
+ thinkCardBalance1.setBalance(usersVip.getRemainingMoney().subtract(reduceEach));
+ thinkCardBalance1.setReduceEach(reduceEach);
+ thinkCardBalance1.setType(usersVip.getType());
+ thinkCardBalance1.setDiscount(usersVip.getDiscount());
+ thinkCardBalance1.setVipId(usersVip.getVid());
+ thinkCardBalance1.setUpdateTime(DateUtil.currentSeconds());
+ thinkCardBalance1.setCreateTime(DateUtil.currentSeconds());
+ thinkCardBalanceService.save(thinkCardBalance1);
+ if (!thinkCardBalance1.getType().equals(5)) {
+ BigDecimal payPrice = thinkCardBalance1.getReduceEach().multiply(BigDecimal.valueOf(num));
+ order.setPayPrice(payPrice);
+ order.setReducePrice(order.getTotalPrice().subtract(payPrice));
+ }
+ thinkOrderService.updateById(order);
+ }
if (usersVip.getType().equals(5)) {
BigDecimal newBalance = usersVip.getRemainingMoney().subtract(order.getPayPrice());
usersVip.setRemainingMoney(newBalance);
thinkVipCardsBills.setAmount(order.getPayPrice());
- } else if (usersVip.getType().equals(4)) {
- BigDecimal newBalance = usersVip.getRemainingMoney().subtract(usersVip.getEachMoney());
- usersVip.setRemainingMoney(newBalance);
- usersVip.setNum(usersVip.getNum() - num);
- thinkVipCardsBills.setAmount(usersVip.getEachMoney());
} else {
- usersVip.setNum(usersVip.getNum() - num);
- thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP));
+ int remainNum = usersVip.getNum() - num;
+ if (remainNum < 0) remainNum = 0;
+ usersVip.setNum(remainNum);
+ if (usersVip.getCount() > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP));
+ } else if (usersVip.getCount() == 0) {
+ if (usersVip.getMode().equals(0)) {
+ if (usersVip.getMonth() > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getMonth() * 30), RoundingMode.HALF_UP));
+ } else {
+ if (usersVip.getTerm() > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getTerm() * 365L), RoundingMode.HALF_UP));
+ }
+ }
+ } else {
+ long remainDay = DateUtil.betweenDay(new Date(), DateUtil.date(usersVip.getExpireTime() * 1000), false);
+ if (remainDay > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP));
+ }
+ }
+ thinkVipCardsBills.setAmount(BigDecimal.ZERO);
+ } else {
+ thinkVipCardsBills.setAmount(usersVip.getEachMoney());
+ }
}
// 更新会员卡使用时间
usersVip.setUseTime(DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000);
@@ -240,13 +295,69 @@ public class ThinkOrderController extends BaseController {
}
}
if (card != null) {
+ ThinkVip usersVip = thinkVipService.getById(card.getVid());
+ ThinkCardBalance thinkCardBalance = thinkCardBalanceService.getByCid(card.getId());
+ if (thinkCardBalance != null) {
+ if (!thinkCardBalance.getType().equals(5)) {
+ BigDecimal payPrice = thinkCardBalance.getReduceEach().multiply(BigDecimal.valueOf(num));
+ order.setPayPrice(payPrice);
+ order.setReducePrice(order.getTotalPrice().subtract(payPrice));
+ thinkOrderService.updateById(order);
+ }
+ thinkCardBalance.setBalance(thinkCardBalance.getBalance().subtract(order.getPayPrice()));
+ thinkCardBalanceService.updateById(thinkCardBalance);
+ } else {
+ BigDecimal reduceEach = thinkCardBalanceService.getThinkCardBalance(usersVip);
+ ThinkCardBalance thinkCardBalance1 = new ThinkCardBalance();
+ thinkCardBalance1.setCid(card.getId());
+ thinkCardBalance1.setUid(card.getUid());
+ thinkCardBalance1.setBalance(card.getRemainingMoney().subtract(reduceEach));
+ thinkCardBalance1.setReduceEach(reduceEach);
+ thinkCardBalance1.setType(usersVip.getType());
+ thinkCardBalance1.setDiscount(usersVip.getDiscount());
+ thinkCardBalance1.setVipId(card.getVid());
+ thinkCardBalance1.setUpdateTime(DateUtil.currentSeconds());
+ thinkCardBalance1.setCreateTime(DateUtil.currentSeconds());
+ thinkCardBalanceService.save(thinkCardBalance1);
+
+ if (!thinkCardBalance1.getType().equals(5)) {
+ BigDecimal payPrice = thinkCardBalance1.getReduceEach().multiply(BigDecimal.valueOf(num));
+ order.setPayPrice(payPrice);
+ order.setReducePrice(order.getTotalPrice().subtract(payPrice));
+ }
+ thinkOrderService.updateById(order);
+ }
+
if (card.getType().equals(5) || card.getType().equals(4)) {
BigDecimal newBalance = card.getRemainingMoney().subtract(order.getPayPrice());
thinkVipCardsBills.setAmount(order.getPayPrice());
card.setRemainingMoney(newBalance);
} else if (card.getType().equals(2)) {
- card.setNum(card.getNum() - num);
- thinkVipCardsBills.setAmount(card.getPrice().divide(BigDecimal.valueOf(card.getCount()), RoundingMode.HALF_UP));
+ int remainNum = card.getNum() - num;
+ if (remainNum < 0) remainNum = 0;
+ card.setNum(remainNum);
+// thinkVipCardsBills.setAmount(card.getPrice().divide(BigDecimal.valueOf(card.getCount()), RoundingMode.HALF_UP));
+ if (usersVip.getCount() > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getCount()), RoundingMode.HALF_UP));
+ } else if (usersVip.getCount() == 0) {
+ if (usersVip.getMode().equals(0)) {
+ if (usersVip.getMonth() > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getMonth() * 30), RoundingMode.HALF_UP));
+ } else {
+ if (usersVip.getTerm() > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(usersVip.getTerm() * 365L), RoundingMode.HALF_UP));
+ }
+ }
+ } else {
+ long remainDay = DateUtil.betweenDay(new Date(), DateUtil.date(card.getExpireTime() * 1000), false);
+ if (remainDay > 0) {
+ thinkVipCardsBills.setAmount(usersVip.getPrice().divide(BigDecimal.valueOf(remainDay), RoundingMode.HALF_UP));
+ }
+ }
+ thinkVipCardsBills.setAmount(BigDecimal.ZERO);
+ } else {
+ thinkVipCardsBills.setAmount(usersVip.getEachMoney());
+ }
}
// 更新会员卡使用时间
card.setUseTime(DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000);
@@ -256,9 +367,24 @@ public class ThinkOrderController extends BaseController {
saveBill = true;
}
+ if (order.getPayType().equals(12)) {
+ order.setPayPrice(BigDecimal.ZERO);
+ order.setReducePrice(order.getTotalPrice());
+ thinkOrderService.updateById(order);
+ }
+
if (saveBill) thinkVipCardsBillsService.addLog(thinkVipCardsBills);
}
+ @ApiOperation("设置下单延时")
+ @PostMapping("/setInterval")
+ public ApiResult> setInterval() {
+ User user = getLoginUser();
+ if (user == null) return fail("请先登录");
+ redisUtil.set("think:order:setPause:" + user.getUid(), DateUtil.currentSeconds(), 7L, TimeUnit.SECONDS);
+ return success();
+ }
+
@ApiOperation("分页查询")
@GetMapping("/page")
public ApiResult> page(ThinkOrderParam param) {
@@ -296,7 +422,11 @@ public class ThinkOrderController extends BaseController {
@ApiOperation("查询全部")
@GetMapping()
- public ApiResult> list(ThinkOrderParam param) {
+ public ApiResult> list(ThinkOrderParam param) {
+ if (param.getForAdmin() == null) {
+ if (getLoginUser() == null) return fail("请先登录");
+ param.setUid(getLoginUser().getUid());
+ }
// 使用关联查询
return success(thinkOrderService.listRel(param));
}
@@ -312,8 +442,8 @@ public class ThinkOrderController extends BaseController {
if (order.getVid() != null && !order.getVid().equals(0)) {
order.setThinkVip(thinkUsersVipService.getById(order.getVid()));
}
+ String secretKey = redisUtil.get("secretKey_10150");
if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) {
- String secretKey = redisUtil.get("secretKey_10150");
byte[] key = null;
if (secretKey == null) {
key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
@@ -332,6 +462,8 @@ public class ThinkOrderController extends BaseController {
order.setSiteName(thinkSite.getName());
List thinkOrderInfoList = thinkOrderInfoService.listInOrder(order.getId());
StringBuilder dateTimeList = new StringBuilder();
+ int num = 0;
+ List qrCodeList = new ArrayList<>();
if (!thinkOrderInfoList.isEmpty()) {
for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) {
String dateTime = thinkOrderInfo.getDateTime();
@@ -341,9 +473,26 @@ public class ThinkOrderController extends BaseController {
} else {
dateTimeList.append(",").append(dateTime);
}
+ num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum() - thinkOrderInfo.getUsedNum();
}
order.setDateTime(dateTimeList.toString());
}
+ if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) {
+ for (int i = 0; i < num; i++) {
+ byte[] key = null;
+ if (secretKey == null) {
+ key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
+ redisUtil.set("secretKey_10150", Base64.getEncoder().encodeToString(key));
+ } else {
+ key = Base64.getDecoder().decode(secretKey);
+ }
+ SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
+ long timestamp = (int) (System.currentTimeMillis() / 1000) + i;
+ String qr = id + "_" + timestamp + "_none_forDevice";
+ qrCodeList.add(aes.encryptHex(qr));
+ }
+ order.setQrCodeList(qrCodeList);
+ }
return success(order);
}
@@ -366,8 +515,8 @@ public class ThinkOrderController extends BaseController {
User admin = requestUtil.getByUserId(order.getAid());
if (admin != null) order.setAdminName(admin.getRealName());
}
+ String secretKey = redisUtil.get("secretKey_10150");
if (order.getPayStatus().equals(1) && order.getOrderStatus().equals(2)) {
- String secretKey = redisUtil.get("secretKey_10150");
byte[] key = null;
if (secretKey == null) {
key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
@@ -386,6 +535,8 @@ public class ThinkOrderController extends BaseController {
order.setSiteName(thinkSite.getName());
List thinkOrderInfoList = thinkOrderInfoService.listInOrder(order.getId());
StringBuilder dateTimeList = new StringBuilder();
+ List qrCodeList = new ArrayList<>();
+ int num = 0;
if (!thinkOrderInfoList.isEmpty()) {
for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) {
String dateTime = thinkOrderInfo.getDateTime();
@@ -395,9 +546,28 @@ public class ThinkOrderController extends BaseController {
} else {
dateTimeList.append(",").append(dateTime);
}
+ num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum() - thinkOrderInfo.getUsedNum();
}
order.setDateTime(dateTimeList.toString());
}
+ for (int i = 0; i < num; i++) {
+ byte[] key = null;
+ if (secretKey == null) {
+ key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
+ redisUtil.set("secretKey_10150", Base64.getEncoder().encodeToString(key));
+ } else {
+ key = Base64.getDecoder().decode(secretKey);
+ }
+ SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
+ long timestamp = (int) (System.currentTimeMillis() / 1000) + i;
+ String qr = id + "_" + timestamp + "_none_forDevice";
+ qrCodeList.add(aes.encryptHex(qr));
+ }
+ order.setQrCodeList(qrCodeList);
+ ThinkOrderOffCheck thinkOrderOffCheck = thinkOrderOffCheckService.getByOrderId(order.getId());
+ if (thinkOrderOffCheck != null) {
+ order.setThinkOrderOffCheck(thinkOrderOffCheck);
+ }
return success(order);
}
@@ -405,26 +575,50 @@ public class ThinkOrderController extends BaseController {
@PostMapping("/check-code")
public ApiResult> getByQrCode(@RequestBody ThinkOrder order) {
if (order.getQrcode() == null || order.getQrcode().isEmpty()) return fail("二维码不能为空");
- if (order.getQrcode().equals("7b3bb393c6434c63553dc42a456b3a2aa215933d4c4621fc8f62b4632913e77c")) {
- return success("核销成功", order.getQrcode());
- }
// 使用关联查询
Map res = thinkOrderService.getByQrCode(order.getQrcode());
if (!(Boolean) res.get("res")) return fail(res.get("msg"));
// 核销动作
ThinkOrder thinkOrder = (ThinkOrder) res.get("data");
- thinkOrder.setOrderStatus(1);
- thinkOrderService.updateById(thinkOrder);
- return success("核销成功", order.getQrcode());
+ int usedNum = 0;
+ int totalNum = 0;
+ redisUtil.set(order.getQrcode(), 1, 1L, TimeUnit.HOURS);
+ String typeStr = "";
+ for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) {
+ usedNum += thinkOrderInfo.getUsedNum() + 1;
+ totalNum += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum();
+ thinkOrderInfo.setUsedNum(thinkOrderInfo.getUsedNum() + 1);
+ thinkOrderInfoService.updateById(thinkOrderInfo);
+
+ if (thinkOrderInfo.getSid() != null && thinkOrderInfo.getSid().equals(37)) {
+ if (thinkOrderInfo.getAdultNum() > 0) typeStr = "adult";
+ else typeStr = "child";
+ }
+ }
+ if (usedNum == totalNum) {
+ thinkOrder.setOrderStatus(1);
+ thinkOrderService.updateById(thinkOrder);
+ }
+ return success("核销成功", order.getQrcode(), typeStr);
}
- @ApiOperation("检查有消息")
+ @ApiOperation("仅检查code有效")
@PostMapping("/check-code-only")
public ApiResult> checkCodeOnly(@RequestBody ThinkOrder order) {
if (order.getQrcode() == null || order.getQrcode().isEmpty()) return fail("二维码不能为空");
Map res = thinkOrderService.getByQrCode(order.getQrcode());
if (!(Boolean) res.get("res")) return fail(res.get("msg"));
- return success("核销成功", order.getQrcode());
+ ThinkOrder thinkOrder = (ThinkOrder) res.get("data");
+ redisUtil.set(order.getQrcode(), 1, 1L, TimeUnit.HOURS);
+ String typeStr = "";
+ for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) {
+ if (thinkOrderInfo.getSid() != null && thinkOrderInfo.getSid().equals(37)) {
+ if (thinkOrderInfo.getAdultNum() > 0) typeStr = "adult";
+ else typeStr = "child";
+ }
+ }
+
+ return success("核销成功", order.getQrcode(), typeStr);
}
@ApiOperation("根据code查询")
@@ -441,40 +635,92 @@ public class ThinkOrderController extends BaseController {
if (user == null) return fail("请先登录");
if (thinkOrder.getPostTime() == null) return fail("非法请求.code:-1");
if (thinkOrder.getSign() == null) return fail("非法请求.code:-1");
+ if (redisUtil.get("think:order:setPause:" + user.getUid()) != null) return fail("请勿频繁操作.code:0");
+ redisUtil.delete("think:order:setPause:" + user.getUid());
+ if (redisUtil.get(thinkOrder.getSign()) != null) return fail("请勿重复提交");
String sign = SecureUtil.md5(thinkOrder.getPostTime() + "wxd38cc38c54fa7370" + thinkOrder.getStartTime() + user.getUid());
if (!Objects.equals(sign, thinkOrder.getSign())) return fail("非法请求.code:-2");
+ if (thinkOrder.getThinkOrderInfos().get(0).getDateTime().contains(";") || thinkOrder.getThinkOrderInfos().get(0).getDateTime().contains(")") || thinkOrder.getThinkOrderInfos().get(0).getDateTime().contains("("))
+ return fail("非法请求.code:-3");
+ redisUtil.set(thinkOrder.getSign(), sign, 1L, TimeUnit.DAYS);
+ String lastSubmitTime = redisUtil.get(thinkOrder.getSign() + "_lastSubmitTime");
+ if (lastSubmitTime != null) {
+ if (DateUtil.currentSeconds() - Integer.parseInt(lastSubmitTime) < 160)
+ return fail("请勿频繁操作.code:1");
+ }
+ redisUtil.set(thinkOrder.getSign() + "_lastSubmitTime", DateUtil.currentSeconds(), 1L, TimeUnit.DAYS);
+ if (!thinkOrder.getSid().equals(37)) {
+ if (redisUtil.get(user.getUid() + "_lastPayOrderTime") != null) {
+ if (DateUtil.currentSeconds() - Integer.parseInt(redisUtil.get(user.getUid() + "_lastPayOrderTime")) < 180)
+ return fail("每次预订需间隔3分钟.code:1");
+ }
+ }
+ redisUtil.set(user.getUid() + "_lastPayOrderTime", DateUtil.currentSeconds(), 3L, TimeUnit.MINUTES);
ThinkSite thinkSite = thinkSiteService.getById(thinkOrder.getSid());
// 8:00 ~ 23:00 不能定
String today = DateUtil.format(new Date(), "yyyy-MM-dd");
if (LocalDateTimeUtil.now().isAfter(LocalDateTime.parse(today + " 23:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
|| LocalDateTimeUtil.now().isBefore(LocalDateTime.parse(today + " 08:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))) {
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("场地预定时间为:8:00-23:00。");
}
+ if (thinkOrder.getThinkOrderInfos().isEmpty()) {
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求.code:5");
+ }
+ if (!thinkOrder.getSid().equals(37)) {
+ for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) {
+ if (redisUtil.get(info.getStartTime().toString() + info.getFid().toString()) != null) {
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("该场地已被预定.code:0");
+ } else {
+ redisUtil.set(info.getStartTime().toString() + info.getFid().toString(), user.getUid(), 1L, TimeUnit.MINUTES);
+ }
+ }
+ }
if (thinkOrder.getSid().equals(37)) {
// 只能定当天
if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum())
return fail("已达上限,无法预定");
} else {
// 只能定7天
- if (thinkOrder.getThinkOrderInfos().isEmpty()) return fail("非法请求.code:5");
Date date = DateUtil.parse(thinkOrder.getThinkOrderInfos().get(0).getTimePeriod(), "yyyy-MM-dd");
long secDiff = DateUtil.between(DateUtil.beginOfDay(DateUtil.date()), date, DateUnit.SECOND);
- if (secDiff >= 604800 && !thinkOrder.getSid().equals(28)) return fail("只能预定7天内的场地");
+ if (secDiff >= 604800 && !thinkOrder.getSid().equals(28)) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("只能预定7天内的场地");
+ }
// 用户限制订单,单个用户(每个id)每个时段只能订两个场地,每次预订间隔要3分钟
// 今天的订单
ThinkOrder todayOrder = thinkOrderService.getTodayOrder(user.getUid());
if (todayOrder != null) {
if ((System.currentTimeMillis() / 1000) - todayOrder.getCreateTime() < 180) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("每次预订需间隔3分钟");
}
}
// 周末场地需要周四17点后才能预定
if (DateUtil.dayOfWeek(date) == 6 || DateUtil.dayOfWeek(date) == 7 || DateUtil.dayOfWeek(date) == 1) {
- if (DateUtil.dayOfWeek(new Date()) == 5 && DateUtil.hour(new Date(), true) < 17)
+ int dayOfWeek = DateUtil.dayOfWeek(new Date());
+ if (dayOfWeek == 5 && DateUtil.hour(new Date(), true) < 17) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("周末场地需要周四17点后才能预定");
- if (DateUtil.dayOfWeek(new Date()) == 2 || DateUtil.dayOfWeek(new Date()) == 3 || DateUtil.dayOfWeek(new Date()) == 4) {
+ }
+ if (dayOfWeek == 2 || dayOfWeek == 3 || dayOfWeek == 4) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("周四17点后才能预定");
}
+ if (dayOfWeek == 6 || dayOfWeek == 7 || dayOfWeek == 1) {
+ if (secDiff > 259200) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("周四17点后才能预定");
+ }
+ }
}
Map siteTimeNumMap = new HashMap<>();
siteTimeNumMap.put(thinkOrder.getThinkOrderInfos().get(0).getStartTime(), 1);
@@ -507,12 +753,14 @@ public class ThinkOrderController extends BaseController {
}
}
// 250327规则修改
- // 周1~周4晚上的18-22时间段、周五~周日全天进行限制。 (限制规则:每个账号订场规则调整成这样,每个时段只能定2个场地)
+ // 周1~周5晚上的18-22时间段、周六~周日全天进行限制。 (限制规则:每个账号订场规则调整成这样,每个时段只能定2个场地)
int day = DateUtil.dayOfWeek(date);
- if ((day == 1 || day == 6 || day == 7)) {
+ if ((day == 1 || day == 7)) {
for (ThinkOrderInfo info : thinkOrder.getThinkOrderInfos()) {
if (bookingNumMap.get(info.getStartTime()) != null) {
if (bookingNumMap.get(info.getStartTime()) + siteTimeNumMap.get(info.getStartTime()) > 2) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("每个时段只能预定两个场地");
}
}
@@ -524,6 +772,8 @@ public class ThinkOrderController extends BaseController {
if (hourInt >= 18) {
if (bookingNumMap.get(info.getStartTime()) != null) {
if (bookingNumMap.get(info.getStartTime()) + siteTimeNumMap.get(info.getStartTime()) > 2) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("每个时段只能预定两个场地");
}
}
@@ -535,14 +785,25 @@ public class ThinkOrderController extends BaseController {
ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info);
if (checkOrder != null) {
ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid());
- if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2)))
- return fail("该场地已被预定");
+ if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2))) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("该场地已被预定.code:1");
+ }
}
}
}
- if (thinkOrder.getPayType().equals(2) && thinkOrder.getVid() == null) return fail("请选择会员卡");
- if (thinkOrder.getPayType().equals(5) && thinkOrder.getCode() == null) return fail("请选择IC卡");
+ if (thinkOrder.getPayType().equals(2) && thinkOrder.getVid() == null) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("请选择会员卡");
+ }
+ if (thinkOrder.getPayType().equals(5) && thinkOrder.getCode() == null) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("请选择IC卡");
+ }
thinkOrder.setCanInvoice(true);
thinkOrder.setOrderNum(IdUtil.getSnowflake().nextIdStr());
BigDecimal totalPrice = BigDecimal.ZERO;
@@ -565,9 +826,9 @@ public class ThinkOrderController extends BaseController {
// 半场
price = siteTime.getPrice();
halfPrice = siteTime.getHalfPrice();
+ String month = DateUtil.format(DateUtil.date((thinkOrderInfo.getStartTime() * 1000L)), "yyyy-MM");
if (siteTime.getPrices() != null && siteTime.getPrices().contains("{")) {
JSONObject prices = JSONUtil.parseObj(siteTime.getPrices());
- String month = DateUtil.format(new Date(), "yyyy-MM");
if (prices.getJSONArray(month) != null) {
String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay());
if (priceStr != null && !priceStr.isEmpty()) price = new BigDecimal(priceStr);
@@ -575,7 +836,6 @@ public class ThinkOrderController extends BaseController {
}
if (siteTime.getHalfPrices() != null && siteTime.getHalfPrices().contains("{")) {
JSONObject prices = JSONUtil.parseObj(siteTime.getHalfPrices());
- String month = DateUtil.format(new Date(), "yyyy-MM");
if (prices.getJSONArray(month) != null) {
String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay());
if (priceStr != null && !priceStr.isEmpty()) halfPrice = new BigDecimal(priceStr);
@@ -586,14 +846,22 @@ public class ThinkOrderController extends BaseController {
thinkOrderInfo.setTimeFlag(now);
// thinkOrderInfo.setIsChildren(0);
if (thinkOrderInfo.getIsChildren().equals(2)) {
- if (thinkOrderInfo.getAdultNum() < 1) return fail("非法请求,code:1");
+ if (thinkOrderInfo.getAdultNum() < 1) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求,code:1");
+ }
if (thinkOrderInfo.getType().equals(2))
totalPrice = totalPrice.add(halfPrice.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum())));
else
totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum())));
num += thinkOrderInfo.getAdultNum();
} else {
- if (thinkOrderInfo.getChildrenNum() < 1) return fail("非法请求,code:2");
+ if (thinkOrderInfo.getChildrenNum() < 1) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求,code:2");
+ }
thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice());
totalPrice = totalPrice.add(siteTime.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum())));
num += thinkOrderInfo.getChildrenNum();
@@ -604,7 +872,11 @@ public class ThinkOrderController extends BaseController {
thinkOrderInfo.setPrice(price);
}
// reducePrice = reducePrice.add(thinkOrderInfo.getChildrenPrice());
- } else return fail("非法请求,code:3");
+ } else {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求,code:3");
+ }
}
}
thinkOrder.setTotalPrice(totalPrice);
@@ -612,26 +884,59 @@ public class ThinkOrderController extends BaseController {
// VIP卡
if (thinkOrder.getVid() != null) {
ThinkUsersVip usersVip = thinkUsersVipService.getById(thinkOrder.getVid());
- if (usersVip == null) return fail("非法请求,code:4");
- if (usersVip.getExpireTime() < timestamp) return fail("会员卡已过期");
- if (!usersVip.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1");
+ if (usersVip == null) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求,code:4");
+ }
+ if (usersVip.getExpireTime() < timestamp) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("会员卡已过期");
+ }
+ if (!usersVip.getUid().equals(getLoginUser().getUid())) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求,code:1");
+ }
if (usersVip.getType().equals(5)) {
- if (usersVip.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足");
+ if (usersVip.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("余额不足");
+ }
BigDecimal discount = usersVip.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP);
BigDecimal payPrice = totalPrice.multiply(discount);
thinkOrder.setReducePrice(totalPrice.subtract(payPrice));
thinkOrder.setPayPrice(payPrice);
- if (usersVip.getRemainingMoney().compareTo(payPrice) < 0) return fail("余额不足");
+ if (usersVip.getRemainingMoney().compareTo(payPrice) < 0) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("余额不足");
+ }
} else if (usersVip.getType().equals(2)) {
- if (usersVip.getNum() < num) return fail("次数不足");
+ if (usersVip.getNum() < num) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("次数不足");
+ }
thinkOrder.setReducePrice(totalPrice);
thinkOrder.setPayPrice(BigDecimal.ZERO);
} else {
// if (usersVip.getNum() < num) return fail("次数不足");
long todayTime = DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000;
if (usersVip.getUseTime().equals(todayTime)) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("今天已使用");
}
+ if (thinkOrder.getSid().equals(37)) {
+ if (num > 1) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("年卡/季卡/月卡仅能一人使用");
+ }
+ }
// 上次使用的订单
// ThinkOrder lastOrder = thinkOrderService.getLastOrderByVid(usersVip.getId());
// if (lastOrder != null) {
@@ -681,27 +986,56 @@ public class ThinkOrderController extends BaseController {
// IC卡
if (thinkOrder.getCode() != null) {
ThinkCard card = thinkCardService.getByCode(thinkOrder.getCode());
- if (card == null) return fail("非法请求,code:0");
+ if (card == null) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("非法请求,code:0");
+ }
// if (!card.getUid().equals(getLoginUser().getUid())) return fail("非法请求,code:1");
thinkOrder.setCid(card.getId());
- if (card.getExpireTime() < timestamp) return fail("会员卡已过期");
+ if (card.getExpireTime() < timestamp) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("会员卡已过期");
+ }
if (card.getType().equals(5)) {
- if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) return fail("余额不足");
+ if (card.getRemainingMoney().compareTo(BigDecimal.ZERO) < 1) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("余额不足");
+ }
BigDecimal discount = card.getDiscount().divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_UP);
BigDecimal payPrice = totalPrice.multiply(discount);
BigDecimal reducePrice = totalPrice.subtract(payPrice);
thinkOrder.setReducePrice(reducePrice);
thinkOrder.setPayPrice(payPrice);
- if (card.getRemainingMoney().compareTo(payPrice) < 0) return fail("余额不足");
+ if (card.getRemainingMoney().compareTo(payPrice) < 0) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("余额不足");
+ }
} else if (card.getType().equals(2)) {
- if (card.getNum() < num) return fail("次数不足");
+ if (card.getNum() < num) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("次数不足");
+ }
thinkOrder.setReducePrice(totalPrice);
thinkOrder.setPayPrice(BigDecimal.ZERO);
} else {
long todayTime = DateUtil.parse(DateUtil.today() + " 00:00:00").getTime() / 1000;
if (card.getUseTime().equals(todayTime)) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
return fail("今天已使用");
}
+ if (thinkOrder.getSid().equals(37)) {
+ if (num > 1) {
+ clearSiteRedis(thinkOrder.getThinkOrderInfos());
+ redisUtil.delete(user.getUid() + "_lastPayOrderTime");
+ return fail("年卡/季卡/月卡仅能一人使用");
+ }
+ }
// 上次使用的订单
// ThinkOrder lastOrder = thinkOrderService.getLastOrderByCardCode(card.getCode());
// // 今天是否已经使用
@@ -773,7 +1107,7 @@ public class ThinkOrderController extends BaseController {
if (checkOrder != null) {
ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid());
if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2)))
- return fail("该场地已被预定");
+ return fail("该场地已被预定.code:2");
}
}
if (thinkOrder.getPayType().equals(1) || thinkOrder.getPayType().equals(4) || thinkOrder.getPayType().equals(5)) {
@@ -795,6 +1129,7 @@ public class ThinkOrderController extends BaseController {
int num = 0;
if (thinkOrder.getThinkOrderInfos() != null) {
for (ThinkOrderInfo thinkOrderInfo : thinkOrder.getThinkOrderInfos()) {
+ redisUtil.set(thinkOrderInfo.getStartTime().toString() + thinkOrderInfo.getFid().toString(), 1, 20L, TimeUnit.DAYS);
ThinkSiteTime siteTime = thinkSiteTimeService.getById(thinkOrderInfo.getSiteTimeId());
thinkOrderInfo.setPrice(BigDecimal.ZERO);
thinkOrderInfo.setChildrenPrice(BigDecimal.ZERO);
@@ -803,9 +1138,9 @@ public class ThinkOrderController extends BaseController {
if (siteTime != null && siteTime.getIsStatus() == 1) {
halfPrice = siteTime.getHalfPrice();
price = siteTime.getPrice();
+ String month = DateUtil.format(DateUtil.date((thinkOrderInfo.getStartTime() * 1000L)), "yyyy-MM");
if (siteTime.getPrices() != null && siteTime.getPrices().contains("{")) {
JSONObject prices = JSONUtil.parseObj(siteTime.getPrices());
- String month = DateUtil.format(new Date(), "yyyy-MM");
if (prices.getJSONArray(month) != null) {
String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay() - 1);
if (priceStr != null && !priceStr.isEmpty()) price = new BigDecimal(priceStr);
@@ -813,13 +1148,11 @@ public class ThinkOrderController extends BaseController {
}
if (siteTime.getHalfPrices() != null && siteTime.getHalfPrices().contains("{")) {
JSONObject prices = JSONUtil.parseObj(siteTime.getHalfPrices());
- String month = DateUtil.format(new Date(), "yyyy-MM");
if (prices.getJSONArray(month) != null) {
String priceStr = prices.getJSONArray(month).getStr(thinkOrder.getDay() - 1);
if (priceStr != null && !priceStr.isEmpty()) halfPrice = new BigDecimal(priceStr);
}
}
- // 半场
thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice());
thinkOrderInfo.setOrderTime(timestamp);
thinkOrderInfo.setTimeFlag(now);
@@ -831,12 +1164,21 @@ public class ThinkOrderController extends BaseController {
else
totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum())));
num += thinkOrderInfo.getAdultNum();
+ if (thinkOrder.getSid().equals(37) && thinkOrder.getAdultFree() && thinkSite.getAdultFree().equals(1)) {
+ totalPrice = thinkOrder.getAdultPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getAdultNum()));
+ price = thinkOrder.getAdultPrice();
+ }
} else {
if (thinkOrderInfo.getChildrenNum() < 1) return fail("非法请求,code:2");
thinkOrderInfo.setChildrenPrice(siteTime.getChildrenPrice());
totalPrice = totalPrice.add(siteTime.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum())));
price = siteTime.getChildrenPrice();
num += thinkOrderInfo.getChildrenNum();
+ if (thinkOrder.getSid().equals(37) && thinkOrder.getChildFree() && thinkSite.getChildFree().equals(1)) {
+ thinkOrderInfo.setChildrenPrice(thinkOrder.getChildrenPrice());
+ totalPrice = thinkOrder.getChildrenPrice().multiply(BigDecimal.valueOf(thinkOrderInfo.getChildrenNum()));
+ price = thinkOrder.getChildrenPrice();
+ }
}
if (thinkOrderInfo.getType().equals(2)) thinkOrderInfo.setPrice(halfPrice);
else thinkOrderInfo.setPrice(price);
@@ -845,6 +1187,7 @@ public class ThinkOrderController extends BaseController {
}
}
+
thinkOrder.setTotalPrice(totalPrice);
thinkOrder.setPayPrice(totalPrice);
// if (thinkOrder.getRealPrice() != null && thinkOrder.getRealPrice().compareTo(BigDecimal.ZERO) > 0)
@@ -945,39 +1288,41 @@ public class ThinkOrderController extends BaseController {
@ApiOperation("重新支付")
@PostMapping("/repay")
public ApiResult> repay(@RequestBody ThinkOrder thinkOrder) {
- ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId());
- if (thinkOrder1 == null) return fail("订单不存在");
- if (thinkOrder1.getPayStatus().equals(1)) return fail("该订单已支付");
- if (thinkOrder1.getOrderStatus().equals(3)) return fail("该订单已取消");
- List thinkOrderInfos = thinkOrderInfoService.listInOrder(thinkOrder.getId());
-
- ThinkSite thinkSite = thinkSiteService.getByIdRel(thinkOrder1.getSid());
- if (thinkOrder1.getSid().equals(37)) {
- if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum())
- return fail("已达上限,无法预定");
- } else {
- for (ThinkOrderInfo info : thinkOrderInfos) {
- ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info);
- if (checkOrder != null) {
- ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid());
- if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2)))
- if (!thinkOrder.getId().equals(checkOrder.getOid()))
- return fail("该场地已被预定");
- }
- }
- }
- thinkOrder1.setOrderNum(IdUtil.getSnowflake().nextIdStr());
- thinkOrderService.updateById(thinkOrder1);
- String desc = thinkOrder1.getThinkOrderInfos().get(0).getSiteName() + "-" + thinkOrder1.getThinkOrderInfos().get(0).getFieldName();
- return success("下单成功", thinkOrderService.createWxOrder(thinkOrder1.getPayPrice(), thinkOrder1.getOrderNum(), desc,
- getLoginUser().getOpenid()));
+// ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId());
+// if (thinkOrder1 == null) return fail("订单不存在");
+// if (thinkOrder1.getPayStatus().equals(1)) return fail("该订单已支付");
+// if (thinkOrder1.getOrderStatus().equals(3)) return fail("该订单已取消");
+// List thinkOrderInfos = thinkOrderInfoService.listInOrder(thinkOrder.getId());
+//
+// ThinkSite thinkSite = thinkSiteService.getByIdRel(thinkOrder1.getSid());
+// if (thinkOrder1.getSid().equals(37)) {
+// if (thinkSite.getDailyMaxNum() != null && thinkSite.getDailyMaxNum() > 0 && thinkSite.getDailyNum() >= thinkSite.getDailyMaxNum())
+// return fail("已达上限,无法预定");
+// } else {
+// for (ThinkOrderInfo info : thinkOrderInfos) {
+// ThinkOrderInfo checkOrder = thinkOrderInfoService.checkOrder(info);
+// if (checkOrder != null) {
+// ThinkOrder thinkOrderCheck = thinkOrderService.getById(checkOrder.getOid());
+// if (thinkOrderCheck != null && (thinkOrderCheck.getOrderStatus().equals(1) || thinkOrderCheck.getOrderStatus().equals(2)))
+// if (!thinkOrder.getId().equals(checkOrder.getOid()))
+// return fail("该场地已被预定.code:3");
+// }
+// }
+// }
+// thinkOrder1.setOrderNum(IdUtil.getSnowflake().nextIdStr());
+// thinkOrderService.updateById(thinkOrder1);
+// String desc = thinkOrder1.getThinkOrderInfos().get(0).getSiteName() + "-" + thinkOrder1.getThinkOrderInfos().get(0).getFieldName();
+// return success("下单成功", thinkOrderService.createWxOrder(thinkOrder1.getPayPrice(), thinkOrder1.getOrderNum(), desc,
+// getLoginUser().getOpenid(), "https://gxtyzx-api2.websoft.top/api/think/think-order/notify"));
+ return success("");
}
private ApiResult> onPay(ThinkOrder order) throws IOException, WxErrorException {
// 微信统一下单接口
if (order.getPayType().equals(PAY_TYPE_WECHAT)) {
String desc = order.getThinkOrderInfos().get(0).getSiteName() + "-" + order.getThinkOrderInfos().get(0).getFieldName();
- return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), desc, getLoginUser().getOpenid()));
+ return success("下单成功", thinkOrderService.createWxOrder(order.getPayPrice(), order.getOrderNum(), desc, getLoginUser().getOpenid(),
+ "https://gxtyzx-api2.websoft.top/api/think/think-order/notify", order.getId()));
}
if (order.getPayType() >= 6 || order.getPayType().equals(2)) {
order.setIsInvoice(order.getCanInvoice() ? 2 : 3);
@@ -991,9 +1336,9 @@ public class ThinkOrderController extends BaseController {
@ApiOperation("修改")
@PutMapping()
public ApiResult> update(@RequestBody ThinkOrder thinkOrder) {
+ ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId());
if (thinkOrder.getCid() != null && !thinkOrder.getCid().equals(0)
&& thinkOrder.getPayStatus() != null && thinkOrder.getPayStatus().equals(1)) {
- ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId());
BigDecimal totalPrice = thinkOrder1.getTotalPrice();
ThinkCard card = thinkCardService.getById(thinkOrder.getCid());
if (card == null) return fail("IC卡不存在");
@@ -1061,67 +1406,10 @@ public class ThinkOrderController extends BaseController {
}
}
if (thinkOrder.getOrderStatus() != null && thinkOrder.getOrderStatus().equals(3)) {
- // 取消
- int num = 0;
- List thinkOrderInfoList = thinkOrderInfoService.listInOrder(thinkOrder.getId());
- for (ThinkOrderInfo thinkOrderInfo : thinkOrderInfoList) {
- thinkOrderInfo.setPayStatus(0);
- num += thinkOrderInfo.getAdultNum() + thinkOrderInfo.getChildrenNum();
- }
- thinkOrderInfoService.updateBatchById(thinkOrderInfoList);
- ThinkOrder thinkOrder1 = thinkOrderService.getByIdRel(thinkOrder.getId());
- if (thinkOrder1.getVid() != null && !thinkOrder1.getVid().equals(0)) {
- ThinkUsersVip thinkUsersVip = thinkUsersVipService.getById(thinkOrder1.getVid());
- if (thinkUsersVip != null) {
- thinkUsersVip.setUseTime(0L);
- ThinkVipCardsBills thinkVipCardsBills = new ThinkVipCardsBills();
- thinkVipCardsBills.setVid(thinkOrder1.getVid());
- thinkVipCardsBills.setUid(thinkOrder1.getUid());
- DateTime dateTime = DateUtil.date(thinkOrderInfoList.get(0).getStartTime() * 1000L);
- thinkVipCardsBills.setDate(DateUtil.format(dateTime, "yyyy-MM-dd"));
- thinkVipCardsBillsService.cancelLog(thinkVipCardsBills);
-
- if (thinkUsersVip.getType().equals(5)) {
- BigDecimal newBalance = thinkUsersVip.getRemainingMoney().add(thinkOrder1.getPayPrice());
- thinkUsersVip.setRemainingMoney(newBalance);
- } else if (thinkUsersVip.getType().equals(4)) {
- BigDecimal newBalance = thinkUsersVip.getRemainingMoney().add(thinkUsersVip.getEachMoney());
- thinkUsersVip.setRemainingMoney(newBalance);
- thinkUsersVip.setNum(thinkUsersVip.getNum() + num);
- } else {
- thinkUsersVip.setNum(thinkUsersVip.getNum() + num);
- }
- thinkUsersVip.setUseTime(0L);
- thinkUsersVipService.updateById(thinkUsersVip);
- }
- }
- if (thinkOrder1.getCode() != null && !thinkOrder1.getCode().isEmpty()) {
- ThinkCard card = thinkCardService.getByCode(thinkOrder1.getCode());
- if (card != null) {
- if (card.getType().equals(5)) {
- BigDecimal newBalance = card.getRemainingMoney().add(thinkOrder1.getPayPrice());
- card.setRemainingMoney(newBalance);
- } else if (card.getType().equals(4)) {
- BigDecimal newBalance = card.getRemainingMoney().add(card.getEachMoney());
- card.setRemainingMoney(newBalance);
- } else if (card.getType().equals(2)) {
- card.setNum(card.getNum() + 1);
- }
- card.setUseTime(0L);
- thinkCardService.updateById(card);
- }
- }
- if (thinkOrder1.getWechatOrder() != null && !thinkOrder1.getWechatOrder().isEmpty() && thinkOrder1.getWechatOrder().contains("420000")) {
- ThinkOrderRefundLog thinkOrderRefundLog = new ThinkOrderRefundLog();
- thinkOrderRefundLog.setOid(thinkOrder.getId());
- thinkOrderRefundLog.setRefundNo("R" + thinkOrder1.getOrderNum());
- thinkOrderRefundLog.setType(0);
- thinkOrderRefundLog.setRefundAmount(thinkOrder1.getPayPrice());
- thinkOrderRefundLog.setUid(thinkOrder1.getUid());
- thinkOrderRefundLog.setCreateTime(LocalDateTimeUtil.now());
- thinkOrderRefundLogService.save(thinkOrderRefundLog);
- thinkOrderRefundLog.setOrder(thinkOrder1);
- thinkOrderService.refund(thinkOrderRefundLog);
+ int refundBy = thinkOrder.getIsAdmin() != null ? 0 : 1;
+ String cancelRes = thinkOrderService.cancelOrder(thinkOrder, false, refundBy);
+ if (!cancelRes.isEmpty()) {
+ return fail(cancelRes);
}
}
if (thinkOrderService.updateById(thinkOrder)) {
@@ -1170,7 +1458,7 @@ public class ThinkOrderController extends BaseController {
@PostMapping("/export")
public ApiResult> export(@RequestBody ThinkOrderParam param) throws IOException {
List orderList = thinkOrderService.listRel(param);
- String filename = "excel/财务报表-" + new Date().getTime() + ".xlsx";
+ String filename = "excel/订单列表-" + new Date().getTime() + ".xlsx";
String path = uploadPath + filename;
SXSSFWorkbook workbook = new SXSSFWorkbook();
//创建工作表单
@@ -1182,35 +1470,76 @@ public class ThinkOrderController extends BaseController {
sheet.setColumnWidth(4, 20 * 256);
SXSSFRow row = sheet.createRow(0);
- String[] headers = {"场馆名称", "下单时间", "单位", "手机号", "实际转账单位/个人", "价格", "积分", "支付方式", "预付卡号", "预付卡到期时间"};
+ String[] headers = {"场馆名称", "下单时间", "订单号", "手机号", "实际转账单位/个人", "订单状态", "支付状态", "原价", "实付", "订场信息",
+ "支付方式", "预付卡号", "预付卡到期时间"};
String[] payType = {"余额支付", "微信支付", "积分", "支付宝", "现金", "POS机", "VIP月卡", "VIP年卡", "VIP次卡", "IC月卡",
- "IC年卡", "IC次卡", "免费", "VIP充值卡", "", "积分支付", "VIP季卡", "IC季卡"};
+ "IC年卡", "IC次卡", "免费", "VIP充值卡", "IC充值卡", "积分支付", "VIP季卡", "IC季卡"};
for (int i = 0; i < headers.length; i++) {
row.createCell(i).setCellValue(headers[i]);
}
int rowNum = 1;
for (ThinkOrder order : orderList) {
+ String orderStatus = "";
+ switch (order.getOrderStatus()) {
+ case 1:
+ orderStatus = "已完成";
+ break;
+ case 2:
+ orderStatus = "未使用";
+ break;
+ case 3:
+ orderStatus = "已取消";
+ break;
+ case 4:
+ orderStatus = "退款申请中";
+ break;
+ case 5:
+ orderStatus = "退款被拒绝";
+ break;
+ case 6:
+ orderStatus = "退款成功";
+ }
+ String payStatus = "";
+ switch (order.getPayStatus()) {
+ // 1已付款,2未付款 3未付款占场中 4未付款已使用
+ case 1: {
+ payStatus = "已付款";
+ }
+ break;
+ case 2: {
+ payStatus = "未付款";
+ }
+ break;
+ case 3: {
+ payStatus = "未付款占场中";
+ }
+ break;
+ case 4: {
+ payStatus = "未付款已使用";
+ }
+ break;
+ }
+
SXSSFRow orderRow = sheet.createRow(rowNum);
orderRow.createCell(0).setCellValue(order.getSiteName());
- System.out.println(order.getCreateTime());
- System.out.println(order.getCreateTime() * 1000);
- System.out.println(DateUtil.date(order.getCreateTime() * 1000));
- System.out.println(DateUtil.format(DateUtil.date(order.getCreateTime() * 1000), "yyyy-MM-dd HH:mm:ss"));
orderRow.createCell(1).setCellValue(DateUtil.format(DateUtil.date(order.getCreateTime() * 1000), "yyyy-MM-dd HH:mm:ss"));
- orderRow.createCell(2).setCellValue(order.getName());
+ orderRow.createCell(2).setCellValue(order.getOrderNum());
orderRow.createCell(3).setCellValue(order.getPhone());
orderRow.createCell(4).setCellValue(order.getName());
- orderRow.createCell(5).setCellValue(order.getTotalPrice().toString());
- orderRow.createCell(6).setCellValue("0");
- orderRow.createCell(7).setCellValue(payType[order.getPayType()]);
+ orderRow.createCell(5).setCellValue(orderStatus);
+ orderRow.createCell(6).setCellValue(payStatus);
+ orderRow.createCell(7).setCellValue(order.getTotalPrice().toString());
+ orderRow.createCell(8).setCellValue(order.getPayPrice().toString());
+ orderRow.createCell(9).setCellValue(order.getDateTime());
+ orderRow.createCell(10).setCellValue(payType[order.getPayType()]);
if (order.getCard() != null) {
- orderRow.createCell(8).setCellValue(order.getCard().getCode());
- orderRow.createCell(9).setCellValue(DateUtil.format(DateUtil.date(order.getCard().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss"));
+ orderRow.createCell(11).setCellValue(order.getCard().getCode());
+ orderRow.createCell(12).setCellValue(DateUtil.format(DateUtil.date(order.getCard().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss"));
}
if (order.getThinkVip() != null) {
- orderRow.createCell(8).setCellValue(order.getThinkVip().getCode());
- orderRow.createCell(9).setCellValue(DateUtil.format(DateUtil.date(order.getThinkVip().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss"));
+ orderRow.createCell(11).setCellValue(order.getThinkVip().getCode());
+ orderRow.createCell(12).setCellValue(DateUtil.format(DateUtil.date(order.getThinkVip().getExpireTime() * 1000), "yyyy-MM-dd HH:mm:ss"));
}
// sheet.addMergedRegion(new CellRangeAddress(rowNum, 0, 2, 2));
@@ -1383,25 +1712,29 @@ public class ThinkOrderController extends BaseController {
vipQueryWrapper.ge(ThinkRechargeLog::getCreateTime, param.getCreateTimeStart());
vipQueryWrapper.le(ThinkRechargeLog::getCreateTime, param.getCreateTimeEnd());
}
- List vipOrderList = thinkRechargeLogService.list(vipQueryWrapper);
+ List rechargeLogList = thinkRechargeLogService.list(vipQueryWrapper);
List vipOrderVipList = new ArrayList<>();
- if (!vipOrderList.isEmpty()) {
+ List thinkVipList = thinkVipService.list();
+ if (!rechargeLogList.isEmpty()) {
Set vipIdSet = new HashSet<>();
- for (ThinkRechargeLog vipOrder : vipOrderList) {
+ for (ThinkRechargeLog vipOrder : rechargeLogList) {
if (vipIdSet.contains(vipOrder.getVid())) continue;
vipIdSet.add(vipOrder.getVid());
}
vipOrderVipList = thinkUsersVipService.listByIds(vipIdSet);
- for (ThinkRechargeLog vipOrder : vipOrderList) {
+ for (ThinkRechargeLog vipOrder : rechargeLogList) {
for (ThinkUsersVip vip : vipOrderVipList) {
if (vip.getId().equals(vipOrder.getVid())) {
vipOrder.setThinkUsersVip(vip);
+ ThinkVip thinkVip = thinkVipList.stream().filter(v -> v.getId().equals(vip.getVid())).findFirst().orElse(null);
+ vipOrder.setThinkVip(thinkVip);
break;
}
}
}
}
List hasCalRechargeList = new ArrayList<>();
+ List hasCalCardList = new ArrayList<>();
for (int sid : sidList) {
ThinkSite site = thinkSiteService.getById(sid);
Map data = new HashMap<>();
@@ -1410,12 +1743,11 @@ public class ThinkOrderController extends BaseController {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ThinkOrder::getSid, sid)
.in(ThinkOrder::getOrderStatus, 1, 2, 6)
- .notIn(ThinkOrder::getPayType, Arrays.asList(6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17))
+ .notIn(ThinkOrder::getPayType, Arrays.asList(6, 7, 8, 9, 10, 11, 13, 14, 16, 17))
.in(ThinkOrder::getPayStatus, 1);
if (param.getCreateTimeStart() != null) {
-
- queryWrapper.ge(ThinkOrder::getCreateTime, param.getCreateTimeStart());
- queryWrapper.le(ThinkOrder::getCreateTime, param.getCreateTimeEnd());
+ queryWrapper.ge(ThinkOrder::getPayTime, param.getCreateTimeStart());
+ queryWrapper.le(ThinkOrder::getPayTime, param.getCreateTimeEnd());
}
List orderList = thinkOrderService.list(queryWrapper);
BigDecimal siteIncome = BigDecimal.ZERO;
@@ -1460,15 +1792,15 @@ public class ThinkOrderController extends BaseController {
totalIncomeSum = totalIncomeSum.add(order.getPayPrice());
}
} else if (order.getPayType().equals(4)) {
- if (order.getOrderStatus().equals(6)) {
+ if (!order.getOrderStatus().equals(6)) {
cashIncome = cashIncome.add(order.getPayPrice());
cashIncomeSum = cashIncomeSum.add(order.getPayPrice());
siteIncome = siteIncome.add(order.getPayPrice());
totalIncome = totalIncome.add(order.getPayPrice());
totalIncomeSum = totalIncomeSum.add(order.getPayPrice());
}
- } else {
- if (order.getOrderStatus().equals(6)) {
+ } else if (order.getPayType().equals(2) || order.getPayType().equals(12)) {
+ if (!order.getOrderStatus().equals(6)) {
otherIncome = otherIncome.add(order.getPayPrice());
otherIncomeTmp = otherIncomeTmp.add(order.getPayPrice());
otherIncomeSum = otherIncomeSum.add(order.getPayPrice());
@@ -1477,7 +1809,6 @@ public class ThinkOrderController extends BaseController {
totalIncomeSum = totalIncomeSum.add(order.getPayPrice());
}
}
-
}
}
// 微信退款订单
@@ -1499,87 +1830,102 @@ public class ThinkOrderController extends BaseController {
}
// IC卡订单
- LambdaQueryWrapper cardQueryWrapper = new LambdaQueryWrapper<>();
- cardQueryWrapper.like(ThinkCard::getSid, sid)
- .in(ThinkCard::getStatus, 1);
- if (param.getCreateTimeStart() != null) {
- cardQueryWrapper.ge(ThinkCard::getCreateTime, param.getCreateTimeStart());
- cardQueryWrapper.le(ThinkCard::getCreateTime, param.getCreateTimeEnd());
- }
- List cardOrderList = thinkCardService.list(cardQueryWrapper);
- if (!cardOrderList.isEmpty()) {
- for (ThinkCard order : cardOrderList) {
- if (order.getPayType().equals(1) || order.getPayType().equals(2) || order.getPayType().equals(4)) {
- posIncomeSum = posIncomeSum.add(order.getPrice());
- posIncome = posIncome.add(order.getPrice());
- } else if (order.getPayType().equals(6)) {
- businessIncomeSum = businessIncomeSum.add(order.getPrice());
- businessIncome = businessIncome.add(order.getPrice());
- } else if (order.getPayType().equals(3)) {
- cashIncomeSum = cashIncomeSum.add(order.getPrice());
- cashIncome = cashIncome.add(order.getPrice());
- } else {
- otherIncomeSum = otherIncomeSum.add(order.getPrice());
- otherIncome = otherIncome.add(order.getPrice());
- }
- siteIncome = siteIncome.add(order.getPrice());
- totalIncome = totalIncome.add(order.getPrice());
+ List thinkVipListInSite = thinkVipList.stream().filter(thinkVip -> thinkVip.getReportSid().equals(sid)).toList();
+ if (!thinkVipListInSite.isEmpty()) {
+
+ LambdaQueryWrapper cardQueryWrapper = new LambdaQueryWrapper<>();
+ cardQueryWrapper.in(ThinkCard::getVid, thinkVipListInSite.stream().map(ThinkVip::getId).toList())
+ .isNull(ThinkCard::getOriginCardCode)
+ .in(ThinkCard::getStatus, 1);
+ if (param.getCreateTimeStart() != null) {
+ cardQueryWrapper.ge(ThinkCard::getCreateTime, param.getCreateTimeStart());
+ cardQueryWrapper.le(ThinkCard::getCreateTime, param.getCreateTimeEnd());
}
- }
- // VIP订单
- for (ThinkRechargeLog vipOrder : vipOrderList) {
- if (vipOrder.getThinkUsersVip() != null && vipOrder.getThinkUsersVip().getSid().contains(String.valueOf(sid))
- && !hasCalRechargeList.contains(vipOrder.getId())) {
- wechatIncomeSum = wechatIncomeSum.add(vipOrder.getMoney());
- wechatIncome = wechatIncome.add(vipOrder.getMoney());
- siteIncome = siteIncome.add(vipOrder.getMoney());
- totalIncome = totalIncome.add(vipOrder.getMoney());
-
- if (vipOrder.getStatus().equals(3)) {
- wechatRefund = wechatRefund.add(vipOrder.getMoney());
- wechatRefundSum = wechatRefundSum.add(vipOrder.getMoney());
- }
-
- hasCalRechargeList.add(vipOrder.getId());
- }
- }
- // IC续卡订单
- LambdaQueryWrapper renewCardQueryWrapper = new LambdaQueryWrapper<>();
- if (!hasCheckCodeList.isEmpty()) {
- renewCardQueryWrapper.notIn(ThinkCardLog::getCode, hasCheckCodeList);
- }
- if (param.getCreateTimeStart() != null) {
- renewCardQueryWrapper.ge(ThinkCardLog::getCreateTime, param.getCreateTimeStart());
- renewCardQueryWrapper.le(ThinkCardLog::getCreateTime, param.getCreateTimeEnd());
- }
- List renewCardOrderAllList = thinkCardLogService.list(renewCardQueryWrapper);
- if (!renewCardOrderAllList.isEmpty()) {
- List codeList = renewCardOrderAllList.stream().map(ThinkCardLog::getCode).toList();
-
- List thinkCardList = thinkCardService.list(
- new LambdaQueryWrapper()
- .in(ThinkCard::getCode, codeList)
- );
- List checkCodeList = thinkCardList.stream().filter(t -> t.getSid().contains(String.valueOf(sid)))
- .map(ThinkCard::getCode).toList();
- if (!checkCodeList.isEmpty()) {
- hasCheckCodeList.addAll(checkCodeList);
- List renewCardOrderList = thinkCardLogService.list(
- new LambdaQueryWrapper()
- .in(ThinkCardLog::getCode, checkCodeList)
- .between(ThinkCardLog::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd())
- );
- if (!renewCardOrderList.isEmpty()) {
- for (ThinkCardLog order : renewCardOrderList) {
+ List cardOrderList = thinkCardService.list(cardQueryWrapper);
+ if (!cardOrderList.isEmpty()) {
+ for (ThinkCard order : cardOrderList) {
+ if (!hasCalCardList.contains(order.getId())) {
if (order.getPayType().equals(1) || order.getPayType().equals(2) || order.getPayType().equals(4)) {
- posIncomeSum = posIncomeSum.add(order.getMoney());
- posIncome = posIncome.add(order.getMoney());
+ posIncomeSum = posIncomeSum.add(order.getPrice());
+ posIncome = posIncome.add(order.getPrice());
+ } else if (order.getPayType().equals(6)) {
+ businessIncomeSum = businessIncomeSum.add(order.getPrice());
+ businessIncome = businessIncome.add(order.getPrice());
} else if (order.getPayType().equals(3)) {
- cashIncomeSum = cashIncomeSum.add(order.getMoney());
- cashIncome = cashIncome.add(order.getMoney());
+ cashIncomeSum = cashIncomeSum.add(order.getPrice());
+ cashIncome = cashIncome.add(order.getPrice());
+ } else {
+ otherIncomeSum = otherIncomeSum.add(order.getPrice());
+ otherIncome = otherIncome.add(order.getPrice());
+ }
+ siteIncome = siteIncome.add(order.getPrice());
+ totalIncome = totalIncome.add(order.getPrice());
+ hasCalCardList.add(order.getId());
+ }
+ }
+ }
+ // VIP订单
+ for (ThinkRechargeLog vipOrder : rechargeLogList) {
+ if (vipOrder.getThinkVip() != null) {
+ if (vipOrder.getThinkUsersVip() != null && vipOrder.getThinkVip().getReportSid().equals(sid)
+ && !hasCalRechargeList.contains(vipOrder.getId())) {
+ wechatIncomeSum = wechatIncomeSum.add(vipOrder.getMoney());
+ wechatIncome = wechatIncome.add(vipOrder.getMoney());
+ siteIncome = siteIncome.add(vipOrder.getMoney());
+ totalIncome = totalIncome.add(vipOrder.getMoney());
+
+ if (vipOrder.getStatus().equals(3)) {
+ wechatRefund = wechatRefund.add(vipOrder.getMoney());
+ wechatRefundSum = wechatRefundSum.add(vipOrder.getMoney());
+ }
+
+ hasCalRechargeList.add(vipOrder.getId());
+ }
+ }
+ }
+ // IC续卡订单
+ LambdaQueryWrapper renewCardQueryWrapper = new LambdaQueryWrapper<>();
+ if (!hasCheckCodeList.isEmpty()) {
+ renewCardQueryWrapper.notIn(ThinkCardLog::getCode, hasCheckCodeList);
+ }
+ if (param.getCreateTimeStart() != null) {
+ renewCardQueryWrapper.ge(ThinkCardLog::getCreateTime, param.getCreateTimeStart());
+ renewCardQueryWrapper.le(ThinkCardLog::getCreateTime, param.getCreateTimeEnd());
+ }
+ List renewCardOrderAllList = thinkCardLogService.list(renewCardQueryWrapper);
+ if (!renewCardOrderAllList.isEmpty()) {
+ List codeList = renewCardOrderAllList.stream().map(ThinkCardLog::getCode).toList();
+
+ List thinkCardList = thinkCardService.list(
+ new LambdaQueryWrapper()
+ .in(ThinkCard::getCode, codeList)
+ );
+ List checkCodeList = new ArrayList<>();
+ for (ThinkCard t : thinkCardList) {
+ ThinkVip thinkVip = thinkVipList.stream().filter(tV -> tV.getId().equals(t.getVid())).findFirst().orElse(null);
+ if (thinkVip != null && thinkVip.getReportSid().equals(sid)) {
+ checkCodeList.add(t.getCode());
+ }
+ }
+ if (!checkCodeList.isEmpty()) {
+ hasCheckCodeList.addAll(checkCodeList);
+ List renewCardOrderList = thinkCardLogService.list(
+ new LambdaQueryWrapper()
+ .in(ThinkCardLog::getCode, checkCodeList)
+ .between(ThinkCardLog::getCreateTime, param.getCreateTimeStart(), param.getCreateTimeEnd())
+ );
+ if (!renewCardOrderList.isEmpty()) {
+ for (ThinkCardLog order : renewCardOrderList) {
+ if (order.getPayType().equals(1) || order.getPayType().equals(2) || order.getPayType().equals(4)) {
+ posIncomeSum = posIncomeSum.add(order.getMoney());
+ posIncome = posIncome.add(order.getMoney());
+ } else if (order.getPayType().equals(3)) {
+ cashIncomeSum = cashIncomeSum.add(order.getMoney());
+ cashIncome = cashIncome.add(order.getMoney());
+ }
+ siteIncome = siteIncome.add(order.getMoney());
+ totalIncome = totalIncome.add(order.getMoney());
}
- siteIncome = siteIncome.add(order.getMoney());
- totalIncome = totalIncome.add(order.getMoney());
}
}
}
@@ -1610,7 +1956,7 @@ public class ThinkOrderController extends BaseController {
@PostMapping("/excel-data-for-card")
public ApiResult> excelDataForCard(@RequestBody ThinkOrderParam param) throws IOException {
- Integer[] sidList = {32, 51, 50, 34, 33, 53, 31, 30, 37, 36, 28, 48, 49, 44};
+ Integer[] sidList = {34, 33, 53, 31, 30, 32, 51, 50, 37, 36, 28, 48, 49, 44};
List