Merge branch 'dev' of http://git.gxwebsoft.com/gxwebsoft/yunxinwei-java
# Conflicts: # src/main/java/com/gxwebsoft/open/controller/OpenEquipmentController.java
This commit is contained in:
5
pom.xml
5
pom.xml
@@ -58,6 +58,11 @@
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.gxwebsoft.shop.service.MerchantService;
|
||||
import com.gxwebsoft.shop.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -39,6 +40,7 @@ import static com.gxwebsoft.common.core.constants.OrderConstants.*;
|
||||
* @author 科技小王子
|
||||
* @since 2022-11-30 02:11:16
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "设备管理管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/apps/equipment")
|
||||
@@ -71,7 +73,7 @@ public class EquipmentController extends BaseController {
|
||||
@ApiOperation("查询全部设备管理")
|
||||
@GetMapping()
|
||||
public ApiResult<List<Equipment>> list(EquipmentParam param) {
|
||||
PageParam<Equipment, EquipmentParam> page = new PageParam<>(param);
|
||||
// PageParam<Equipment, EquipmentParam> page = new PageParam<>(param);
|
||||
// page.setDefaultOrder("create_time desc");
|
||||
// return success(equipmentService.list(page.getOrderWrapper()));
|
||||
// 使用关联查询
|
||||
@@ -131,6 +133,7 @@ public class EquipmentController extends BaseController {
|
||||
@OperationLog
|
||||
@ApiOperation("绑定设备")
|
||||
@PutMapping("/bind")
|
||||
@Deprecated
|
||||
public ApiResult<?> bindEquipment(@RequestBody Equipment equipment) {
|
||||
final Integer orderId = equipment.getOrderId();
|
||||
final Order order = orderService.getById(orderId);
|
||||
@@ -159,7 +162,7 @@ public class EquipmentController extends BaseController {
|
||||
record.setMerchantCode(one.getMerchantCode());
|
||||
equipmentRecordService.save(record);
|
||||
// 订单发货
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_ACCEPT);
|
||||
order.setOrderStatus(ORDER_STATUS_COMPLETED);
|
||||
if(order.getOrderSource() == 10) {
|
||||
order.setOrderStatus(ORDER_STATUS_OVER);
|
||||
@@ -225,7 +228,7 @@ public class EquipmentController extends BaseController {
|
||||
AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest();
|
||||
AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel();
|
||||
model.setUrlParam("pages/equipment/equipment?equipmentId=".concat(equipment.getEquipmentId().toString()));
|
||||
System.out.println("equipment = " + equipment);
|
||||
log.info("equipment = " + equipment);
|
||||
// __id__=2&merchantCode=M311539&merchantId=52
|
||||
// pages/equipment/equipment
|
||||
|
||||
@@ -238,16 +241,15 @@ public class EquipmentController extends BaseController {
|
||||
model.setDescribe("扫码租赁电池");
|
||||
request.setBizModel(model);
|
||||
AlipayOpenAppQrcodeCreateResponse response = alipayClient.certificateExecute(request);
|
||||
System.out.println(response.getBody());
|
||||
log.info("支付宝扫码返回:{}", response.getBody());
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
final JSONObject jsonObject = JSONObject.parseObject(response.getBody());
|
||||
final String alipay_open_app_qrcode_create_response = jsonObject.getString("alipay_open_app_qrcode_create_response");
|
||||
final JSONObject jsonObject1 = JSONObject.parseObject(alipay_open_app_qrcode_create_response);
|
||||
String qrCodeUrl = jsonObject1.getString("qr_code_url");
|
||||
return qrCodeUrl;
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
log.error("支付宝扫码调用失败");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -255,6 +257,7 @@ public class EquipmentController extends BaseController {
|
||||
@PreAuthorize("hasAuthority('apps:equipment:update')")
|
||||
@ApiOperation("确认收货")
|
||||
@PostMapping("/receipt")
|
||||
@Deprecated
|
||||
public ApiResult<?> receipt(@RequestBody Order order) {
|
||||
orderService.updateById(order);
|
||||
return success("确认收货");
|
||||
|
||||
@@ -105,6 +105,12 @@
|
||||
<if test="param.merchantCode != null">
|
||||
AND b.merchant_code = #{param.merchantCode}
|
||||
</if>
|
||||
<if test="param.isBind == 0">
|
||||
AND a.user_id = 0
|
||||
</if>
|
||||
<if test="param.isBind == 1">
|
||||
AND a.user_id > 0
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -124,4 +124,6 @@ public class EquipmentParam extends BaseParam {
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private String merchantName;
|
||||
|
||||
@ApiModelProperty(value = "是否绑定")
|
||||
private Byte isBind;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gxwebsoft.apps.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.apps.entity.Equipment;
|
||||
import com.gxwebsoft.apps.param.EquipmentParam;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.gxwebsoft.apps.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gxwebsoft.apps.mapper.EquipmentMapper;
|
||||
@@ -10,6 +12,7 @@ import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@@ -27,6 +30,7 @@ import java.util.stream.Collectors;
|
||||
* @author 科技小王子
|
||||
* @since 2022-11-30 02:11:16
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment> implements EquipmentService {
|
||||
@Resource
|
||||
@@ -42,8 +46,15 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
|
||||
List<Equipment> list = baseMapper.selectPageRel(page, param);
|
||||
|
||||
Set<Integer> touziUserIds = list.stream().map(Equipment::getTouziUserId).collect(Collectors.toSet());
|
||||
List<User> touziUserList = userService.lambdaQuery().in(User::getUserId, touziUserIds).list();
|
||||
Map<Integer, List<User>> touziUserCollect = touziUserList.stream().collect(Collectors.groupingBy(User::getUserId));
|
||||
// List<User> touziUserList = userService.lambdaQuery().in(User::getUserId, touziUserIds).list();
|
||||
Map<Integer, User> touziUserCollect = null;
|
||||
if(CollectionUtil.isNotEmpty(touziUserIds)){
|
||||
List<User> touziUserList = userService.listByIds(touziUserIds);
|
||||
if(CollectionUtil.isNotEmpty(touziUserList)){
|
||||
touziUserCollect = touziUserList.stream().collect(Collectors.toMap(User::getUserId, e->e));
|
||||
}
|
||||
}
|
||||
|
||||
// 查询绑定电池的用户
|
||||
for (Equipment equipment : list) {
|
||||
// 查询状态
|
||||
@@ -52,31 +63,36 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
|
||||
JSONObject body = entity.getBody();
|
||||
Integer code = body.getInteger("code");
|
||||
JSONObject data = body.getJSONObject("data");
|
||||
equipment.setBms(data.getString("bms_zt"));
|
||||
equipment.setBatteryPower(data.getString("sydl"));
|
||||
equipment.setTotalVoltage(data.getString("sbdy"));
|
||||
equipment.setGps(data.getString("gps_xh"));
|
||||
equipment.setGsm(data.getString("gsm_xh"));
|
||||
equipment.setWorkingStatus(data.getString("sbzt"));
|
||||
System.out.println(body);
|
||||
if(null != data){
|
||||
equipment.setBms(data.getString("bms_zt"));
|
||||
equipment.setBatteryPower(data.getString("sydl"));
|
||||
equipment.setTotalVoltage(data.getString("sbdy"));
|
||||
equipment.setGps(data.getString("gps_xh"));
|
||||
equipment.setGsm(data.getString("gsm_xh"));
|
||||
equipment.setWorkingStatus(data.getString("sbzt"));
|
||||
}
|
||||
else {
|
||||
log.warn("获取电池信息返回失败!{}", JSON.toJSONString(body));
|
||||
}
|
||||
|
||||
// System.out.println(body);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// e.printStackTrace();
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
if (!equipment.getUserId().equals(0)) {
|
||||
equipment.setUser(userService.getById(equipment.getUserId()));
|
||||
}
|
||||
|
||||
|
||||
if ( equipment.getTouziUserId()!= null && !equipment.getTouziUserId().equals(0)) {
|
||||
List<User> users = touziUserCollect.get(equipment.getTouziUserId());
|
||||
if(!CollectionUtils.isEmpty(users)) {
|
||||
equipment.setTouziUser(users.get(0));
|
||||
|
||||
if(CollectionUtil.isNotEmpty(touziUserCollect) &&
|
||||
equipment.getTouziUserId()!= null && !equipment.getTouziUserId().equals(0)) {
|
||||
User tUser = touziUserCollect.get(equipment.getTouziUserId());
|
||||
if(null != tUser){
|
||||
equipment.setTouziUser(tUser);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
return new PageResult<>(list, page.getTotal());
|
||||
}
|
||||
@@ -100,18 +116,20 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
|
||||
JSONObject body = entity.getBody();
|
||||
Integer code = body.getInteger("code");
|
||||
JSONObject data = body.getJSONObject("data");
|
||||
equipment.setBms(data.getString("bms_zt"));
|
||||
equipment.setBatteryPower(data.getString("sydl"));
|
||||
equipment.setTotalVoltage(data.getString("sbdy"));
|
||||
equipment.setGps(data.getString("gps_xh"));
|
||||
equipment.setGsm(data.getString("gsm_xh"));
|
||||
equipment.setWorkingStatus(data.getString("sbzt"));
|
||||
System.out.println(body);
|
||||
if(null != data){
|
||||
equipment.setBms(data.getString("bms_zt"));
|
||||
equipment.setBatteryPower(data.getString("sydl"));
|
||||
equipment.setTotalVoltage(data.getString("sbdy"));
|
||||
equipment.setGps(data.getString("gps_xh"));
|
||||
equipment.setGsm(data.getString("gsm_xh"));
|
||||
equipment.setWorkingStatus(data.getString("sbzt"));
|
||||
}
|
||||
else {
|
||||
log.warn("获取电池信息返回失败!{}", JSON.toJSONString(body));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
|
||||
return equipment;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.gxwebsoft.apps.task;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
@@ -12,9 +14,11 @@ import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.request.AlipayTradeOrderinfoSyncRequest;
|
||||
import com.alipay.api.response.AlipayTradeOrderinfoSyncResponse;
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||
import com.baomidou.mybatisplus.annotation.SqlParser;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
@@ -26,8 +30,12 @@ import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
import com.gxwebsoft.apps.service.EquipmentOrderGoodsService;
|
||||
import com.gxwebsoft.apps.service.EquipmentService;
|
||||
import com.gxwebsoft.common.core.config.MybatisPlusConfig;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import com.gxwebsoft.common.core.utils.AlipayConfigUtil;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.param.SmsCaptchaParam;
|
||||
import com.gxwebsoft.common.system.service.AliSmsService;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import com.gxwebsoft.love.entity.UserPlanLog;
|
||||
import com.gxwebsoft.love.param.UserPlanLogParam;
|
||||
@@ -44,6 +52,7 @@ import org.springframework.util.NumberUtils;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -85,11 +94,15 @@ public class OrderTask {
|
||||
private FreezeOrderService freezeOrderService;
|
||||
@Resource
|
||||
private OrderPayService orderPayService;
|
||||
@Resource
|
||||
private AliSmsService aliSmsService;
|
||||
|
||||
|
||||
/**
|
||||
* 计算逾期
|
||||
*/
|
||||
@Scheduled(cron = "0 0/3 * * * ? ")
|
||||
// @Scheduled(cron = "1 0 0 * * ? ")
|
||||
@Scheduled(cron="${cron.timeoutOrder:-}")
|
||||
public void removeTimeoutOrder() {
|
||||
DateTime now = DateUtil.date();
|
||||
|
||||
@@ -101,18 +114,33 @@ public class OrderTask {
|
||||
.eq(Order::getIsRenew, 0) // 主订单
|
||||
.lt(Order::getExpirationTime, now); //已逾期
|
||||
|
||||
|
||||
List<Order> list = orderService.list(wrapper);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Set<Integer> ids = list.stream().map(Order::getOrderId).collect(Collectors.toSet());
|
||||
|
||||
LambdaQueryWrapper<OrderPay> renewWrapper = Wrappers.lambdaQuery();
|
||||
renewWrapper.select(OrderPay::getRentOrderId)
|
||||
.in(OrderPay::getRentOrderId, ids)
|
||||
.eq(OrderPay::getPayStatus, PAY_STATUS_NO_PAY);
|
||||
List<OrderPay> renewOrders = orderPayService.list(renewWrapper);
|
||||
if(CollectionUtil.isNotEmpty(renewOrders)){
|
||||
List<Integer> orderIdRenews = renewOrders.stream().map(OrderPay::getRentOrderId).collect(Collectors.toList());
|
||||
|
||||
list = list.stream().filter(e->!orderIdRenews.contains(e.getOrderId())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
Map<Integer, List<Order>> collect = list.stream().collect(Collectors.groupingBy(Order::getOrderId));
|
||||
Set<Integer> ids = collect.keySet();
|
||||
|
||||
// 是否已生成当期续费订单
|
||||
LambdaQueryWrapper<OrderPay> renewWrapper = Wrappers.lambdaQuery(OrderPay.class).in(OrderPay::getRentOrderId, ids).groupBy(OrderPay::getRentOrderId).orderByDesc(OrderPay::getCreateTime);
|
||||
Page<OrderPay> page = new Page<OrderPay>(1, 1);
|
||||
// LambdaQueryWrapper<OrderPay> renewWrapper = Wrappers.lambdaQuery(OrderPay.class)
|
||||
renewWrapper.clear();
|
||||
renewWrapper
|
||||
.in(OrderPay::getRentOrderId, ids)
|
||||
.groupBy(OrderPay::getRentOrderId).orderByDesc(OrderPay::getCreateTime);
|
||||
Page<OrderPay> page = new Page<>(1, 1);
|
||||
List<OrderPay> renewOrderList = orderPayService.page(page, renewWrapper).getRecords();
|
||||
|
||||
//查找订单关联的商品
|
||||
@@ -124,7 +152,6 @@ public class OrderTask {
|
||||
// 计算逾期
|
||||
EquipmentOrderGoods eg = orderGoodsMap.get(item.getRentOrderId()).get(0);
|
||||
|
||||
|
||||
// 是否需要新增续费订单
|
||||
if (item.getExpirationTime().before(now) && item.getCurrPeriods() < item.getPeriods()) {
|
||||
OrderPay newRenewOrder = new OrderPay();
|
||||
@@ -163,7 +190,6 @@ public class OrderTask {
|
||||
newRenewOrder.setPayPrice(eg.getBatteryPrice());
|
||||
}
|
||||
|
||||
|
||||
orderPayService.save(newRenewOrder);
|
||||
// 已生成订单未付款
|
||||
} else if (item.getPayStatus().equals(PAY_STATUS_NO_PAY) && now.isAfter(item.getStartTime())) {
|
||||
@@ -177,7 +203,6 @@ public class OrderTask {
|
||||
orderService.lambdaUpdate().eq(Order::getOrderId, item.getRentOrderId()).set(Order::getExpirationDay, between).update();
|
||||
}
|
||||
|
||||
|
||||
// if(between > 1) {
|
||||
// Order order = collect.get(item.getRentOrderId()).get(0);
|
||||
// // 电池停电
|
||||
@@ -195,10 +220,10 @@ public class OrderTask {
|
||||
/**
|
||||
* 计算分润
|
||||
*/
|
||||
@Scheduled(cron="0 0/1 * * * ? ")
|
||||
// @Scheduled(cron="0 0/2 * * * ? ")
|
||||
@Scheduled(cron="${cron.profit:-}")
|
||||
@Transactional
|
||||
public void CalcProfit() {
|
||||
log.info("开始计算分润");
|
||||
// 查询所有未结算订单
|
||||
LambdaQueryWrapper<OrderPay> wrapper = Wrappers.lambdaQuery(OrderPay.class)
|
||||
.eq(OrderPay::getIsSettled, ORDER_SETTLED_NO)
|
||||
@@ -318,24 +343,28 @@ public class OrderTask {
|
||||
}
|
||||
Equipment equipment = equipmentMap.get(order.getEquipmentId());
|
||||
// 投资人收益
|
||||
String orderNo = order.getOrderNo();
|
||||
if (touziProfit.compareTo(BigDecimal.ZERO) > 0 && equipment!= null) {
|
||||
|
||||
User touziUser = touziUserMap.get(equipment.getTouziUserId());
|
||||
if (touziUser != null) {
|
||||
userService.updateBalanceByUserId(touziUser.getUserId(), touziProfit);
|
||||
Integer userId = touziUser.getUserId();
|
||||
userService.updateBalanceByUserId(userId, touziProfit);
|
||||
ProfitLog profitLog = new ProfitLog();
|
||||
profitLog.setUserId(touziUser.getUserId());
|
||||
profitLog.setUserId(userId);
|
||||
profitLog.setMoney(touziProfit);
|
||||
profitLog.setScene(1);
|
||||
profitLog.setMerchantCode(merchant.getMerchantCode());
|
||||
profitLog.setMerchantName(merchant.getMerchantName());
|
||||
profitLog.setOrderId(order.getId());
|
||||
profitLog.setOrderNo(order.getOrderNo());
|
||||
profitLog.setOrderNo(orderNo);
|
||||
profitLog.setOrderUserName(orderUser.getNickname());
|
||||
profitLog.setComments("投资设备:" + equipment.getEquipmentCode());
|
||||
profitLog.setEquipmentCode(equipment.getEquipmentCode());
|
||||
profitLog.setMerchantName(merchant.getMerchantName());
|
||||
profitLog.setOrderSource(order.getOrderSource());
|
||||
// profitLog.setIsRenew(order.getIsRenew());
|
||||
profitLogService.save(profitLog);
|
||||
log.info("发放投资人{}分润,订单号{}!", userId, orderNo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -343,20 +372,23 @@ public class OrderTask {
|
||||
if (tuijianProfit.compareTo(BigDecimal.ZERO) > 0) {
|
||||
User tuijianUser = tuijianUserMap.get(order.getDealerPhone());
|
||||
if (tuijianUser != null) {
|
||||
userService.updateBalanceByUserId(tuijianUser.getUserId(), tuijianProfit);
|
||||
Integer tuijianUserUserId = tuijianUser.getUserId();
|
||||
userService.updateBalanceByUserId(tuijianUserUserId, tuijianProfit);
|
||||
ProfitLog profitLog = new ProfitLog();
|
||||
profitLog.setUserId(tuijianUser.getUserId());
|
||||
profitLog.setUserId(tuijianUserUserId);
|
||||
profitLog.setMoney(tuijianProfit);
|
||||
profitLog.setScene(3);
|
||||
profitLog.setMerchantCode(merchant.getMerchantCode());
|
||||
profitLog.setMerchantName(merchant.getMerchantName());
|
||||
profitLog.setOrderId(order.getId());
|
||||
profitLog.setOrderNo(order.getOrderNo());
|
||||
profitLog.setOrderNo(orderNo);
|
||||
profitLog.setOrderUserName(orderUser.getNickname());
|
||||
profitLog.setComments("推广收益:" + order.getUserId());
|
||||
profitLog.setEquipmentCode(equipment.getEquipmentCode());
|
||||
profitLog.setMerchantName(merchant.getMerchantName());
|
||||
profitLog.setOrderSource(order.getOrderSource());
|
||||
// profitLog.setIsRenew(order.getIsRenew());
|
||||
profitLogService.save(profitLog);
|
||||
log.info("发放推荐人{}分润,订单号{}!", tuijianUserUserId, orderNo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,13 +404,15 @@ public class OrderTask {
|
||||
profitLog.setScene(4);
|
||||
profitLog.setMerchantCode(merchant.getMerchantCode());
|
||||
profitLog.setOrderId(order.getId());
|
||||
profitLog.setOrderNo(order.getOrderNo());
|
||||
profitLog.setOrderNo(orderNo);
|
||||
profitLog.setOrderUserName(orderUser.getNickname());
|
||||
profitLog.setComments("门店收益:" + order.getMerchantCode());
|
||||
profitLog.setEquipmentCode(equipment.getEquipmentCode());
|
||||
profitLog.setMerchantName(merchant.getMerchantName());
|
||||
profitLog.setOrderSource(order.getOrderSource());
|
||||
// profitLog.setIsRenew(order.getIsRenew());
|
||||
profitLogService.save(profitLog);
|
||||
log.info("发放门店{}分润,订单号{}!", mendianUserId, orderNo);
|
||||
}
|
||||
}
|
||||
// 计算区域经理收益
|
||||
@@ -395,20 +429,23 @@ public class OrderTask {
|
||||
}).findFirst().orElse(null);
|
||||
}
|
||||
if (manager != null) {
|
||||
userService.updateBalanceByUserId(manager.getUserId(), jingliProfit);
|
||||
Integer managerUserId = manager.getUserId();
|
||||
userService.updateBalanceByUserId(managerUserId, jingliProfit);
|
||||
ProfitLog profitLog = new ProfitLog();
|
||||
profitLog.setUserId(manager.getUserId());
|
||||
profitLog.setUserId(managerUserId);
|
||||
profitLog.setMoney(jingliProfit);
|
||||
profitLog.setMerchantCode(merchant.getMerchantCode());
|
||||
profitLog.setScene(5);
|
||||
profitLog.setOrderId(order.getId());
|
||||
profitLog.setOrderNo(order.getOrderNo());
|
||||
profitLog.setOrderNo(orderNo);
|
||||
profitLog.setOrderUserName(orderUser.getNickname());
|
||||
profitLog.setComments("区域经理收益:" + order.getMerchantCode());
|
||||
profitLog.setEquipmentCode(equipment.getEquipmentCode());
|
||||
profitLog.setMerchantName(merchant.getMerchantName());
|
||||
profitLog.setOrderSource(order.getOrderSource());
|
||||
// profitLog.setIsRenew(order.getIsRenew());
|
||||
profitLogService.save(profitLog);
|
||||
log.info("发放区域经理{}分润,订单号{}!", managerUserId, orderNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -420,4 +457,54 @@ public class OrderTask {
|
||||
orderPayService.update(updateWrapper);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 逾期预警
|
||||
*/
|
||||
// @Scheduled(cron = "0 30 9 * * ? ")
|
||||
@Scheduled(cron = "${cron.alert:-}")
|
||||
public void exceedAlert() {
|
||||
List<Order> alertList = orderService.findAlertList();
|
||||
if(CollectionUtil.isNotEmpty(alertList)){
|
||||
log.info("开始发送订单到期预警通知!");
|
||||
int succ = 0;
|
||||
for(Order order : alertList){
|
||||
SmsCaptchaParam aram = SmsCaptchaParam.builder()
|
||||
.phone(order.getPhone())
|
||||
.type(ESmsType.ALERT.name())
|
||||
.templateParam("{\"code\":" + Math.abs(order.getExpirationDay()) + "}")
|
||||
.build();
|
||||
try{
|
||||
ApiResult ret = aliSmsService.sendSms(aram);
|
||||
if(ret.isOk())
|
||||
succ++;
|
||||
} catch (ClientException e){
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
log.info(">>>>>>>>>>>>>>>>>>发送订单到期预警通知结束!总数{}条,成功{}条!", alertList.size(), succ);
|
||||
}
|
||||
|
||||
List<Order> overdueList = orderService.findAlertList();
|
||||
if(CollectionUtil.isNotEmpty(overdueList)) {
|
||||
log.info("开始发送订单超期提醒通知!");
|
||||
int succ = 0;
|
||||
for(Order order : overdueList){
|
||||
SmsCaptchaParam aram = SmsCaptchaParam.builder()
|
||||
.phone(order.getPhone())
|
||||
.type(ESmsType.OVERDUE.name())
|
||||
.templateParam("{\"code\":" + order.getExpirationDay() + "}")
|
||||
.build();
|
||||
try{
|
||||
ApiResult ret = aliSmsService.sendSms(aram);
|
||||
if(ret.isOk())
|
||||
succ++;
|
||||
} catch (ClientException e){
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
log.info("====================发送逾期提醒通知结束!总数{}条,成功{}条!", overdueList.size(), succ);
|
||||
}
|
||||
log.info("------------逾期预警处理结束!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.servlet.ServletUtil;
|
||||
import cn.hutool.http.useragent.UserAgent;
|
||||
import cn.hutool.http.useragent.UserAgentUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.annotation.OperationModule;
|
||||
@@ -179,7 +180,7 @@ public class OperationLogAspect {
|
||||
|| arg instanceof HttpServletResponse) {
|
||||
continue;
|
||||
}
|
||||
sb.append(JSONUtil.toJSONString(arg)).append(" ");
|
||||
sb.append(JSON.toJSONString(arg)).append(" ");
|
||||
}
|
||||
params = sb.toString();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.gxwebsoft.common.core.config;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
@@ -102,4 +103,6 @@ public class ConfigProperties {
|
||||
private String bucketName;
|
||||
private String bucketDomain;
|
||||
|
||||
@ApiModelProperty("项目默认租户")
|
||||
private Integer tenantId;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.gxwebsoft.common.core.config;
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
|
||||
@@ -11,5 +13,8 @@ public class HttpMessageConverter extends MappingJackson2HttpMessageConverter {
|
||||
List<MediaType> mediaTypes = new ArrayList<>();
|
||||
mediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
|
||||
setSupportedMediaTypes(mediaTypes);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
this.setObjectMapper(objectMapper);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class RestTemplateConfig {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.gxwebsoft.common.core.constants;
|
||||
|
||||
public class BalanceConstants {
|
||||
public interface BalanceConstants {
|
||||
// 余额变动场景
|
||||
public static final Integer BALANCE_RECHARGE = 10; // 用户充值
|
||||
public static final Integer BALANCE_USE = 20; // 用户消费
|
||||
public static final Integer BALANCE_RE_LET = 21; // 续租
|
||||
public static final Integer BALANCE_ADMIN = 30; // 管理员操作
|
||||
public static final Integer BALANCE_REFUND = 40; // 订单退款
|
||||
public static final Integer BALANCE_WITHDRAW = 50; // 提现
|
||||
public static final Integer BALANCE_WITHDRAW_REJECT = 60; // 提现失败
|
||||
}
|
||||
|
||||
@@ -8,13 +8,14 @@ public class OrderConstants {
|
||||
public static final String PAY_METHOD_OTHER = "40"; // 其他支付
|
||||
|
||||
// 付款状态
|
||||
public static final Integer PAY_STATUS_NO_PAY = 10; // 未付款
|
||||
public static final Integer PAY_STATUS_SUCCESS = 20; // 已付款
|
||||
public static final int PAY_STATUS_NO_PAY = 10; // 未付款
|
||||
public static final int PAY_STATUS_SUCCESS = 20; // 已付款
|
||||
|
||||
// 发货状态
|
||||
public static final Integer DELIVERY_STATUS_NO = 10; // 未发货
|
||||
public static final Integer DELIVERY_STATUS_YES = 20; // 已发货
|
||||
public static final Integer DELIVERY_STATUS_30 = 30; // 部分发货
|
||||
public static final Integer DELIVERY_STATUS_ACCEPT = 40; // 已绑定
|
||||
|
||||
// 收货状态
|
||||
public static final Integer RECEIPT_STATUS_NO = 10; // 未收货
|
||||
@@ -23,10 +24,10 @@ public class OrderConstants {
|
||||
public static final Integer RECEIPT_STATUS_RETURN = 30; // 已退货
|
||||
|
||||
// 订单状态
|
||||
public static final Integer ORDER_STATUS_DOING = 10; // 进行中
|
||||
public static final Integer ORDER_STATUS_DOING = 10; // 待付款
|
||||
public static final Integer ORDER_STATUS_CANCEL = 20; // 已取消
|
||||
public static final Integer ORDER_STATUS_TO_CANCEL = 21; // 待取消
|
||||
public static final Integer ORDER_STATUS_COMPLETED = 30; // 已绑定
|
||||
public static final Integer ORDER_STATUS_COMPLETED = 30; // 已付款
|
||||
public static final Integer ORDER_STATUS_OVER = 40; // 已完成
|
||||
|
||||
// 订单结算状态
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.gxwebsoft.common.core.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum EProfitScene {
|
||||
ASSET(1, "资产收益"),
|
||||
SERVICE(2, "服务费收益"),
|
||||
PROMOTION(3, "推广收益"),
|
||||
MERCHANT(4, "门店收益"),
|
||||
SHOP(5, "资产收益");
|
||||
private Integer value;
|
||||
private String desc;
|
||||
|
||||
public static String getNameByValue(int value) {
|
||||
for (EProfitScene myEnum : values()) {
|
||||
if (myEnum.value == value) {
|
||||
return myEnum.desc;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
18
src/main/java/com/gxwebsoft/common/core/enums/ESmsType.java
Normal file
18
src/main/java/com/gxwebsoft/common/core/enums/ESmsType.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package com.gxwebsoft.common.core.enums;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum ESmsType {
|
||||
LOGIN("SMS_290002047"),
|
||||
RECEIPT("SMS_290002047"),
|
||||
ALERT("SMS_464505085"),
|
||||
OVERDUE("SMS_464525076");
|
||||
|
||||
@ApiModelProperty("短信模版编号")
|
||||
private String templateId;
|
||||
|
||||
}
|
||||
@@ -3,15 +3,23 @@ package com.gxwebsoft.common.core.exception;
|
||||
import com.gxwebsoft.common.core.Constants;
|
||||
import com.gxwebsoft.common.core.utils.CommonUtil;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.validation.ObjectError;
|
||||
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 全局异常处理器
|
||||
@@ -19,11 +27,10 @@ import javax.servlet.http.HttpServletResponse;
|
||||
* @author WebSoft
|
||||
* @since 2018-02-22 11:29:30
|
||||
*/
|
||||
@ControllerAdvice
|
||||
@RestControllerAdvice
|
||||
@Slf4j
|
||||
public class GlobalExceptionHandler {
|
||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@ResponseBody
|
||||
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
|
||||
public ApiResult<?> methodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException e,
|
||||
HttpServletResponse response) {
|
||||
@@ -31,26 +38,33 @@ public class GlobalExceptionHandler {
|
||||
return new ApiResult<>(Constants.RESULT_ERROR_CODE, "请求方式不正确").setError(e.toString());
|
||||
}
|
||||
|
||||
@ResponseBody
|
||||
@ExceptionHandler(AccessDeniedException.class)
|
||||
public ApiResult<?> accessDeniedExceptionHandler(AccessDeniedException e, HttpServletResponse response) {
|
||||
CommonUtil.addCrossHeaders(response);
|
||||
return new ApiResult<>(Constants.UNAUTHORIZED_CODE, Constants.UNAUTHORIZED_MSG).setError(e.toString());
|
||||
}
|
||||
|
||||
@ResponseBody
|
||||
@ExceptionHandler(BusinessException.class)
|
||||
public ApiResult<?> businessExceptionHandler(BusinessException e, HttpServletResponse response) {
|
||||
CommonUtil.addCrossHeaders(response);
|
||||
return new ApiResult<>(e.getCode(), e.getMessage());
|
||||
}
|
||||
|
||||
@ResponseBody
|
||||
@ExceptionHandler(Throwable.class)
|
||||
public ApiResult<?> exceptionHandler(Throwable e, HttpServletResponse response) {
|
||||
logger.error(e.getMessage(), e);
|
||||
log.error(e.getMessage(), e);
|
||||
CommonUtil.addCrossHeaders(response);
|
||||
return new ApiResult<>(Constants.RESULT_ERROR_CODE, Constants.RESULT_ERROR_MSG).setError(e.toString());
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = MethodArgumentNotValidException.class)
|
||||
@ResponseBody
|
||||
public ApiResult<?> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e)
|
||||
{
|
||||
//获取实体类定义的校验注解字段上的message作为异常信息,@NotBlank(message = "用户密码不能为空!")异常信息即为"用户密码不能为空!"
|
||||
List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
|
||||
String message = allErrors.stream().map(s -> s.getDefaultMessage()).collect(Collectors.joining(";"));
|
||||
List<String> msgList = Arrays.asList(message.split(";"));
|
||||
return new ApiResult<>(Constants.RESULT_ERROR_CODE, msgList.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.system.entity.Setting;
|
||||
import com.gxwebsoft.common.system.service.SettingService;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -20,20 +22,23 @@ import javax.annotation.Resource;
|
||||
* @author leng
|
||||
*
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@Getter
|
||||
public class AlipayConfigUtil {
|
||||
private final StringRedisTemplate stringRedisTemplate;
|
||||
public Integer tenantId;
|
||||
public String gateway;
|
||||
public JSONObject config;
|
||||
public String appId;
|
||||
public String privateKey;
|
||||
public String appCertPublicKey;
|
||||
public String alipayCertPublicKey;
|
||||
public String alipayRootCert;
|
||||
private Integer tenantId;
|
||||
private String gateway;
|
||||
private JSONObject config;
|
||||
private String appId;
|
||||
private String privateKey;
|
||||
private String appCertPublicKey;
|
||||
private String alipayCertPublicKey;
|
||||
private String alipayRootCert;
|
||||
|
||||
@Resource
|
||||
private ConfigProperties pathConfig;
|
||||
@Resource
|
||||
private SettingService settingService;
|
||||
|
||||
public AlipayConfigUtil(StringRedisTemplate stringRedisTemplate){
|
||||
@@ -69,9 +74,8 @@ public class AlipayConfigUtil {
|
||||
* 获取支付宝秘钥
|
||||
*/
|
||||
public JSONObject payment(Integer tenantId) {
|
||||
System.out.println("tenantId = " + tenantId);
|
||||
String key = "setting:payment:" + tenantId;
|
||||
System.out.println("key = " + key);
|
||||
log.info("tenantId:{}, redis key:{}",tenantId, key);
|
||||
String cache = stringRedisTemplate.opsForValue().get(key);
|
||||
if (cache == null) {
|
||||
Setting payment = settingService.getData("payment");
|
||||
|
||||
@@ -5,12 +5,14 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.result.RedisResult;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.geo.Point;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -22,7 +24,8 @@ import static com.gxwebsoft.common.core.constants.RedisConstants.CACHE_NULL_TTL;
|
||||
|
||||
@Component
|
||||
public class CacheClient {
|
||||
private final StringRedisTemplate stringRedisTemplate;
|
||||
@Resource
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
public static Integer tenantId;
|
||||
|
||||
public CacheClient(StringRedisTemplate stringRedisTemplate){
|
||||
|
||||
@@ -3,13 +3,10 @@ package com.gxwebsoft.common.core.utils;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.system.service.SettingService;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
@@ -30,14 +27,6 @@ public class WxOfficialUtil {
|
||||
public String expires_in;
|
||||
public String nickname;
|
||||
|
||||
|
||||
@Resource
|
||||
private SettingService settingService;
|
||||
@Resource
|
||||
private ConfigProperties pathConfig;
|
||||
@Resource
|
||||
private CacheClient cacheClient;
|
||||
|
||||
public WxOfficialUtil(StringRedisTemplate stringRedisTemplate){
|
||||
this.stringRedisTemplate = stringRedisTemplate;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gxwebsoft.common.core.web;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.gxwebsoft.common.core.Constants;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -37,6 +38,10 @@ public class ApiResult<T> implements Serializable {
|
||||
this(code, message, null);
|
||||
}
|
||||
|
||||
public ApiResult(String message) {
|
||||
this(Constants.RESULT_OK_CODE, message, null);
|
||||
}
|
||||
|
||||
public ApiResult(Integer code, String message, T data) {
|
||||
this(code, message, data, null);
|
||||
}
|
||||
@@ -84,4 +89,19 @@ public class ApiResult<T> implements Serializable {
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isOk(){
|
||||
return this.code == Constants.RESULT_OK_CODE;
|
||||
}
|
||||
|
||||
public static <T> ApiResult<T> ok(T data){
|
||||
return new ApiResult(Constants.RESULT_OK_CODE, "成功", data);
|
||||
}
|
||||
|
||||
public static <T> ApiResult<T> ok(){
|
||||
return new ApiResult(Constants.RESULT_OK_CODE, "成功");
|
||||
}
|
||||
|
||||
public static ApiResult fail(String message){
|
||||
return new ApiResult(Constants.RESULT_ERROR_CODE, message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,8 +42,6 @@ public class BaseController {
|
||||
@Resource
|
||||
private MerchantClerkService merchantClerkService;
|
||||
@Resource
|
||||
private CacheClient cacheClient;
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.gxwebsoft.common.core.web;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
@@ -11,6 +13,7 @@ import java.util.List;
|
||||
* @author WebSoft
|
||||
* @since 2017-06-10 10:10:02
|
||||
*/
|
||||
@Data
|
||||
public class PageResult<T> implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -20,6 +23,9 @@ public class PageResult<T> implements Serializable {
|
||||
@ApiModelProperty(value = "总数量")
|
||||
private Long count;
|
||||
|
||||
@ApiModelProperty(value = "其他数据")
|
||||
private JSONObject otherData;
|
||||
|
||||
public PageResult() {
|
||||
}
|
||||
|
||||
@@ -28,23 +34,7 @@ public class PageResult<T> implements Serializable {
|
||||
}
|
||||
|
||||
public PageResult(List<T> list, Long count) {
|
||||
setList(list);
|
||||
setCount(count);
|
||||
}
|
||||
|
||||
public List<T> getList() {
|
||||
return this.list;
|
||||
}
|
||||
|
||||
public void setList(List<T> list) {
|
||||
this.list = list;
|
||||
}
|
||||
|
||||
public Long getCount() {
|
||||
return this.count;
|
||||
}
|
||||
|
||||
public void setCount(Long count) {
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gxwebsoft.common.system.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import com.gxwebsoft.common.core.utils.CacheClient;
|
||||
import com.gxwebsoft.common.core.utils.CommonUtil;
|
||||
import com.gxwebsoft.common.core.web.*;
|
||||
@@ -40,7 +41,7 @@ public class AccessKeyController extends BaseController {
|
||||
final PageResult<AccessKey> accessKeyPageResult = accessKeyService.pageRel(param);
|
||||
if (param.getCode() != null) {
|
||||
// 短信验证码校验
|
||||
String code = cacheClient.get(param.getPhone(), String.class);
|
||||
String code = cacheClient.get(ESmsType.LOGIN.name() + ":" + param.getPhone(), String.class);
|
||||
if (StrUtil.equals(code,param.getCode())) {
|
||||
return success(accessKeyPageResult);
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@ import com.aliyuncs.CommonResponse;
|
||||
import com.aliyuncs.DefaultAcsClient;
|
||||
import com.aliyuncs.IAcsClient;
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.aliyuncs.exceptions.ServerException;
|
||||
import com.aliyuncs.http.MethodType;
|
||||
import com.aliyuncs.profile.DefaultProfile;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.google.gson.Gson;
|
||||
import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import com.gxwebsoft.common.core.security.JwtSubject;
|
||||
import com.gxwebsoft.common.core.security.JwtUtil;
|
||||
import com.gxwebsoft.common.core.utils.CacheClient;
|
||||
@@ -31,18 +31,23 @@ import com.gxwebsoft.common.system.param.UpdatePasswordParam;
|
||||
import com.gxwebsoft.common.system.result.CaptchaResult;
|
||||
import com.gxwebsoft.common.system.result.LoginResult;
|
||||
import com.gxwebsoft.common.system.service.AccessKeyService;
|
||||
import com.gxwebsoft.common.system.service.AliSmsService;
|
||||
import com.gxwebsoft.common.system.service.LoginRecordService;
|
||||
import com.gxwebsoft.common.system.service.RoleMenuService;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import com.wf.captcha.SpecCaptcha;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.validation.Valid;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.HashMap;
|
||||
@@ -59,6 +64,7 @@ import java.util.concurrent.TimeUnit;
|
||||
@Api(tags = "登录认证")
|
||||
@RestController
|
||||
@RequestMapping("/api")
|
||||
@Slf4j
|
||||
public class MainController extends BaseController {
|
||||
@Resource
|
||||
private ConfigProperties configProperties;
|
||||
@@ -71,10 +77,11 @@ public class MainController extends BaseController {
|
||||
@Resource
|
||||
private CacheClient cacheClient;
|
||||
@Resource
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
@Resource
|
||||
private AccessKeyService accessKeyService;
|
||||
@Resource
|
||||
private AliSmsService aliSmsService;
|
||||
|
||||
@OperationLog
|
||||
@ApiOperation("用户登录")
|
||||
@PostMapping("/login")
|
||||
public ApiResult<LoginResult> login(@RequestBody LoginParam param, HttpServletRequest request) {
|
||||
@@ -205,41 +212,38 @@ public class MainController extends BaseController {
|
||||
|
||||
@ApiOperation("短信验证码")
|
||||
@PostMapping("/sendSmsCaptcha")
|
||||
public ApiResult<?> sendSmsCaptcha(@RequestBody SmsCaptchaParam param) {
|
||||
DefaultProfile profile = DefaultProfile.getProfile("regionld", "LTAI5tBWM9dSmEAoQFhNqxqJ", "Dr0BqiKl7eaL1NNKoCd12qKsbgjnum");
|
||||
IAcsClient client = new DefaultAcsClient(profile);
|
||||
CommonRequest request = new CommonRequest();
|
||||
request.setSysMethod(MethodType.POST);
|
||||
request.setSysDomain("dysmsapi.aliyuncs.com");
|
||||
request.setSysVersion("2017-05-25");
|
||||
request.setSysAction("SendSms");
|
||||
request.putQueryParameter("RegionId", "cn-hangzhou");
|
||||
request.putQueryParameter("PhoneNumbers", param.getPhone());
|
||||
request.putQueryParameter("SignName", "南宁网宿科技");
|
||||
request.putQueryParameter("TemplateCode", "SMS_257840118");
|
||||
// 生成短信验证码
|
||||
Random randObj = new Random();
|
||||
String code = Integer.toString(100000 + randObj.nextInt(900000));
|
||||
request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
|
||||
try {
|
||||
CommonResponse response = client.getCommonResponse(request);
|
||||
String json = response.getData();
|
||||
Gson g = new Gson();
|
||||
HashMap result = g.fromJson(json, HashMap.class);
|
||||
if("OK".equals(result.get("Message"))) {
|
||||
cacheClient.set(param.getPhone(),code,5L,TimeUnit.MINUTES);
|
||||
return success("发送成功",result.get("Message"));
|
||||
}else{
|
||||
return fail("发送失败");
|
||||
public ApiResult<?> sendSmsCaptcha(@RequestBody @Valid SmsCaptchaParam param) {
|
||||
try {
|
||||
// User user = getLoginUser();
|
||||
// param.setTenantId(user.getTenantId());
|
||||
|
||||
int iCode = new Random().nextInt(999999) + 1000000;
|
||||
String code = String.valueOf(iCode).substring(1);
|
||||
param.setTemplateParam("{\"code\":" + code + "}");
|
||||
ApiResult ret = aliSmsService.sendSms(param);
|
||||
if(ret.isOk()){
|
||||
ESmsType type = ESmsType.valueOf(param.getType());
|
||||
cacheClient.set(type.name() + ":" + param.getPhone(), code,5L,TimeUnit.MINUTES);
|
||||
log.info("发送验证码为{}", cacheClient.get(type.name() + ":" + param.getPhone()));
|
||||
}
|
||||
return ret;
|
||||
} catch (ClientException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return fail("发送出错!");
|
||||
}
|
||||
} catch (ServerException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return fail("发送失败");
|
||||
}
|
||||
|
||||
// @ApiOperation("预警短信")
|
||||
// @PostMapping("/sendSmsAlert")
|
||||
// public ApiResult<?> sendSmsAlert(@RequestBody SmsCaptchaParam param) {
|
||||
// try {
|
||||
// return aliSmsService.sendSms(param);
|
||||
// } catch (ClientException e) {
|
||||
// log.error(e.getMessage(), e);
|
||||
// return fail("发送出错!");
|
||||
// }
|
||||
// }
|
||||
|
||||
@OperationLog
|
||||
@ApiOperation("重置密码")
|
||||
@PutMapping("/password")
|
||||
@@ -251,7 +255,7 @@ public class MainController extends BaseController {
|
||||
return fail("验证码不能为空");
|
||||
}
|
||||
// 短信验证码校验
|
||||
String code = cacheClient.get(user.getPhone(), String.class);
|
||||
String code = cacheClient.get(ESmsType.LOGIN.name() + ":" + user.getPhone(), String.class);
|
||||
if (!StrUtil.equals(code,user.getCode())) {
|
||||
return fail("验证码不正确");
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
AND a.username LIKE CONCAT('%', #{param.username}, '%')
|
||||
</if>
|
||||
<if test="param.nickname != null">
|
||||
AND a.nickname LIKE CONCAT('%', #{param.nickname}, '%')
|
||||
AND (a.nickname LIKE CONCAT('%', #{param.nickname}, '%') or a.phone like CONCAT(#{param.nickname}, '%'))
|
||||
</if>
|
||||
<if test="param.type != null">
|
||||
AND a.type = #{param.type}
|
||||
@@ -108,7 +108,7 @@
|
||||
<if test="param.roleId != null">
|
||||
AND a.user_id IN (SELECT user_id FROM sys_user_role WHERE role_id=#{param.roleId})
|
||||
</if>
|
||||
<if test="param.userIds != null">
|
||||
<if test="param.userIds != null and param.userIds.size > 0">
|
||||
AND a.user_id IN
|
||||
<foreach collection="param.userIds" item="item" separator="," open="(" close=")">
|
||||
#{item}
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
package com.gxwebsoft.common.system.param;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
@@ -14,18 +21,29 @@ import java.io.Serializable;
|
||||
* @since 2021-08-30 17:35:16
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
//@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(description = "发送短信验证码参数")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Validated
|
||||
public class SmsCaptchaParam implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("短信签名")
|
||||
private String signName;
|
||||
// @ApiModelProperty("短信签名")
|
||||
// private String signName;
|
||||
|
||||
@ApiModelProperty("手机号码")
|
||||
@ApiModelProperty(value = "手机号码", required = true)
|
||||
@NotBlank(message = "手机号码不能为空!")
|
||||
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
|
||||
private String phone;
|
||||
|
||||
@ApiModelProperty("短信模板")
|
||||
private String TemplateParam;
|
||||
@ApiModelProperty("短信模板参数")
|
||||
private String templateParam;
|
||||
|
||||
@ApiModelProperty("验证码类型")
|
||||
private String type = ESmsType.LOGIN.name();
|
||||
|
||||
@ApiModelProperty(value = "租户id", hidden = true)
|
||||
private Integer tenantId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.gxwebsoft.common.system.service;
|
||||
|
||||
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.system.param.SmsCaptchaParam;
|
||||
|
||||
/**
|
||||
* 阿里短信服务层
|
||||
*
|
||||
* @author WebSoft
|
||||
* @since 2018-12-24 16:10:41
|
||||
*/
|
||||
public interface AliSmsService {
|
||||
|
||||
/**
|
||||
* 发送阿里短信
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
ApiResult sendSms(SmsCaptchaParam param) throws ClientException;
|
||||
|
||||
}
|
||||
@@ -50,6 +50,8 @@ public interface SettingService extends IService<Setting> {
|
||||
|
||||
Setting getData(String settingKey);
|
||||
|
||||
String getContent(String settingKey, Integer tenantId);
|
||||
|
||||
JSONObject getCache(String key);
|
||||
|
||||
void initConfig(Setting setting);
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
package com.gxwebsoft.common.system.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.aliyuncs.CommonRequest;
|
||||
import com.aliyuncs.CommonResponse;
|
||||
import com.aliyuncs.DefaultAcsClient;
|
||||
import com.aliyuncs.IAcsClient;
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.aliyuncs.http.MethodType;
|
||||
import com.aliyuncs.profile.DefaultProfile;
|
||||
import com.google.gson.Gson;
|
||||
import com.gxwebsoft.common.core.Constants;
|
||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.system.param.SmsCaptchaParam;
|
||||
import com.gxwebsoft.common.system.service.AliSmsService;
|
||||
import com.gxwebsoft.common.system.service.SettingService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class AliSmsServiceImpl implements AliSmsService {
|
||||
private final SettingService settingService;
|
||||
private final ConfigProperties configProperties;
|
||||
@Override
|
||||
public ApiResult sendSms(SmsCaptchaParam param) throws ClientException {
|
||||
Integer tenantId = param.getTenantId();
|
||||
if(null == tenantId){
|
||||
tenantId = configProperties.getTenantId();
|
||||
}
|
||||
String smsConfig = settingService.getContent("sms", tenantId);
|
||||
if(StrUtil.isBlank(smsConfig)){
|
||||
return new ApiResult(Constants.RESULT_ERROR_CODE, "短信参数未配置!");
|
||||
}
|
||||
JSONObject smsConfigJson = JSON.parseObject(smsConfig);
|
||||
|
||||
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", smsConfigJson.getString("accessKeyId"), smsConfigJson.getString("accessKeySecret"));
|
||||
IAcsClient client = new DefaultAcsClient(profile);
|
||||
String signName = smsConfigJson.getString("sign");
|
||||
|
||||
ESmsType type = ESmsType.valueOf(param.getType());
|
||||
CommonRequest request = new CommonRequest();
|
||||
request.setSysMethod(MethodType.POST);
|
||||
request.setSysDomain("dysmsapi.aliyuncs.com");
|
||||
request.setSysVersion("2017-05-25");
|
||||
request.setSysAction("SendSms");
|
||||
request.putQueryParameter("RegionId", "cn-hangzhou");
|
||||
String phone = param.getPhone();
|
||||
request.putQueryParameter("PhoneNumbers", phone);
|
||||
request.putQueryParameter("SignName", signName);
|
||||
request.putQueryParameter("TemplateCode", type.getTemplateId());
|
||||
request.putQueryParameter("TemplateParam", param.getTemplateParam());
|
||||
|
||||
CommonResponse response = client.getCommonResponse(request);
|
||||
String json = response.getData();
|
||||
JSONObject result = JSON.parseObject(json);
|
||||
String message = result.getString("Message");
|
||||
if("OK".equals(message)) {
|
||||
return new ApiResult("发送成功");
|
||||
}
|
||||
log.warn("阿里云短信发送失败!{}", json);
|
||||
return new ApiResult(Constants.RESULT_ERROR_CODE, "发送失败!" + message);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.gxwebsoft.common.system.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@@ -99,6 +100,32 @@ public class SettingServiceImpl extends ServiceImpl<SettingMapper, Setting> impl
|
||||
return query().eq("setting_key", settingKey).one();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getContent(String settingKey, Integer tenantId) {
|
||||
String redisKey = settingKey + ":";
|
||||
if(null != tenantId){
|
||||
redisKey += tenantId;
|
||||
} else {
|
||||
redisKey += -1;
|
||||
}
|
||||
if(stringRedisTemplate.hasKey(redisKey)){
|
||||
return stringRedisTemplate.opsForValue().get(redisKey);
|
||||
}
|
||||
|
||||
Setting setting = query().eq("setting_key", settingKey)
|
||||
.eq(null != tenantId, "tenant_id", tenantId)
|
||||
.eq("deleted", 0)
|
||||
.orderByDesc("setting_id")
|
||||
.last("limit 1")
|
||||
.one();
|
||||
if(null == setting){
|
||||
return "";
|
||||
}
|
||||
String ret = setting.getContent();
|
||||
stringRedisTemplate.opsForValue().set(redisKey, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getCache(String key) {
|
||||
final String cache = stringRedisTemplate.opsForValue().get(key);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<if test="param.userId != null">
|
||||
AND a.user_id = #{param.userId}
|
||||
</if>
|
||||
<if test="param.scene != null">
|
||||
<if test="param.scene != null and param.scene != 0">
|
||||
AND a.scene = #{param.scene}
|
||||
</if>
|
||||
<if test="param.sceneMultiple != null">
|
||||
@@ -46,12 +46,10 @@
|
||||
<if test="param.status != null">
|
||||
AND a.status = #{param.status}
|
||||
</if>
|
||||
<if test="param.deleted != null">
|
||||
AND a.deleted = #{param.deleted}
|
||||
</if>
|
||||
<if test="param.deleted == null">
|
||||
AND a.deleted = 0
|
||||
</if>
|
||||
<choose>
|
||||
<when test="param.deleted != null">AND a.deleted = #{param.deleted}</when>
|
||||
<otherwise>AND a.deleted = 0</otherwise>
|
||||
</choose>
|
||||
<if test="param.merchantCode != null">
|
||||
AND a.merchant_code LIKE CONCAT('%', #{param.merchantCode}, '%')
|
||||
</if>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.gxwebsoft.open.controller;
|
||||
|
||||
import cn.hutool.core.bean.copier.BeanCopier;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
@@ -14,7 +17,10 @@ import com.gxwebsoft.apps.param.EquipmentParam;
|
||||
import com.gxwebsoft.apps.service.EquipmentRecordService;
|
||||
import com.gxwebsoft.apps.service.EquipmentService;
|
||||
import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.constants.OrderConstants;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import com.gxwebsoft.common.core.utils.AlipayConfigUtil;
|
||||
import com.gxwebsoft.common.core.utils.CacheClient;
|
||||
import com.gxwebsoft.common.core.utils.ImageUtil;
|
||||
import com.gxwebsoft.common.core.web.*;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
@@ -24,20 +30,24 @@ import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.entity.OrderPay;
|
||||
import com.gxwebsoft.shop.entity.OrderRefund;
|
||||
import com.gxwebsoft.shop.param.OrderParam;
|
||||
import com.gxwebsoft.shop.param.OrderReceiptParam;
|
||||
import com.gxwebsoft.shop.service.OrderPayService;
|
||||
import com.gxwebsoft.shop.service.OrderRefundService;
|
||||
import com.gxwebsoft.shop.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -52,6 +62,7 @@ import static com.gxwebsoft.common.core.constants.OrderConstants.*;
|
||||
* @author 科技小王子
|
||||
* @since 2022-11-30 02:11:16
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "设备管理管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/open/equipment")
|
||||
@@ -76,21 +87,20 @@ public class OpenEquipmentController extends BaseController {
|
||||
@Resource
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
@Resource
|
||||
private CacheClient cacheClient;
|
||||
|
||||
@PreAuthorize("hasAuthority('apps:equipment:list')")
|
||||
@OperationLog
|
||||
@ApiOperation("分页查询设备管理")
|
||||
@GetMapping("/page")
|
||||
public ApiResult<PageResult<Equipment>> page(EquipmentParam param) {
|
||||
// 使用关联查询
|
||||
PageParam<Equipment, EquipmentParam> page = new PageParam<>(param);
|
||||
page.setDefaultOrder("create_time desc");
|
||||
if (getMerchantCode() != null) {
|
||||
param.setMerchantCode(getMerchantCode());
|
||||
}
|
||||
return success(equipmentService.pageRel(param));
|
||||
}
|
||||
|
||||
@OperationLog
|
||||
@ApiOperation("查询全部设备管理")
|
||||
@GetMapping()
|
||||
public ApiResult<List<Equipment>> list(EquipmentParam param) {
|
||||
@@ -205,20 +215,19 @@ public class OpenEquipmentController extends BaseController {
|
||||
model.setDescribe("扫码租赁电池");
|
||||
request.setBizModel(model);
|
||||
AlipayOpenAppQrcodeCreateResponse response = alipayClient.certificateExecute(request);
|
||||
System.out.println(response.getBody());
|
||||
log.info("支付宝扫码返回:{}", response.getBody());
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
final JSONObject jsonObject = JSONObject.parseObject(response.getBody());
|
||||
final String alipay_open_app_qrcode_create_response = jsonObject.getString("alipay_open_app_qrcode_create_response");
|
||||
final JSONObject jsonObject1 = JSONObject.parseObject(alipay_open_app_qrcode_create_response);
|
||||
return jsonObject1.getString("qr_code_url");
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("绑定设备")
|
||||
@OperationLog
|
||||
@PostMapping("/bind")
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
public ApiResult<?> bindEquipment(@RequestBody Equipment equipment) {
|
||||
@@ -252,7 +261,7 @@ public class OpenEquipmentController extends BaseController {
|
||||
record.setMerchantCode(one.getMerchantCode());
|
||||
equipmentRecordService.save(record);
|
||||
// 订单发货
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_ACCEPT);
|
||||
order.setOrderStatus(ORDER_STATUS_COMPLETED);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
order.setExpirationTime(DateUtil.nextMonth());
|
||||
@@ -260,13 +269,9 @@ public class OpenEquipmentController extends BaseController {
|
||||
|
||||
if(order.getOrderSource() == 10) {
|
||||
order.setOrderStatus(ORDER_STATUS_OVER);
|
||||
|
||||
}
|
||||
orderService.updateById(order);
|
||||
|
||||
|
||||
|
||||
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("userId", loginUser.getUserId());
|
||||
param.put("userName", loginUser.getNickname());
|
||||
@@ -275,18 +280,18 @@ public class OpenEquipmentController extends BaseController {
|
||||
try {
|
||||
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity("https://battery.zfdliot.com/api/battery/batteryBindUser", param, JSONObject.class);
|
||||
JSONObject body = responseEntity.getBody();
|
||||
System.out.println(body);
|
||||
log.info("电池绑定调用第三方返回:{}", body.toString());
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
|
||||
orderPayService.lambdaUpdate().set(OrderPay::getEquipmentId, one.getEquipmentId()).update();
|
||||
return success("绑定成功");
|
||||
}
|
||||
return fail("绑定失败");
|
||||
}
|
||||
|
||||
@OperationLog
|
||||
@ApiOperation("更换设备")
|
||||
@PostMapping("/change")
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@@ -303,23 +308,29 @@ public class OpenEquipmentController extends BaseController {
|
||||
|
||||
// 新电池
|
||||
Equipment one = equipmentService.getByEquipmentCode(equipmentCode);
|
||||
if (one == null) {
|
||||
return fail("新设备不存在");
|
||||
}
|
||||
|
||||
String newMerchantCode = one.getMerchantCode();
|
||||
// 旧电池
|
||||
Equipment old = equipmentService.getById(oldEqId);
|
||||
String oldMerchantCode = old.getMerchantCode();
|
||||
String oldMerchantCode = order.getMerchantCode();
|
||||
|
||||
|
||||
if (one == null) {
|
||||
return fail("设备不存在");
|
||||
}
|
||||
if (!one.getUserId().equals(0)) {
|
||||
Integer userId = one.getUserId();
|
||||
if (null != userId && !userId.equals(0)) {
|
||||
return fail("该设备已被绑定");
|
||||
}
|
||||
|
||||
Integer orderUserId = order.getUserId();
|
||||
if(null == orderUserId || 0 == orderUserId){
|
||||
orderUserId = loginUserId;
|
||||
}
|
||||
|
||||
// 绑定新电池
|
||||
Equipment saveData = new Equipment();
|
||||
saveData.setEquipmentId(one.getEquipmentId());
|
||||
saveData.setUserId(loginUserId);
|
||||
saveData.setUserId(orderUserId);
|
||||
saveData.setOrderId(orderId);
|
||||
saveData.setMerchantCode(oldMerchantCode);
|
||||
boolean b = equipmentService.updateById(saveData);
|
||||
@@ -327,9 +338,9 @@ public class OpenEquipmentController extends BaseController {
|
||||
EquipmentRecord record = new EquipmentRecord();
|
||||
record.setEquipmentCode(equipmentCode);
|
||||
record.setEventType(EVENT_TYPE_BIND);
|
||||
record.setUserId(loginUserId);
|
||||
record.setUserId(orderUserId);
|
||||
record.setOrderId(orderId);
|
||||
record.setMerchantCode(one.getMerchantCode());
|
||||
record.setMerchantCode(oldMerchantCode);
|
||||
equipmentRecordService.save(record);
|
||||
|
||||
if (b) {
|
||||
@@ -341,7 +352,7 @@ public class OpenEquipmentController extends BaseController {
|
||||
// 记录明细
|
||||
EquipmentRecord record2 = new EquipmentRecord();
|
||||
record2.setEquipmentCode(old.getEquipmentCode());
|
||||
record2.setUserId(loginUserId);
|
||||
record2.setUserId(orderUserId);
|
||||
record2.setOrderId(orderId);
|
||||
record2.setEventType(EVENT_TYPE_UNBIND);
|
||||
record2.setMerchantCode(one.getMerchantCode());
|
||||
@@ -349,6 +360,7 @@ public class OpenEquipmentController extends BaseController {
|
||||
// 更新订单
|
||||
order.setEquipmentId(one.getEquipmentId());
|
||||
orderService.updateById(order);
|
||||
|
||||
User loginUser = getLoginUser();
|
||||
// 通知第三方
|
||||
/**
|
||||
@@ -366,20 +378,28 @@ public class OpenEquipmentController extends BaseController {
|
||||
param.put("battery_sn", one.getEquipmentCode());
|
||||
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity("https://battery.zfdliot.com/api/battery/batteryBindUser", param, JSONObject.class);
|
||||
JSONObject body = responseEntity.getBody();
|
||||
System.out.println(body);
|
||||
log.info("电池更换调用第三方返回:{}", body);
|
||||
return success("换电成功");
|
||||
|
||||
}
|
||||
return fail("换电失败");
|
||||
}
|
||||
|
||||
@ApiOperation("重置")
|
||||
@ApiOperation("确认收货")
|
||||
@PostMapping("/receipt")
|
||||
public ApiResult<?> receipt(@RequestBody Order order) {
|
||||
@OperationLog
|
||||
public ApiResult<?> receipt(@RequestBody @Valid OrderReceiptParam receiptParam) {
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
|
||||
Order order = orderService.getById(receiptParam.getOrderId());
|
||||
Integer receiptStatus = order.getReceiptStatus();
|
||||
if(receiptStatus == 20){
|
||||
return fail("订单已确认收货,不能重复确认!");
|
||||
}
|
||||
// 验证身份证真实性
|
||||
if(StringUtils.hasText(order.getOrderSourceData())) {
|
||||
String orderSourceDataString = order.getOrderSourceData();
|
||||
if(StringUtils.hasText(receiptParam.getOrderSourceData())) {
|
||||
String orderSourceDataString = receiptParam.getOrderSourceData();
|
||||
List<String> images = JSONObject.parseArray(orderSourceDataString, String.class);
|
||||
String front = ImageUtil.ImageBase64(images.get(0) + "?x-oss-process=image/resize,w_750/quality,Q_80");
|
||||
|
||||
@@ -395,40 +415,81 @@ public class OpenEquipmentController extends BaseController {
|
||||
order.setRealName(verify.getName());
|
||||
order.setIdCode(verify.getIdCardNo());
|
||||
order.setAddress(verify.getAddress());
|
||||
|
||||
}
|
||||
|
||||
// 短信验证码校验
|
||||
String receiptPhone = receiptParam.getReceiptPhone();
|
||||
if(StrUtil.isNotBlank(receiptPhone)){
|
||||
String captcha = receiptParam.getCaptcha();
|
||||
String code = cacheClient.get(ESmsType.RECEIPT.name() + ":" + receiptPhone);
|
||||
if (!StrUtil.equals(code, captcha)) {
|
||||
return fail("验证码不正确");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
BeanCopier.create(receiptParam, order, CopyOptions.create().ignoreNullValue()).copy();
|
||||
order.setOrderStatus(ORDER_STATUS_COMPLETED);
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
orderService.updateById(order);
|
||||
return success("重置成功");
|
||||
return success("确认收货成功");
|
||||
}
|
||||
|
||||
/*@ApiOperation("确认收货")
|
||||
@PostMapping("/receipt")
|
||||
public ApiResult<?> receipt(@RequestBody Order order) {
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
// 验证身份证真实性
|
||||
if(StringUtils.hasText(order.getOrderSourceData())) {
|
||||
String orderSourceDataString = order.getOrderSourceData();
|
||||
List<String> images = JSONObject.parseArray(orderSourceDataString, String.class);
|
||||
String front = ImageUtil.ImageBase64(images.get(0) + "?x-oss-process=image/resize,w_750/quality,Q_80");
|
||||
|
||||
String back = ImageUtil.ImageBase64(images.get(1) + "?x-oss-process=image/resize,w_750/quality,Q_80");
|
||||
|
||||
IdcardRespVO verify = idcardService.verify(front, back);
|
||||
if(!"FP00000".equals(verify.getCode())) {
|
||||
return fail("请上传身份证正面照片");
|
||||
}
|
||||
if(verify.getIssueDate() == null || verify.getIssueOrg() == null || verify.getExpireDate() == null) {
|
||||
return fail("请上传身份证反面照片");
|
||||
}
|
||||
}
|
||||
|
||||
orderService.updateById(order);
|
||||
return success("确认收货成功");
|
||||
}*/
|
||||
|
||||
@OperationLog
|
||||
@ApiModelProperty("退租")
|
||||
@PostMapping("/rentingOut")
|
||||
public ApiResult<?> rentingOut(@RequestBody Order order) {
|
||||
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
OrderRefund refund = orderRefundService.getOne(new LambdaQueryWrapper<OrderRefund>()
|
||||
.eq(OrderRefund::getOrderId, order.getOrderId()));
|
||||
.eq(OrderRefund::getOrderId, order.getOrderId()).last("limit 1"));
|
||||
// 已有记录 取消退租
|
||||
if (refund != null) {
|
||||
if(refund.getAuditStatus() == 10){
|
||||
Integer auditStatus = refund.getAuditStatus();
|
||||
if(auditStatus == 10){
|
||||
orderRefundService.removeById(refund.getOrderRefundId());
|
||||
Order updateOrder = new Order();
|
||||
updateOrder.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
updateOrder.setOrderId(order.getOrderId());
|
||||
orderService.updateById(updateOrder);
|
||||
return success("退租申请已取消");
|
||||
// Order updateOrder = new Order();
|
||||
// updateOrder.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
// updateOrder.setOrderId(order.getOrderId());
|
||||
// orderService.updateById(updateOrder);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
orderService.updateById(order);
|
||||
return success("已申请退租");
|
||||
}
|
||||
if (refund.getAuditStatus() != 30) {
|
||||
if (auditStatus != 30) {
|
||||
return fail("申请成功,请等待客服人员审核");
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
refund = new OrderRefund();
|
||||
refund.setOrderId(order.getOrderId());
|
||||
refund.setOrderNo(order.getOrderNo());
|
||||
refund.setOrderGoodsId(order.getGoodsId());
|
||||
refund.setUserId(getLoginUserId());
|
||||
refund.setType(10);
|
||||
@@ -437,6 +498,7 @@ public class OpenEquipmentController extends BaseController {
|
||||
refund.setMerchantCode(order.getMerchantCode());
|
||||
}
|
||||
refund.setAuditStatus(10);
|
||||
refund.setOrderNo(order.getOrderNo());
|
||||
orderRefundService.saveOrUpdate(refund);
|
||||
// 更新订单状态
|
||||
Order updateOrder = new Order();
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.google.gson.Gson;
|
||||
import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
import com.gxwebsoft.common.core.enums.ESmsType;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.core.security.JwtSubject;
|
||||
import com.gxwebsoft.common.core.security.JwtUtil;
|
||||
@@ -146,7 +147,7 @@ public class OpenMainController extends BaseController {
|
||||
String email = user.getEmail(); // 邮箱
|
||||
|
||||
// 短信验证
|
||||
if (!StrUtil.equals(code,cacheClient.get(phone,String.class)) && !StrUtil.equals(code,"170083")) {
|
||||
if (!StrUtil.equals(code,cacheClient.get(ESmsType.LOGIN.name() + ":" + phone,String.class)) && !StrUtil.equals(code,"170083")) {
|
||||
throw new BusinessException("验证码不正确");
|
||||
}
|
||||
user.setUsername(username);
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.gxwebsoft.shop.param.OrderParam;
|
||||
import com.gxwebsoft.shop.service.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@@ -38,6 +39,7 @@ import static com.gxwebsoft.common.core.constants.OrderConstants.*;
|
||||
* @author WebSoft
|
||||
* @since 2022-11-16 11:25:58
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "订单记录表管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/open/order")
|
||||
@@ -224,7 +226,6 @@ public class OpenOrderController extends BaseController {
|
||||
// 取消报餐截止时间
|
||||
Date date = DateUtil.date();
|
||||
int hours = date.getHours();
|
||||
System.out.println("hours = " + hours);
|
||||
if(hours > 19){
|
||||
return fail("每天晚上8点后截止取消报餐");
|
||||
}
|
||||
@@ -233,7 +234,6 @@ public class OpenOrderController extends BaseController {
|
||||
final Order orderInfo = orderService.getById(order.getOrderId());
|
||||
// 退款
|
||||
User user = userService.getById(orderInfo.getUserId());
|
||||
System.out.println("user = " + user);
|
||||
BigDecimal balance = user.getBalance().add(orderInfo.getPayPrice());
|
||||
user.setBalance(balance);
|
||||
userService.updateById(user);
|
||||
@@ -241,9 +241,10 @@ public class OpenOrderController extends BaseController {
|
||||
UserBalanceLog userBalanceLog = new UserBalanceLog();
|
||||
userBalanceLog.setUserId(orderInfo.getUserId());
|
||||
userBalanceLog.setScene(BALANCE_REFUND);
|
||||
userBalanceLog.setSceneId(orderInfo.getOrderId());
|
||||
userBalanceLog.setMoney(orderInfo.getPayPrice());
|
||||
userBalanceLog.setBalance(balance);
|
||||
userBalanceLog.setComments(orderInfo.getOrderNo().toString());
|
||||
userBalanceLog.setComments("订单号:" + orderInfo.getOrderNo());
|
||||
userBalanceLog.setMerchantCode(orderInfo.getMerchantCode());
|
||||
userBalanceLogService.save(userBalanceLog);
|
||||
return success("订单取消成功",orderInfo);
|
||||
@@ -257,9 +258,9 @@ public class OpenOrderController extends BaseController {
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
try {
|
||||
freezeOrderService.unfreeze(id);
|
||||
freezeOrderService.unfreeze(id, BigDecimal.ZERO);
|
||||
}catch (Exception e) {
|
||||
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
// Order order = orderService.getById(id);
|
||||
if (orderService.removeById(id)) {
|
||||
|
||||
@@ -161,7 +161,8 @@ public class OpenOrderGoodsController extends BaseController {
|
||||
return fail("菜品不存在!");
|
||||
}
|
||||
// System.out.println("orderGoods = " + orderGoods);
|
||||
final Order byId = orderService.getById(orderGoods.getOrderId());
|
||||
Integer orderId = orderGoods.getOrderId();
|
||||
final Order byId = orderService.getById(orderId);
|
||||
// 取消报餐截止时间
|
||||
orderGoodsService.removeById(orderGoods);
|
||||
// System.out.println("orderGoods = " + orderGoods);
|
||||
@@ -176,14 +177,15 @@ public class OpenOrderGoodsController extends BaseController {
|
||||
UserBalanceLog userBalanceLog = new UserBalanceLog();
|
||||
userBalanceLog.setUserId(byId.getUserId());
|
||||
userBalanceLog.setScene(BALANCE_REFUND);
|
||||
userBalanceLog.setSceneId(orderId);
|
||||
userBalanceLog.setMoney(orderGoods.getGoodsPrice());
|
||||
userBalanceLog.setBalance(balance);
|
||||
userBalanceLog.setComments(orderGoods.getOrderId().toString());
|
||||
userBalanceLog.setComments("取消订单:" + orderId);
|
||||
userBalanceLogService.save(userBalanceLog);
|
||||
final int count = orderGoodsService.count(new LambdaUpdateWrapper<OrderGoods>().eq(OrderGoods::getOrderId, orderGoods.getOrderId()).gt(OrderGoods::getTotalNum,0));
|
||||
final int count = orderGoodsService.count(new LambdaUpdateWrapper<OrderGoods>().eq(OrderGoods::getOrderId, orderId).gt(OrderGoods::getTotalNum,0));
|
||||
// System.out.println("count = " + count);
|
||||
// 更新订单金额
|
||||
System.out.println("byId = " + byId);
|
||||
// System.out.println("byId = " + byId);
|
||||
if (!byId.getTotalPrice().equals(0)) {
|
||||
byId.setTotalPrice(byId.getTotalPrice().subtract(orderGoods.getGoodsPrice()));
|
||||
orderService.updateById(byId);
|
||||
@@ -192,9 +194,9 @@ public class OpenOrderGoodsController extends BaseController {
|
||||
// 无菜品就把订单删除
|
||||
if(count == 0){
|
||||
final Order order = new Order();
|
||||
order.setOrderId(orderGoods.getOrderId());
|
||||
order.setOrderId(orderId);
|
||||
order.setOrderStatus(ORDER_STATUS_CANCEL);
|
||||
orderService.removeById(orderGoods.getOrderId());
|
||||
orderService.removeById(orderId);
|
||||
}
|
||||
return success("菜品取消成功");
|
||||
}
|
||||
|
||||
@@ -4,11 +4,15 @@ import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayConstants;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.response.AlipayFundAuthOperationDetailQueryResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.gxwebsoft.apps.entity.EquipmentGoods;
|
||||
import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
@@ -29,6 +33,7 @@ import com.gxwebsoft.shop.service.OrderPayService;
|
||||
import com.gxwebsoft.shop.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@@ -50,6 +55,7 @@ import static com.gxwebsoft.common.core.constants.OrderConstants.PAY_STATUS_SUCC
|
||||
* @author 科技小王子
|
||||
* @since 2023-10-08 10:15:22
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/shop/freeze-order")
|
||||
@@ -182,6 +188,7 @@ public class FreezeOrderController extends BaseController {
|
||||
@PostMapping("/notify")
|
||||
@Transactional
|
||||
public void freezeNotify(@RequestParam Map<String, String> params, HttpServletResponse response) throws AlipayApiException {
|
||||
log.info("收到冻结通知!{}", JSON.toJSONString(params));
|
||||
PrintWriter writer = null;
|
||||
|
||||
DateTime now = DateUtil.date();
|
||||
@@ -218,12 +225,14 @@ public class FreezeOrderController extends BaseController {
|
||||
String trade_status = params.get("trade_status");
|
||||
String payee_user_id = params.get("payee_user_id");
|
||||
|
||||
FreezeOrder one = freezeOrderService.lambdaQuery().eq(FreezeOrder::getNotifyId, notify_id).one();
|
||||
FreezeOrder one = freezeOrderService.lambdaQuery().eq(FreezeOrder::getNotifyId, notify_id).last("limit 1").one();
|
||||
if(one == null) {
|
||||
FreezeOrder freezeOrder = freezeOrderService.lambdaQuery().eq(FreezeOrder::getOutRequestNo, out_request_no).one();
|
||||
FreezeOrder freezeOrder = freezeOrderService.lambdaQuery().eq(FreezeOrder::getOutRequestNo, out_request_no)
|
||||
.eq(FreezeOrder::getStatus, "INIT").last("limit 1").one();
|
||||
if(freezeOrder == null) {
|
||||
freezeOrder = new FreezeOrder();
|
||||
}
|
||||
|
||||
freezeOrder.setOutOrderNo(out_order_no != null ?out_order_no: "");
|
||||
freezeOrder.setOutRequestNo(out_request_no);
|
||||
freezeOrder.setOperationId(operation_id);
|
||||
@@ -240,48 +249,93 @@ public class FreezeOrderController extends BaseController {
|
||||
freezeOrder.setDetail(JSONObject.toJSONString(params));
|
||||
freezeOrderService.saveOrUpdate(freezeOrder);
|
||||
|
||||
try {
|
||||
writer = response.getWriter();
|
||||
writer.write("success"); //一定要打印success
|
||||
writer.flush();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (writer != null) {
|
||||
writer.close();
|
||||
LambdaQueryWrapper<FreezeOrder> fWrapper = Wrappers.lambdaQuery();
|
||||
fWrapper.eq(FreezeOrder::getRelOrderId, freezeOrder.getRelOrderId())
|
||||
.eq(FreezeOrder::getStatus, "INIT")
|
||||
.eq(FreezeOrder::getId, freezeOrder.getId());
|
||||
boolean delRet = freezeOrderService.remove(fWrapper);
|
||||
log.info("删除无效冻结订单结果{}!冻结单号{}", delRet, out_order_no);
|
||||
|
||||
LambdaQueryWrapper<Order> orderWrapper = Wrappers.lambdaQuery();
|
||||
orderWrapper.eq(Order::getFreezeOrderNo, out_order_no).last("limit 1");
|
||||
Order order = orderService.getOne(orderWrapper);
|
||||
if(null == order){
|
||||
log.error("冻结订单{}对应的产品订单不存在!", out_order_no);
|
||||
} else {
|
||||
BigDecimal rent = order.getBatteryRent();
|
||||
BigDecimal totalPrice = order.getTotalPrice();
|
||||
if(rent == null || !rent.equals(totalPrice)){
|
||||
order.setBatteryRent(totalPrice);
|
||||
orderService.updateById(order);
|
||||
log.info("更新冻结金额!冻结单号{}", out_order_no);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<OrderPay> orderPayWrapper = Wrappers.lambdaQuery();
|
||||
orderPayWrapper.eq(OrderPay::getRentOrderId, order.getOrderId()).eq(OrderPay::getPayStatus, PAY_STATUS_NO_PAY).last("limit 1");
|
||||
OrderPay orderPay = orderPayService.getOne(orderPayWrapper);
|
||||
if(null != orderPay){
|
||||
BigDecimal bRent = order.getBatteryRent();
|
||||
if(bRent == null || !bRent.equals(totalPrice)){
|
||||
orderPay.setBatteryRent(totalPrice);
|
||||
boolean bOrderRet = orderPayService.updateById(orderPay);
|
||||
log.info("更新冻结支付订单结果{}!冻结单号{}", bOrderRet, out_order_no);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
writer = response.getWriter();
|
||||
writer.write("success"); //一定要打印success
|
||||
writer.flush();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (writer != null) {
|
||||
writer.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// return "success";
|
||||
}
|
||||
|
||||
|
||||
else {
|
||||
log.warn("解冻消息{}已处理!", notify_id);
|
||||
}
|
||||
// return "fail";
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/checkFreeze/{orderId}")
|
||||
public ApiResult<?> checkFreeze(@PathVariable Integer orderId) throws AlipayApiException {
|
||||
|
||||
DateTime now = DateUtil.date();
|
||||
|
||||
Order order = orderService.getById(orderId);
|
||||
Integer iFreeze = order.getIsFreeze();
|
||||
|
||||
if (order.getOrderSource() == 30 || order.getOrderSource() == 40) {
|
||||
if (iFreeze == 0 && (order.getOrderSource() == 30 || order.getOrderSource() == 40)) {
|
||||
AlipayFundAuthOperationDetailQueryResponse response = freezeOrderService.query(order);
|
||||
String status = response.getStatus();
|
||||
boolean isFreeze = response.isSuccess() && "SUCCESS".equals(status);
|
||||
if( !isFreeze) {
|
||||
return fail();
|
||||
String orderStatus = response.getOrderStatus();
|
||||
boolean bFreeze = response.isSuccess() && "SUCCESS".equals(status) && "FINISH".equals(orderStatus);
|
||||
if(!bFreeze) {
|
||||
log.info("请求支付宝冻结接口返回数据:{}", JSON.toJSONString(response));
|
||||
return fail("未支付押金!");
|
||||
}
|
||||
log.info("订单{}已支付押金!", orderId);
|
||||
order.setIsFreeze(1);
|
||||
orderService.updateById(order);
|
||||
}
|
||||
|
||||
final EquipmentGoods eg = equipmentGoodsService.getById(order.getOrderSourceId());
|
||||
LambdaQueryWrapper<OrderPay> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(OrderPay::getRentOrderId, orderId).eq(OrderPay::getCurrPeriods, 1).last("limit 1");
|
||||
OrderPay renewOrder = orderPayService.getOne(wrapper);
|
||||
if(null != renewOrder) {
|
||||
// renewOrder.setOrderNo(IdUtil.getSnowflakeNextIdStr());
|
||||
// orderPayService.updateById(renewOrder);
|
||||
return success(renewOrder);
|
||||
}
|
||||
|
||||
order.setIsFreeze(1);
|
||||
orderService.updateById(order);
|
||||
// 创建续费订单
|
||||
|
||||
OrderPay renewOrder = new OrderPay();
|
||||
DateTime now = DateUtil.date();
|
||||
final EquipmentGoods eg = equipmentGoodsService.getById(order.getOrderSourceId());
|
||||
renewOrder = new OrderPay();
|
||||
renewOrder.setOrderNo(IdUtil.getSnowflakeNextIdStr());
|
||||
renewOrder.setMerchantCode(order.getMerchantCode());
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ public class MerchantController extends BaseController {
|
||||
@GetMapping("/page")
|
||||
public ApiResult<PageResult<Merchant>> page(MerchantParam param) {
|
||||
// 使用关联查询
|
||||
param.setStatus(0);
|
||||
param.setLimit(20L);
|
||||
return success(merchantService.pageRel(param));
|
||||
}
|
||||
|
||||
|
||||
@@ -3,15 +3,18 @@ package com.gxwebsoft.shop.controller;
|
||||
import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.core.web.BaseController;
|
||||
import com.gxwebsoft.common.core.web.BatchParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.shop.entity.MerchantWithdraw;
|
||||
import com.gxwebsoft.shop.param.MerchantWithdrawParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawApplyParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawAuditFailParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawAuditPassParam;
|
||||
import com.gxwebsoft.shop.service.MerchantWithdrawService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@@ -23,7 +26,7 @@ import java.util.List;
|
||||
* @author 科技小王子
|
||||
* @since 2022-12-02 00:41:09
|
||||
*/
|
||||
@Api(tags = "商户提现记录管理")
|
||||
@Api(tags = "商户提现管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/shop/merchant-withdraw")
|
||||
public class MerchantWithdrawController extends BaseController {
|
||||
@@ -31,7 +34,6 @@ public class MerchantWithdrawController extends BaseController {
|
||||
private MerchantWithdrawService merchantWithdrawService;
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:list')")
|
||||
@OperationLog
|
||||
@ApiOperation("分页查询商户提现记录")
|
||||
@GetMapping("/page")
|
||||
public ApiResult<PageResult<MerchantWithdraw>> page(MerchantWithdrawParam param) {
|
||||
@@ -40,7 +42,6 @@ public class MerchantWithdrawController extends BaseController {
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:list')")
|
||||
@OperationLog
|
||||
@ApiOperation("查询全部商户提现记录")
|
||||
@GetMapping()
|
||||
public ApiResult<List<MerchantWithdraw>> list(MerchantWithdrawParam param) {
|
||||
@@ -48,7 +49,6 @@ public class MerchantWithdrawController extends BaseController {
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:list')")
|
||||
@OperationLog
|
||||
@ApiOperation("根据id查询商户提现记录")
|
||||
@GetMapping("/{id}")
|
||||
public ApiResult<MerchantWithdraw> get(@PathVariable("id") Integer id) {
|
||||
@@ -56,75 +56,112 @@ public class MerchantWithdrawController extends BaseController {
|
||||
return success(merchantWithdrawService.getByIdRel(id));
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:save')")
|
||||
@OperationLog
|
||||
@ApiOperation("添加商户提现记录")
|
||||
@PostMapping()
|
||||
public ApiResult<?> save(@RequestBody MerchantWithdraw merchantWithdraw) {
|
||||
@GetMapping("/page/app")
|
||||
public ApiResult<PageResult<MerchantWithdraw>> appPage(MerchantWithdrawParam param) {
|
||||
User loginUser = getLoginUser();
|
||||
param.setUserId(loginUser.getUserId());
|
||||
return success(merchantWithdrawService.pageRel(param));
|
||||
}
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:merchantWithdraw:save')")
|
||||
// @OperationLog
|
||||
// @ApiOperation("添加商户提现记录")
|
||||
// @PostMapping()
|
||||
// public ApiResult<?> save(@RequestBody MerchantWithdraw merchantWithdraw) {
|
||||
// // 记录当前登录用户id、租户id
|
||||
// User loginUser = getLoginUser();
|
||||
// if (loginUser != null) {
|
||||
// merchantWithdraw.setUserId(loginUser.getUserId());
|
||||
// }
|
||||
// if (merchantWithdrawService.save(merchantWithdraw)) {
|
||||
// return success("添加成功");
|
||||
// }
|
||||
// return fail("添加失败");
|
||||
// }
|
||||
|
||||
@OperationLog
|
||||
@ApiOperation("申请提现")
|
||||
@PostMapping("apply")
|
||||
public ApiResult apply(@RequestBody @Validated WithdrawApplyParam withdraw) {
|
||||
// 记录当前登录用户id、租户id
|
||||
User loginUser = getLoginUser();
|
||||
if (loginUser != null) {
|
||||
merchantWithdraw.setUserId(loginUser.getUserId());
|
||||
withdraw.setUserId(loginUser.getUserId());
|
||||
return merchantWithdrawService.apply(withdraw);
|
||||
}
|
||||
if (merchantWithdrawService.save(merchantWithdraw)) {
|
||||
return success("添加成功");
|
||||
}
|
||||
return fail("添加失败");
|
||||
return fail("申请提现失败");
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:update')")
|
||||
@OperationLog
|
||||
@ApiOperation("修改商户提现记录")
|
||||
@PutMapping()
|
||||
public ApiResult<?> update(@RequestBody MerchantWithdraw merchantWithdraw) {
|
||||
if (merchantWithdrawService.updateById(merchantWithdraw)) {
|
||||
return success("修改成功");
|
||||
}
|
||||
return fail("修改失败");
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:remove')")
|
||||
@OperationLog
|
||||
@ApiOperation("删除商户提现记录")
|
||||
@DeleteMapping("/{id}")
|
||||
public ApiResult<?> remove(@PathVariable("id") Integer id) {
|
||||
if (merchantWithdrawService.removeById(id)) {
|
||||
return success("删除成功");
|
||||
}
|
||||
return fail("删除失败");
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:save')")
|
||||
@OperationLog
|
||||
@ApiOperation("批量添加商户提现记录")
|
||||
@PostMapping("/batch")
|
||||
public ApiResult<?> saveBatch(@RequestBody List<MerchantWithdraw> list) {
|
||||
if (merchantWithdrawService.saveBatch(list)) {
|
||||
return success("添加成功");
|
||||
}
|
||||
return fail("添加失败");
|
||||
@ApiOperation("提现审核通过")
|
||||
@PostMapping("audit/pass")
|
||||
public ApiResult auditSuccess(@RequestBody @Validated WithdrawAuditPassParam passParam) {
|
||||
return merchantWithdrawService.auditSuccess(passParam);
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:update')")
|
||||
@OperationLog
|
||||
@ApiOperation("批量修改商户提现记录")
|
||||
@PutMapping("/batch")
|
||||
public ApiResult<?> removeBatch(@RequestBody BatchParam<MerchantWithdraw> batchParam) {
|
||||
if (batchParam.update(merchantWithdrawService, "id")) {
|
||||
return success("修改成功");
|
||||
}
|
||||
return fail("修改失败");
|
||||
@ApiOperation("提现审核拒绝")
|
||||
@PostMapping("audit/reject")
|
||||
public ApiResult auditReject(@RequestBody @Validated WithdrawAuditFailParam rejectParam) {
|
||||
return merchantWithdrawService.auditFail(rejectParam);
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:merchantWithdraw:remove')")
|
||||
@OperationLog
|
||||
@ApiOperation("批量删除商户提现记录")
|
||||
@DeleteMapping("/batch")
|
||||
public ApiResult<?> removeBatch(@RequestBody List<Integer> ids) {
|
||||
if (merchantWithdrawService.removeByIds(ids)) {
|
||||
return success("删除成功");
|
||||
}
|
||||
return fail("删除失败");
|
||||
}
|
||||
// @PreAuthorize("hasAuthority('shop:merchantWithdraw:update')")
|
||||
// @OperationLog
|
||||
// @ApiOperation("修改商户提现记录")
|
||||
// @PutMapping()
|
||||
// public ApiResult<?> update(@RequestBody MerchantWithdraw merchantWithdraw) {
|
||||
// if (merchantWithdrawService.updateById(merchantWithdraw)) {
|
||||
// return success("修改成功");
|
||||
// }
|
||||
// return fail("修改失败");
|
||||
// }
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:merchantWithdraw:remove')")
|
||||
// @OperationLog
|
||||
// @ApiOperation("删除商户提现记录")
|
||||
// @DeleteMapping("/{id}")
|
||||
// public ApiResult<?> remove(@PathVariable("id") Integer id) {
|
||||
// if (merchantWithdrawService.removeById(id)) {
|
||||
// return success("删除成功");
|
||||
// }
|
||||
// return fail("删除失败");
|
||||
// }
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:merchantWithdraw:save')")
|
||||
// @OperationLog
|
||||
// @ApiOperation("批量添加商户提现记录")
|
||||
// @PostMapping("/batch")
|
||||
// public ApiResult<?> saveBatch(@RequestBody List<MerchantWithdraw> list) {
|
||||
// if (merchantWithdrawService.saveBatch(list)) {
|
||||
// return success("添加成功");
|
||||
// }
|
||||
// return fail("添加失败");
|
||||
// }
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:merchantWithdraw:update')")
|
||||
// @OperationLog
|
||||
// @ApiOperation("批量修改商户提现记录")
|
||||
// @PutMapping("/batch")
|
||||
// public ApiResult<?> removeBatch(@RequestBody BatchParam<MerchantWithdraw> batchParam) {
|
||||
// if (batchParam.update(merchantWithdrawService, "id")) {
|
||||
// return success("修改成功");
|
||||
// }
|
||||
// return fail("修改失败");
|
||||
// }
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:merchantWithdraw:remove')")
|
||||
// @OperationLog
|
||||
// @ApiOperation("批量删除商户提现记录")
|
||||
// @DeleteMapping("/batch")
|
||||
// public ApiResult<?> removeBatch(@RequestBody List<Integer> ids) {
|
||||
// if (merchantWithdrawService.removeByIds(ids)) {
|
||||
// return success("删除成功");
|
||||
// }
|
||||
// return fail("删除失败");
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||
import cn.hutool.extra.qrcode.QrConfig;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
@@ -30,6 +31,7 @@ import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||
import com.gxwebsoft.common.core.utils.AlipayConfigUtil;
|
||||
import com.gxwebsoft.common.core.web.*;
|
||||
import com.gxwebsoft.common.system.entity.Role;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import com.gxwebsoft.shop.entity.*;
|
||||
@@ -78,27 +80,11 @@ public class OrderController extends BaseController {
|
||||
@Resource
|
||||
private OrderGoodsService orderGoodsService;
|
||||
@Resource
|
||||
private OrderPayService orderPayService;
|
||||
@Resource
|
||||
private FreezeOrderService freezeOrderService;
|
||||
@Resource
|
||||
private EquipmentOrderGoodsService equipmentOrderGoodsService;
|
||||
|
||||
|
||||
|
||||
@Resource
|
||||
private AlipayConfigUtil alipayConfig;
|
||||
|
||||
@Resource
|
||||
private ConfigProperties pathConfig;
|
||||
@Resource
|
||||
private UserRefereeService userRefereeService;
|
||||
@Resource
|
||||
private UserService userService;
|
||||
@Resource
|
||||
private BcAgentService bcAgentService;
|
||||
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:order:list')")
|
||||
@OperationLog
|
||||
@ApiOperation("分页查询订单记录表")
|
||||
@@ -108,12 +94,32 @@ public class OrderController extends BaseController {
|
||||
if ((param.getIsApp() == null || param.getIsApp() != true) && getMerchantCode() != null) {
|
||||
param.setMerchantCode(getMerchantCode());
|
||||
}
|
||||
|
||||
// Integer expireDay = param.getExpireDay();
|
||||
// if(null != expireDay){
|
||||
// if(expireDay == -1){
|
||||
//
|
||||
// }
|
||||
// }
|
||||
|
||||
// TODO 暂不开放此条件
|
||||
// Integer userId = param.getUserId();
|
||||
// if(null != userId && userId > 0){
|
||||
// // 取订单所属门店
|
||||
// LambdaQueryWrapper<Merchant> mWrapper = Wrappers.lambdaQuery();
|
||||
// mWrapper.eq(Merchant::getUserId, userId).last("limit 1");
|
||||
// Merchant merchant = merchantService.getOne(mWrapper);
|
||||
// if(null != merchant){
|
||||
// param.setAppMerchantCode(merchant.getMerchantCode());
|
||||
// }
|
||||
// }
|
||||
|
||||
// 云芯威项目查询关联设备
|
||||
// 查询订单的关联商品
|
||||
List<Order> list = orderService.listRel(param);
|
||||
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return success(new PageResult<>(list, 0l));
|
||||
return success(new PageResult<>(list, 0L));
|
||||
}
|
||||
Set<Integer> equipmentIds = new HashSet<>();
|
||||
Set<Integer> orderIds = new HashSet<>();
|
||||
@@ -123,7 +129,8 @@ public class OrderController extends BaseController {
|
||||
}
|
||||
List<Equipment> equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds));
|
||||
List<EquipmentOrderGoods> equipmentOrderGoodsList = equipmentOrderGoodsService.list(Wrappers.lambdaQuery(EquipmentOrderGoods.class).in(EquipmentOrderGoods::getOrderId, orderIds));
|
||||
Map<Integer, List<Equipment>> equipmentCollect = equipmentList.stream().collect(Collectors.groupingBy(Equipment::getEquipmentId));
|
||||
// Map<Integer, List<Equipment>> equipmentCollect = equipmentList.stream().collect(Collectors.groupingBy(Equipment::getEquipmentId));
|
||||
Map<Integer, Equipment> equipmentCollect = equipmentList.stream().collect(Collectors.toMap(Equipment::getEquipmentId, e->e));
|
||||
Map<Integer, List<EquipmentOrderGoods>> equipmentOrderGoodsCollect = equipmentOrderGoodsList.stream().collect(Collectors.groupingBy(EquipmentOrderGoods::getOrderId));
|
||||
|
||||
// 查询订单的设备
|
||||
@@ -136,14 +143,19 @@ public class OrderController extends BaseController {
|
||||
}
|
||||
EquipmentOrderGoods orderGoods = equipmentOrderGoods.get(0);
|
||||
order.setEquipmentGoods(orderGoods);
|
||||
List<Equipment> equipment = equipmentCollect.get(order.getEquipmentId());
|
||||
if (CollectionUtils.isNotEmpty(equipment)) {
|
||||
order.setEquipment(equipment.get(0));
|
||||
// List<Equipment> equipment = equipmentCollect.get(order.getEquipmentId());
|
||||
// if (CollectionUtils.isNotEmpty(equipment)) {
|
||||
// order.setEquipment(equipment.get(0));
|
||||
// }
|
||||
Equipment equipment = equipmentCollect.get(order.getEquipmentId());
|
||||
if(null != equipment){
|
||||
order.setEquipment(equipment);
|
||||
}
|
||||
|
||||
}
|
||||
PageParam<Order, OrderParam> page = new PageParam<>(param);
|
||||
return success(new PageResult<>(list, page.getTotal()));
|
||||
PageResult ret = new PageResult<>(list, page.getTotal());
|
||||
ret.setCount((long) list.size());
|
||||
return success(ret);
|
||||
|
||||
|
||||
}
|
||||
@@ -222,10 +234,15 @@ public class OrderController extends BaseController {
|
||||
public ApiResult<Order> get(@PathVariable("id") Integer id) {
|
||||
// 使用关联查询
|
||||
Order order = orderService.getByIdRel(id);
|
||||
if(null == order){
|
||||
return fail("找不到订单", null);
|
||||
}
|
||||
// 云芯威关联设备查询
|
||||
if (!order.getGoodsId().equals(0) || !order.getEquipmentId().equals(0)) {
|
||||
Integer goodsId = order.getGoodsId();
|
||||
Integer equipmentId = order.getEquipmentId();
|
||||
if ((null != goodsId && !goodsId.equals(0)) || (null != equipmentId && !equipmentId.equals(0))) {
|
||||
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId, order.getOrderId())));
|
||||
order.setEquipment(equipmentService.getById(order.getEquipmentId()));
|
||||
order.setEquipment(equipmentService.getById(equipmentId));
|
||||
}
|
||||
return success(order);
|
||||
}
|
||||
@@ -359,7 +376,6 @@ public class OrderController extends BaseController {
|
||||
order.setPeriods(9999);
|
||||
}
|
||||
|
||||
|
||||
order.setFreezeOrderNo(IdUtil.getSnowflakeNextIdStr());
|
||||
order.setOutRequestNo(IdUtil.getSnowflakeNextIdStr());
|
||||
if (orderService.save(order)) {
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
package com.gxwebsoft.shop.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.gxwebsoft.apps.entity.EquipmentGoods;
|
||||
import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
import com.gxwebsoft.common.core.web.BaseController;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.shop.entity.FreezeOrder;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.service.FreezeOrderService;
|
||||
import com.gxwebsoft.shop.service.OrderPayService;
|
||||
import com.gxwebsoft.shop.entity.OrderPay;
|
||||
import com.gxwebsoft.shop.param.OrderPayParam;
|
||||
@@ -19,6 +26,7 @@ import com.gxwebsoft.common.core.annotation.OperationLog;
|
||||
import com.gxwebsoft.shop.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -35,12 +43,15 @@ import static com.gxwebsoft.common.core.constants.OrderConstants.PAY_STATUS_NO_P
|
||||
* @author 科技小王子
|
||||
* @since 2023-10-13 16:58:03
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "订单记录表管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/shop/order-pay")
|
||||
public class OrderPayController extends BaseController {
|
||||
@Resource
|
||||
private OrderPayService orderPayService;
|
||||
@Resource
|
||||
private FreezeOrderService freezeOrderService;
|
||||
|
||||
|
||||
@Resource
|
||||
@@ -84,14 +95,15 @@ public class OrderPayController extends BaseController {
|
||||
.orderByAsc(OrderPay::getCreateTime)
|
||||
.last("limit 1").one();
|
||||
|
||||
Order order = orderService.getById(orderId);
|
||||
|
||||
EquipmentGoods eg = equipmentGoodsService.getById(order.getOrderSourceId());
|
||||
// 是否提前续租
|
||||
if(one == null) {
|
||||
Order order = orderService.getById(orderId);
|
||||
if(ORDER_STATUS_OVER.equals(order.getOrderStatus())) {
|
||||
return fail(null);
|
||||
}
|
||||
|
||||
EquipmentGoods eg = equipmentGoodsService.getById(order.getOrderSourceId());
|
||||
one = new OrderPay();
|
||||
one.setOrderNo(IdUtil.getSnowflakeNextIdStr());
|
||||
one.setMerchantCode(order.getMerchantCode());
|
||||
@@ -131,13 +143,46 @@ public class OrderPayController extends BaseController {
|
||||
one.setTotalPrice(price);
|
||||
one.setOrderPrice(price);
|
||||
one.setPayPrice(price);
|
||||
|
||||
}
|
||||
|
||||
orderPayService.save(one);
|
||||
|
||||
|
||||
}
|
||||
one.setIsFreeze(order.getIsFreeze());
|
||||
Integer isRenew = order.getIsRenew();
|
||||
one.setIsRenew(isRenew);
|
||||
|
||||
if(isRenew == 0){
|
||||
String freezeOrderNo = order.getFreezeOrderNo();
|
||||
if(StrUtil.isNotBlank(freezeOrderNo)){
|
||||
LambdaQueryWrapper<FreezeOrder> fWrapper = Wrappers.lambdaQuery();
|
||||
fWrapper.eq(FreezeOrder::getOutOrderNo, freezeOrderNo)
|
||||
.eq(FreezeOrder::getOperationType, "FREEZE")
|
||||
.eq(FreezeOrder::getStatus, "SUCCESS")
|
||||
.last("limit 1");
|
||||
int cnt = freezeOrderService.count(fWrapper);
|
||||
if(cnt > 0) {
|
||||
log.info("订单{}已支付支付押金!", orderId);
|
||||
one.setHasFreeze(1);
|
||||
}
|
||||
else {
|
||||
log.info("订单{}未支付押金!", orderId);
|
||||
// fWrapper.clear();
|
||||
// fWrapper.eq(FreezeOrder::getOutOrderNo, freezeOrderNo)
|
||||
// .eq(FreezeOrder::getStatus, "INIT");
|
||||
// boolean delRet = freezeOrderService.remove(fWrapper);
|
||||
try {
|
||||
String orderStr = freezeOrderService.freeze(order, eg);
|
||||
one.setOrderStr(orderStr);
|
||||
log.info("订单{}支付请求参数:{}", orderId, orderStr);
|
||||
} catch (AlipayApiException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return fail("调用芝麻信用出错!");
|
||||
}
|
||||
}
|
||||
one.setHasFreeze(0);
|
||||
}
|
||||
}
|
||||
|
||||
one.setEquipmentCategory(eg.getEquipmentCategory());
|
||||
return success(one);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.gxwebsoft.shop.controller;
|
||||
|
||||
import cn.hutool.core.bean.copier.BeanCopier;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
@@ -28,10 +30,12 @@ import com.gxwebsoft.shop.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static com.gxwebsoft.common.core.constants.OrderConstants.*;
|
||||
@@ -104,33 +108,44 @@ public class OrderRefundController extends BaseController {
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:orderRefund:update')")
|
||||
@OperationLog
|
||||
@ApiOperation("修改售后单记录表")
|
||||
@ApiOperation(value = "修改售后单记录表", notes = "退租审核")
|
||||
@PutMapping()
|
||||
@Transactional
|
||||
public ApiResult<?> update(@RequestBody OrderRefund orderRefund) throws AlipayApiException {
|
||||
OrderRefund refund = orderRefundService.getById(orderRefund.getOrderRefundId());
|
||||
BeanCopier.create(orderRefund, refund, CopyOptions.create().ignoreNullValue()).copy();
|
||||
|
||||
|
||||
if (orderRefundService.updateById(orderRefund)) {
|
||||
if(orderRefund.getAuditStatus().equals(20)){
|
||||
final Integer orderId = orderRefund.getOrderId();
|
||||
final Order order = orderService.getById(orderId);
|
||||
System.out.println("order = " + order);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_RETURN);
|
||||
order.setOrderStatus(ORDER_STATUS_OVER);
|
||||
final Equipment equipment = equipmentService.getById(order.getEquipmentId());
|
||||
equipment.setUserId(0);
|
||||
equipmentService.updateById(equipment);
|
||||
orderService.updateById(order);
|
||||
freezeOrderService.unfreeze(order.getOrderId());
|
||||
// freezeOrderService.deduction(order.getOrderId());
|
||||
}else if(orderRefund.getAuditStatus().equals(30)) {
|
||||
final Integer orderId = orderRefund.getOrderId();
|
||||
final Order order = orderService.getById(orderId);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
orderService.updateById(order);
|
||||
Integer auditStatus = orderRefund.getAuditStatus();
|
||||
if(auditStatus.equals(20)){
|
||||
BigDecimal refundMoney = orderRefund.getRefundMoney();
|
||||
if(null == refundMoney){
|
||||
refundMoney = BigDecimal.ZERO;
|
||||
}
|
||||
return success("操作成功");
|
||||
|
||||
final Integer orderId = orderRefund.getOrderId();
|
||||
final Order order = orderService.getById(orderId);
|
||||
// System.out.println("order = " + order);
|
||||
|
||||
Integer equipmentId = order.getEquipmentId();
|
||||
if(null != equipmentId && equipmentId > 0){
|
||||
Equipment equipment = equipmentService.getById(equipmentId);
|
||||
equipment.setUserId(0);
|
||||
equipmentService.updateById(equipment);
|
||||
}
|
||||
order.setReceiptStatus(RECEIPT_STATUS_RETURN);
|
||||
order.setOrderStatus(ORDER_STATUS_OVER);
|
||||
orderService.updateById(order);
|
||||
freezeOrderService.unfreeze(order.getOrderId(), refundMoney);
|
||||
// freezeOrderService.deduction(order.getOrderId());
|
||||
}
|
||||
return success("退租失败");
|
||||
else if(auditStatus.equals(30)) {
|
||||
final Integer orderId = orderRefund.getOrderId();
|
||||
final Order order = orderService.getById(orderId);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
orderService.updateById(order);
|
||||
}
|
||||
orderRefundService.updateById(refund);
|
||||
return success("操作成功");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@ package com.gxwebsoft.shop.controller;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayConstants;
|
||||
@@ -15,7 +18,6 @@ import com.alipay.api.response.AlipayTradeCreateResponse;
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.gxwebsoft.apps.entity.BcTemporary;
|
||||
import com.gxwebsoft.apps.entity.EquipmentGoods;
|
||||
import com.gxwebsoft.apps.param.BcTemporaryParam;
|
||||
import com.gxwebsoft.apps.service.BcTemporaryService;
|
||||
import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
@@ -33,6 +35,7 @@ import com.gxwebsoft.shop.service.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -42,6 +45,7 @@ import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -55,6 +59,7 @@ import static com.gxwebsoft.common.core.constants.OrderConstants.*;
|
||||
* @author 科技小王子
|
||||
* @since 2022-12-15 19:11:07
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "商城支付方式记录表管理")
|
||||
@RestController
|
||||
@RequestMapping("/api/shop/payment")
|
||||
@@ -256,6 +261,10 @@ public class PaymentController extends BaseController {
|
||||
// 订单数据
|
||||
OrderPay order = orderPayService.getById(id);
|
||||
|
||||
Order rentOrder = orderService.getById(order.getRentOrderId());
|
||||
if(null != rentOrder && rentOrder.getIsRenew() == 0 && rentOrder.getIsFreeze() != 1){
|
||||
return fail("押金订单未完成!");
|
||||
}
|
||||
|
||||
Merchant merchant = merchantService.getMerchantByCode(order.getMerchantCode());
|
||||
|
||||
@@ -265,13 +274,13 @@ public class PaymentController extends BaseController {
|
||||
try {
|
||||
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
|
||||
// 配置公共请求参数
|
||||
request.setNotifyUrl(pathConfig.getServerUrl() + "/shop/payment/mp-alipay/notify");
|
||||
request.setNotifyUrl(pathConfig.getServerUrl() + "/shop/payment/mp-alipay/notify");
|
||||
// request.setNotifyUrl("http://1.14.132.108:10090/api/shop/payment/mp-alipay/notify");
|
||||
request.setReturnUrl(null);
|
||||
// 配置业务参数
|
||||
JSONObject bizContent = new JSONObject();
|
||||
System.out.println("bizContent = " + order);
|
||||
bizContent.put("out_trade_no", order.getOrderNo());
|
||||
String orderNo = order.getOrderNo();
|
||||
bizContent.put("out_trade_no", orderNo);
|
||||
bizContent.put("total_amount", order.getPayPrice());
|
||||
bizContent.put("subject", merchant.getMerchantName());
|
||||
// 拿不到手机号码??
|
||||
@@ -279,11 +288,32 @@ public class PaymentController extends BaseController {
|
||||
request.setBizContent(bizContent.toString());
|
||||
//SDK 已经封装掉了公共参数,这里只需要传入业务参数。
|
||||
AlipayTradeCreateResponse response = alipayClient.certificateExecute(request);
|
||||
System.out.println("response = " + response);
|
||||
// log.info("支付宝支付返回信息:{}", response);
|
||||
if(!response.isSuccess()){
|
||||
String subCode = response.getSubCode();
|
||||
if("ACQ.TRADE_HAS_CLOSE".equals(subCode)){
|
||||
String orderNoNew = IdUtil.getSnowflakeNextIdStr();
|
||||
log.warn("原支付宝支付订单{}已关闭!重新生成支付订单号{}!", orderNo, orderNoNew);
|
||||
order.setOrderNo(orderNoNew);
|
||||
orderPayService.updateById(order);
|
||||
|
||||
bizContent.put("out_trade_no", orderNoNew);
|
||||
request.setBizContent(bizContent.toString());
|
||||
response = alipayClient.certificateExecute(request);
|
||||
if(response.isSuccess()){
|
||||
String trade_no = response.getTradeNo();// 获取返回的tradeNO。
|
||||
return success("调用支付宝支付成功", trade_no);
|
||||
}
|
||||
}
|
||||
|
||||
log.error("发起支付宝支付失败!{}", JSON.toJSONString(response));
|
||||
return fail("发起支付宝支付失败!");
|
||||
}
|
||||
|
||||
String trade_no = response.getTradeNo();// 获取返回的tradeNO。
|
||||
return success("支付成功", trade_no);
|
||||
return success("调用支付宝支付成功", trade_no);
|
||||
} catch (AlipayApiException e) {
|
||||
e.printStackTrace();
|
||||
log.error(e.getErrMsg(), e);
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
@@ -292,20 +322,24 @@ public class PaymentController extends BaseController {
|
||||
@OperationLog
|
||||
@PostMapping("/mp-alipay/notify")
|
||||
public String alipayNotify(@RequestParam Map<String, String> params) throws AlipayApiException, ParseException {
|
||||
System.out.println("异步处理>>>>");
|
||||
System.out.println("params = " + params);
|
||||
log.info("异步处理支付宝通知消息>>>>param:{}", params);
|
||||
String outTradeNo = params.get("out_trade_no");
|
||||
// OrderPay order = orderPayService.selectByOutTransNo(outTradeNo);
|
||||
OrderPay order = orderPayService.lambdaQuery().eq(OrderPay::getOrderNo, outTradeNo).one();
|
||||
if (order == null) {
|
||||
throw new BusinessException("订单不存在");
|
||||
throw new BusinessException("订单不存在,第三方返回单号:" + outTradeNo);
|
||||
}
|
||||
|
||||
Integer payStatus = order.getPayStatus();
|
||||
if(payStatus >= PAY_STATUS_SUCCESS){
|
||||
throw new BusinessException("订单已支付成功");
|
||||
}
|
||||
final JSONObject config = alipayConfig.payment(order.getTenantId());
|
||||
// 生成环境证书路径
|
||||
String alipayCertPublicKey = pathConfig.getUploadPath() + "file" + config.getString("alipayCertPublicKey");
|
||||
// TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
|
||||
boolean flag = AlipaySignature.rsaCertCheckV1(params, alipayCertPublicKey, AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2);
|
||||
System.out.println("flag>>>>>>>>>>>>>>>>>>>>>>>");
|
||||
System.out.println(flag);
|
||||
log.info("flag>>>>>>>>>>>>>>>>>>>>>>>{}", flag);
|
||||
// 处理订单业务
|
||||
if (flag) {
|
||||
final String tradeStatus = params.get("trade_status");
|
||||
@@ -317,17 +351,17 @@ public class PaymentController extends BaseController {
|
||||
// 1. 验证appId是否一致
|
||||
final String app_id = params.get("app_id");
|
||||
if (!config.getString("alipayAppId").equals(app_id)) {
|
||||
System.out.println("支付宝appId不一致 = " + app_id);
|
||||
log.warn("支付宝appId不一致 = " + app_id);
|
||||
throw new BusinessException("支付宝appId不一致");
|
||||
}
|
||||
// 2. 订单金额
|
||||
if (!payPrice.equals(receipt_amount)) {
|
||||
System.out.println("订单金额是不一致 = " + receipt_amount);
|
||||
log.warn("订单金额是不一致 = " + receipt_amount);
|
||||
throw new BusinessException("订单金额是不一致");
|
||||
}
|
||||
// 3. 判断交易状态
|
||||
if (!"TRADE_SUCCESS".equals(tradeStatus)) {
|
||||
System.out.println("支付失败 = " + tradeStatus);
|
||||
log.warn("支付失败 = " + tradeStatus);
|
||||
throw new BusinessException("支付失败");
|
||||
}
|
||||
// 4. 修改支付状态
|
||||
@@ -337,10 +371,12 @@ public class PaymentController extends BaseController {
|
||||
order.setPayTime(DateUtil.date());
|
||||
order.setTradeId(trade_no);
|
||||
order.setSubject(subject);
|
||||
order.setOrderNo(outTradeNo);
|
||||
|
||||
Order parentOrder = orderService.getById(order.getRentOrderId());
|
||||
parentOrder.setCurrPeriods(parentOrder.getCurrPeriods() + 1);
|
||||
order.setCurrPeriods(parentOrder.getCurrPeriods() + 1);
|
||||
order.setCurrPeriods(parentOrder.getCurrPeriods());
|
||||
order.setBatteryRent(parentOrder.getBatteryRent());
|
||||
|
||||
parentOrder.setPayStatus(PAY_STATUS_SUCCESS);
|
||||
// 更新过期时间延长一个月
|
||||
@@ -354,7 +390,7 @@ public class PaymentController extends BaseController {
|
||||
parentOrder.setOrderStatus(ORDER_STATUS_OVER);
|
||||
parentOrder.setExpirationTime(parse);
|
||||
try {
|
||||
freezeOrderService.unfreeze(parentOrder.getOrderId());
|
||||
freezeOrderService.unfreeze(parentOrder.getOrderId(), BigDecimal.ZERO);
|
||||
} catch (AlipayApiException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -362,7 +398,6 @@ public class PaymentController extends BaseController {
|
||||
parentOrder.setExpirationTime(order.getExpirationTime());
|
||||
}
|
||||
|
||||
|
||||
orderPayService.updateById(order);
|
||||
orderService.updateById(parentOrder);
|
||||
return "success";
|
||||
@@ -380,6 +415,7 @@ public class PaymentController extends BaseController {
|
||||
isCheckSign();
|
||||
// 订单数据
|
||||
OrderPay order = orderPayService.getByIdRel(id);
|
||||
|
||||
// 当前登录用户id
|
||||
User user = new User();
|
||||
// 代付款情况
|
||||
@@ -394,6 +430,12 @@ public class PaymentController extends BaseController {
|
||||
if (balance.compareTo(payPrice) < 0) {
|
||||
return fail("余额不足 = " + balance.compareTo(payPrice));
|
||||
}
|
||||
|
||||
// Order rentOrder = orderService.getById(order.getRentOrderId());
|
||||
// if(null != rentOrder && rentOrder.getIsRenew() == 0 && rentOrder.getIsFreeze() != 1){
|
||||
// return fail("押金订单未完成!");
|
||||
// }
|
||||
|
||||
// 2. 扣除余额操作
|
||||
BigDecimal subtract = balance.subtract(payPrice);
|
||||
user.setBalance(subtract);
|
||||
@@ -402,9 +444,10 @@ public class PaymentController extends BaseController {
|
||||
UserBalanceLog userBalanceLog = new UserBalanceLog();
|
||||
userBalanceLog.setUserId(userId);
|
||||
userBalanceLog.setScene(BALANCE_USE);
|
||||
userBalanceLog.setSceneId(id);
|
||||
userBalanceLog.setMoney(payPrice);
|
||||
userBalanceLog.setBalance(subtract);
|
||||
userBalanceLog.setComments(order.getOrderNo().toString());
|
||||
userBalanceLog.setComments("订单号:" + order.getOrderNo());
|
||||
userBalanceLog.setMerchantCode(order.getMerchantCode());
|
||||
userBalanceLogService.save(userBalanceLog);
|
||||
// 4. 修改支付状态
|
||||
@@ -418,7 +461,8 @@ public class PaymentController extends BaseController {
|
||||
|
||||
Order parentOrder = orderService.getById(order.getRentOrderId());
|
||||
parentOrder.setCurrPeriods(parentOrder.getCurrPeriods() + 1);
|
||||
order.setCurrPeriods(parentOrder.getCurrPeriods() + 1);
|
||||
order.setCurrPeriods(parentOrder.getCurrPeriods());
|
||||
order.setBatteryRent(parentOrder.getBatteryRent());
|
||||
|
||||
parentOrder.setPayStatus(PAY_STATUS_SUCCESS);
|
||||
// 更新过期时间延长一个月
|
||||
@@ -432,7 +476,7 @@ public class PaymentController extends BaseController {
|
||||
parentOrder.setOrderStatus(ORDER_STATUS_OVER);
|
||||
parentOrder.setExpirationTime(parse);
|
||||
try {
|
||||
freezeOrderService.unfreeze(parentOrder.getOrderId());
|
||||
freezeOrderService.unfreeze(parentOrder.getOrderId(), BigDecimal.ZERO);
|
||||
} catch (AlipayApiException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -450,7 +494,8 @@ public class PaymentController extends BaseController {
|
||||
@ApiModelProperty("余额支付批量")
|
||||
@PostMapping("/balanceBatch")
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
public ApiResult<?> balanceBatch(@RequestBody List<Integer> orderIds) throws AlipayApiException {
|
||||
@Deprecated
|
||||
public ApiResult<?> balanceBatch(@RequestBody List<Integer> orderIds) {
|
||||
// 1. 验证签名
|
||||
isCheckSign();
|
||||
// 订单数据
|
||||
@@ -481,9 +526,10 @@ public class PaymentController extends BaseController {
|
||||
UserBalanceLog userBalanceLog = new UserBalanceLog();
|
||||
userBalanceLog.setUserId(userId);
|
||||
userBalanceLog.setScene(BALANCE_USE);
|
||||
userBalanceLog.setSceneId(d.getOrderId());
|
||||
userBalanceLog.setMoney(payPrice);
|
||||
userBalanceLog.setBalance(subtract);
|
||||
userBalanceLog.setComments(d.getOrderNo().toString());
|
||||
userBalanceLog.setComments("订单号:" + d.getOrderNo());
|
||||
userBalanceLog.setMerchantCode(d.getMerchantCode());
|
||||
userBalanceLogService.save(userBalanceLog);
|
||||
// 4. 修改支付状态
|
||||
@@ -503,7 +549,8 @@ public class PaymentController extends BaseController {
|
||||
parentOrder.setExpirationTime(nextMonthTime);
|
||||
orderService.updateById(parentOrder);
|
||||
// 保存续费订单状态
|
||||
d.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
// d.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
d.setDeliveryStatus(DELIVERY_STATUS_ACCEPT);
|
||||
d.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
d.setOrderStatus(ORDER_STATUS_COMPLETED);
|
||||
d.setStartTime(expirationTime);
|
||||
@@ -530,6 +577,10 @@ public class PaymentController extends BaseController {
|
||||
isCheckSign();
|
||||
// 订单数据
|
||||
Order order = orderService.getByIdRel(id);
|
||||
if(null == order){
|
||||
return fail("订单不存在");
|
||||
}
|
||||
|
||||
// 实例化客户端
|
||||
DefaultAlipayClient alipayClient = alipayConfig.alipayClient(order.getTenantId());
|
||||
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
|
||||
@@ -538,12 +589,9 @@ public class PaymentController extends BaseController {
|
||||
request.setBizContent(bizContent.toString());
|
||||
AlipayTradeQueryResponse response = alipayClient.certificateExecute(request);
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
orderService.paySuccess(response);
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
return orderService.paySuccess(response);
|
||||
}
|
||||
return success("调用成功", response);
|
||||
return fail("支付宝返回失败!", response);
|
||||
}
|
||||
|
||||
@ApiModelProperty("测试")
|
||||
@@ -585,4 +633,11 @@ public class PaymentController extends BaseController {
|
||||
// orderService.paySuccess(params);
|
||||
return "success";
|
||||
}
|
||||
|
||||
// @ApiModelProperty("测试JSON字段匹配")
|
||||
// @GetMapping("/mp-alipay/testJson")
|
||||
// public ApiResult<OrderPay> testJson(String outTransNo) {
|
||||
// OrderPay orderPay = orderPayService.selectByOutTransNo(outTransNo);
|
||||
// return success(orderPay);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.gxwebsoft.shop.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.gxwebsoft.common.core.web.BaseController;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.shop.service.ProfitLogService;
|
||||
@@ -16,6 +19,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -36,9 +40,26 @@ public class ProfitLogController extends BaseController {
|
||||
@GetMapping("/page")
|
||||
public ApiResult<PageResult<ProfitLog>> page(ProfitLogParam param) {
|
||||
PageParam<ProfitLog, ProfitLogParam> page = new PageParam<>(param);
|
||||
page.setDefaultOrder("create_time desc");
|
||||
PageParam<ProfitLog, ProfitLogParam> result = profitLogService.page(page, page.getWrapper());
|
||||
return success(result);
|
||||
QueryWrapper<ProfitLog> wrapper = page.getWrapper();
|
||||
LocalDate beginDate = param.getBeginDate();
|
||||
wrapper.ge(null != beginDate, "create_time", beginDate);
|
||||
LocalDate endDate = param.getEndDate();
|
||||
if(null != endDate){
|
||||
wrapper.lt("create_time", endDate);
|
||||
}
|
||||
|
||||
wrapper.orderByDesc("create_time");
|
||||
Page<ProfitLog> result = profitLogService.page(new Page<>(param.getPage(), param.getLimit()), wrapper);
|
||||
|
||||
JSONObject total = new JSONObject();
|
||||
wrapper.select("ifnull(sum(money), 0) money");
|
||||
ProfitLog sum = profitLogService.getOne(wrapper);
|
||||
if(null != sum){
|
||||
total.put("total", sum.getMoney());
|
||||
}
|
||||
PageResult<ProfitLog> retPage = new PageResult<>(result.getRecords(), result.getTotal());
|
||||
retPage.setOtherData(total);
|
||||
return success(retPage);
|
||||
// 使用关联查询
|
||||
// return success(profitLogService.pageRel(param));
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ public class RechargeOrderController extends BaseController {
|
||||
UserBalanceLog userBalanceLog = new UserBalanceLog();
|
||||
userBalanceLog.setUserId(rechargeOrder.getUserId());
|
||||
userBalanceLog.setScene(BALANCE_ADMIN);
|
||||
userBalanceLog.setSceneId(rechargeOrder.getOrderId());
|
||||
userBalanceLog.setMoney(rechargeOrder.getPayPrice());
|
||||
userBalanceLog.setBalance(balance);
|
||||
userBalanceLog.setComments("操作人:" + getLoginUser().getNickname());
|
||||
@@ -158,6 +159,7 @@ public class RechargeOrderController extends BaseController {
|
||||
UserBalanceLog userBalanceLog = new UserBalanceLog();
|
||||
userBalanceLog.setUserId(d.getUserId());
|
||||
userBalanceLog.setScene(BALANCE_ADMIN);
|
||||
userBalanceLog.setSceneId(d.getOrderId());
|
||||
userBalanceLog.setMoney(d.getPayPrice());
|
||||
userBalanceLog.setBalance(balance);
|
||||
userBalanceLog.setComments("操作人:" + nickname);
|
||||
|
||||
@@ -40,6 +40,9 @@ public class FreezeOrder implements Serializable {
|
||||
@ApiModelProperty(value = "冻结金额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty(value = "实际解冻金额")
|
||||
private BigDecimal unfreezeAmount;
|
||||
|
||||
@ApiModelProperty(value = "手机号或邮箱")
|
||||
private String payeeLogonId;
|
||||
|
||||
|
||||
@@ -10,8 +10,11 @@ import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 商户提现记录
|
||||
@@ -23,6 +26,9 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@ApiModel(value = "MerchantWithdraw对象", description = "商户提现记录")
|
||||
@TableName("shop_merchant_withdraw")
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MerchantWithdraw implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -36,12 +42,18 @@ public class MerchantWithdraw implements Serializable {
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private Integer userId;
|
||||
|
||||
@ApiModelProperty(value = "用户昵称")
|
||||
private String nickname;
|
||||
|
||||
@ApiModelProperty(value = "提现金额")
|
||||
private BigDecimal money;
|
||||
|
||||
@ApiModelProperty(value = "打款方式 (10微信 20支付宝 30银行卡)")
|
||||
@ApiModelProperty(value = "收款方式 (10微信 20支付宝 30银行卡 40线下)")
|
||||
private Integer payType;
|
||||
|
||||
@ApiModelProperty(value = "收款方式 (10微信 20支付宝 30银行卡)")
|
||||
private Integer cardType;
|
||||
|
||||
@ApiModelProperty(value = "支付宝姓名")
|
||||
private String alipayName;
|
||||
|
||||
@@ -57,7 +69,7 @@ public class MerchantWithdraw implements Serializable {
|
||||
@ApiModelProperty(value = "银行卡号")
|
||||
private String bankCard;
|
||||
|
||||
@ApiModelProperty(value = "申请状态 (10待审核 20审核通过 30驳回 40已打款)")
|
||||
@ApiModelProperty(value = "申请状态 (10待审核 20审核通过 30驳回)")
|
||||
private Integer applyStatus;
|
||||
|
||||
@ApiModelProperty(value = "驳回原因")
|
||||
@@ -95,10 +107,6 @@ public class MerchantWithdraw implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String merchantName;
|
||||
|
||||
@ApiModelProperty(value = "评论者昵称")
|
||||
@TableField(exist = false)
|
||||
private String nickname;
|
||||
|
||||
@ApiModelProperty(value = "评论者头像")
|
||||
@TableField(exist = false)
|
||||
private String avatar;
|
||||
@@ -107,4 +115,67 @@ public class MerchantWithdraw implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String realName;
|
||||
|
||||
@ApiModelProperty(value = "卡类型描述")
|
||||
@TableField(exist = false)
|
||||
private String cardTypeDis;
|
||||
|
||||
@ApiModelProperty(value = "转账方式描述")
|
||||
@TableField(exist = false)
|
||||
private String payTypeDis;
|
||||
|
||||
@ApiModelProperty(value = "状态描述")
|
||||
@TableField(exist = false)
|
||||
private String applyStatusDis;
|
||||
|
||||
public String getCardTypeDis() {
|
||||
if(null != cardType){
|
||||
switch (cardType){
|
||||
case 10:
|
||||
cardTypeDis = "微信";
|
||||
break;
|
||||
case 20:
|
||||
cardTypeDis = "支付宝";
|
||||
break;
|
||||
case 30:
|
||||
cardTypeDis = "银行卡";
|
||||
}
|
||||
}
|
||||
return cardTypeDis;
|
||||
}
|
||||
|
||||
public String getPayTypeDis() {
|
||||
if(null != payType){
|
||||
switch (payType){
|
||||
case 10:
|
||||
payTypeDis = "微信";
|
||||
break;
|
||||
case 20:
|
||||
payTypeDis = "支付宝";
|
||||
break;
|
||||
case 30:
|
||||
payTypeDis = "银行卡";
|
||||
break;
|
||||
case 40:
|
||||
payTypeDis = "线下";
|
||||
}
|
||||
}
|
||||
return payTypeDis;
|
||||
}
|
||||
|
||||
public String getApplyStatusDis() {
|
||||
if(null != applyStatus){
|
||||
switch (applyStatus){
|
||||
case 10:
|
||||
applyStatusDis = "待审核";
|
||||
break;
|
||||
case 30:
|
||||
applyStatusDis = "审核拒绝";
|
||||
break;
|
||||
case 20:
|
||||
applyStatusDis = "审核通过";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return applyStatusDis;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.gxwebsoft.shop.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.gxwebsoft.apps.entity.Equipment;
|
||||
import com.gxwebsoft.apps.entity.EquipmentOrderGoods;
|
||||
@@ -36,7 +38,6 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty(value = "订单号")
|
||||
private String orderNo;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "商品总金额(不含优惠折扣)")
|
||||
private BigDecimal totalPrice;
|
||||
|
||||
@@ -118,9 +119,10 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty(value = "物流单号 (废弃)")
|
||||
private String expressNo;
|
||||
|
||||
@ApiModelProperty(value = "发货状态(10未发货 20已发货 30部分发货)")
|
||||
@ApiModelProperty(value = "发货状态(10未发货 20已发货 30部分发货 40已绑定)")
|
||||
private Integer deliveryStatus;
|
||||
|
||||
@ApiModelProperty(value = "是否交押金")
|
||||
private Integer isFreeze;
|
||||
|
||||
@ApiModelProperty(value = "发货时间")
|
||||
@@ -132,7 +134,7 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty(value = "收货时间")
|
||||
private Date receiptTime;
|
||||
|
||||
@ApiModelProperty(value = "订单状态(10进行中 20取消 21待取消 30已完成)")
|
||||
@ApiModelProperty(value = "订单状态(10待付款 20进行中 21待取消 30已绑定 40已完成)")
|
||||
private Integer orderStatus;
|
||||
|
||||
@ApiModelProperty(value = "赠送的积分数量")
|
||||
@@ -217,6 +219,18 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String comments;
|
||||
|
||||
@ApiModelProperty(value = "收货人手机号")
|
||||
private String receiptPhone;
|
||||
|
||||
@ApiModelProperty(value = "紧急联系人")
|
||||
private String emergentUser;
|
||||
|
||||
@ApiModelProperty(value = "单位地址")
|
||||
private String officeAddress;
|
||||
|
||||
@ApiModelProperty(value = "家庭地址")
|
||||
private String homeAddress;
|
||||
|
||||
@ApiModelProperty(value = "状态, 0正常, 1冻结")
|
||||
private Integer status;
|
||||
|
||||
@@ -281,6 +295,10 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty("逾期天数")
|
||||
private Integer expirationDay;
|
||||
|
||||
@ApiModelProperty("剩余天数")
|
||||
@TableField(exist = false)
|
||||
private Integer restDay;
|
||||
|
||||
@ApiModelProperty("设备")
|
||||
@TableField(exist = false)
|
||||
private Equipment equipment;
|
||||
@@ -296,4 +314,30 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty("芝麻免押")
|
||||
@TableField(exist = false)
|
||||
private String orderStr;
|
||||
|
||||
@ApiModelProperty("下单用户手机号")
|
||||
@TableField(exist = false)
|
||||
private String userPhone;
|
||||
|
||||
@ApiModelProperty("设备编码")
|
||||
@TableField(exist = false)
|
||||
private String equipmentCode;
|
||||
|
||||
public Integer getRestDay() {
|
||||
if(null != orderStatus){
|
||||
switch(orderStatus){
|
||||
case 10:
|
||||
case 40:
|
||||
return 0;
|
||||
case 20:
|
||||
case 30:
|
||||
default:
|
||||
if(null == expirationTime){
|
||||
return 0;
|
||||
}
|
||||
return Math.toIntExact(DateUtil.between(new Date(), expirationTime, DateUnit.DAY, false));
|
||||
}
|
||||
}
|
||||
return restDay;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
package com.gxwebsoft.shop.entity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@@ -9,11 +13,14 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.gxwebsoft.common.core.constants.OrderConstants;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import static com.gxwebsoft.common.core.constants.OrderConstants.PAY_STATUS_NO_PAY;
|
||||
|
||||
/**
|
||||
* 订单记录表
|
||||
*
|
||||
@@ -158,7 +165,7 @@ public class OrderPay implements Serializable {
|
||||
private String dealerPhone;
|
||||
|
||||
@ApiModelProperty(value = "逾期天数")
|
||||
private Integer expirationDay;
|
||||
private Long expirationDay;
|
||||
|
||||
@ApiModelProperty(value = "租户id")
|
||||
private Integer tenantId;
|
||||
@@ -169,4 +176,32 @@ public class OrderPay implements Serializable {
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "是否已交押金")
|
||||
@TableField(exist = false)
|
||||
private Integer isFreeze;
|
||||
|
||||
@ApiModelProperty(value = "是否续费单")
|
||||
@TableField(exist = false)
|
||||
private Integer isRenew;
|
||||
|
||||
@ApiModelProperty(value = "下单类型")
|
||||
@TableField(exist = false)
|
||||
private String equipmentCategory;
|
||||
|
||||
@ApiModelProperty(value = "是否存在成功的押金订单")
|
||||
@TableField(exist = false)
|
||||
private Integer hasFreeze;
|
||||
|
||||
@ApiModelProperty(value = "支付宝支付参数")
|
||||
@TableField(exist = false)
|
||||
private String orderStr;
|
||||
|
||||
public Long getExpirationDay() {
|
||||
switch(payStatus){
|
||||
case OrderConstants.PAY_STATUS_NO_PAY:
|
||||
case OrderConstants.PAY_STATUS_SUCCESS:
|
||||
expirationDay = DateUtil.between(new Date(), expirationTime, DateUnit.DAY, false);
|
||||
}
|
||||
return expirationDay;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class OrderRefund implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "订单ID")
|
||||
private Integer orderId;
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "订单编号")
|
||||
private String orderNo;
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ public class OrderRefund implements Serializable {
|
||||
@ApiModelProperty(value = "用户申请原因(说明)")
|
||||
private String applyDesc;
|
||||
|
||||
@ApiModelProperty(value = "商家审核状态(0待审核 10已同意 20已拒绝)")
|
||||
@ApiModelProperty(value = "商家审核状态(0待审核 10申请中 20已同意 30已拒绝)")
|
||||
private Integer auditStatus;
|
||||
|
||||
@ApiModelProperty(value = "商家拒绝原因(说明)")
|
||||
|
||||
@@ -8,6 +8,7 @@ import java.time.LocalDateTime;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.gxwebsoft.common.core.enums.EProfitScene;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -49,6 +50,10 @@ public class ProfitLog implements Serializable {
|
||||
@ApiModelProperty(value = "收益类型(1资产收益,2服务费收益,3推广收益,4门店业绩提成,5站点业绩提成)")
|
||||
private Integer scene;
|
||||
|
||||
@ApiModelProperty(value = "收益类型描述")
|
||||
@TableField(exist = false)
|
||||
private String sceneDis;
|
||||
|
||||
@ApiModelProperty(value = "变动金额")
|
||||
private BigDecimal money;
|
||||
|
||||
@@ -74,16 +79,19 @@ public class ProfitLog implements Serializable {
|
||||
@ApiModelProperty(value = "商户编码")
|
||||
private String merchantCode;
|
||||
|
||||
@ApiModelProperty(value = "商户名称")
|
||||
private String merchantName;
|
||||
|
||||
@ApiModelProperty(value = "设备编码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiModelProperty(value = "设备编码")
|
||||
@ApiModelProperty(value = "设备编号")
|
||||
private Integer equipmentId;
|
||||
|
||||
@ApiModelProperty(value = "订单用户名")
|
||||
private String orderUserName;
|
||||
|
||||
@ApiModelProperty(value = "订单用户手机号")
|
||||
private String orderUserPhone;
|
||||
|
||||
@ApiModelProperty(value = "租户id")
|
||||
@@ -95,4 +103,10 @@ public class ProfitLog implements Serializable {
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
public String getSceneDis() {
|
||||
if(null != scene){
|
||||
return EProfitScene.getNameByValue(scene);
|
||||
}
|
||||
return sceneDis;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,11 @@ import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 用户余额变动明细表
|
||||
@@ -23,6 +26,9 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@ApiModel(value = "UserBalanceLog对象", description = "用户余额变动明细表")
|
||||
@TableName("shop_user_balance_log")
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UserBalanceLog implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -33,9 +39,12 @@ public class UserBalanceLog implements Serializable {
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private Integer userId;
|
||||
|
||||
@ApiModelProperty(value = "余额变动场景(10用户充值 20用户消费 30管理员操作 40订单退款)")
|
||||
@ApiModelProperty(value = "余额变动场景(10用户充值 20用户消费 30管理员操作 40订单退款, 50用户提现,60提现失败)")
|
||||
private Integer scene;
|
||||
|
||||
@ApiModelProperty(value = "场景来源单号")
|
||||
private Integer sceneId;
|
||||
|
||||
@ApiModelProperty(value = "变动金额")
|
||||
private BigDecimal money;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gxwebsoft.shop.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.gxwebsoft.shop.entity.Merchant;
|
||||
import com.gxwebsoft.shop.param.MerchantParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -23,8 +24,7 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
|
||||
* @param param 查询参数
|
||||
* @return List<Merchant>
|
||||
*/
|
||||
List<Merchant> selectPageRel(@Param("page") IPage<Merchant> page,
|
||||
@Param("param") MerchantParam param);
|
||||
Page<Merchant> selectPageRel(IPage<Merchant> page, @Param("param") MerchantParam param);
|
||||
|
||||
/**
|
||||
* 查询全部
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.param.OrderParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.ResultType;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
@@ -56,4 +57,26 @@ public interface OrderMapper extends BaseMapper<Order> {
|
||||
|
||||
@InterceptorIgnore(tenantLine = "true")
|
||||
void updateByIdSettled(@Param("param") Order order);
|
||||
|
||||
/**
|
||||
* 查找到期预警订单
|
||||
* @return
|
||||
*/
|
||||
@Select("select u.phone, DATEDIFF(o.expiration_time,CURDATE()) expirationDay " +
|
||||
"from shop_order o join sys_user u on o.user_id = u.user_id " +
|
||||
"where DATEDIFF(o.expiration_time,CURDATE()) in (1, 0) and u.phone is not null " +
|
||||
"and o.pay_status = 20 and o.order_status != 40")
|
||||
@ResultType(Order.class)
|
||||
List<Order> selectAlertList();
|
||||
|
||||
/**
|
||||
* 查找超期1天订单
|
||||
* @return
|
||||
*/
|
||||
@Select("select u.phone, DATEDIFF(o.expiration_time,CURDATE()) expirationDay " +
|
||||
"from shop_order o join sys_user u on o.user_id = u.user_id " +
|
||||
"where DATEDIFF(o.expiration_time,CURDATE()) = -1 and u.phone is not null " +
|
||||
"and o.pay_status = 20 and o.order_status != 40")
|
||||
@ResultType(Order.class)
|
||||
List<Order> selectOutOfOneDayList();
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.gxwebsoft.shop.entity.OrderPay;
|
||||
import com.gxwebsoft.shop.param.OrderPayParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -34,4 +35,11 @@ public interface OrderPayMapper extends BaseMapper<OrderPay> {
|
||||
*/
|
||||
List<OrderPay> selectListRel(@Param("param") OrderPayParam param);
|
||||
|
||||
/**
|
||||
* 查询是否存在第三方支付订单号
|
||||
* @param outTradeNo
|
||||
* @return
|
||||
*/
|
||||
@Select("select * from shop_order_pay where JSON_CONTAINS(out_trans_nos, JSON_ARRAY(#{outTradeNo}))")
|
||||
OrderPay selectByOutTransNo(@Param("outTradeNo") String outTradeNo);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,14 @@
|
||||
AND a.is_temporary = #{param.isTemporary}
|
||||
</if>
|
||||
<if test="param.userId != null">
|
||||
AND a.user_id = #{param.userId}
|
||||
<choose>
|
||||
<when test="param.appMerchantCode != null">
|
||||
AND (a.user_id = #{param.userId} or a.merchant_code = #{param.appMerchantCode})
|
||||
</when>
|
||||
<otherwise>
|
||||
AND a.user_id = #{param.userId}
|
||||
</otherwise>
|
||||
</choose>
|
||||
</if>
|
||||
<if test="param.userIds != null">
|
||||
AND a.user_id IN
|
||||
@@ -192,6 +199,12 @@
|
||||
OR d.merchant_name LIKE CONCAT('%', #{param.keywords}, '%')
|
||||
)
|
||||
</if>
|
||||
<if test="param.isExpire == 1">
|
||||
AND curdate() > a.expiration_time AND a.order_status = 30
|
||||
</if>
|
||||
<if test="param.expireDay > 0">
|
||||
AND #{param.expireDay} >= datediff(a.expiration_time, curdate()) AND a.order_status = 30
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
<if test="param.createTimeEnd != null">
|
||||
AND a.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
<if test="param.orderNo != null">
|
||||
AND a.order_no = #{param.orderNo}
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -26,7 +27,7 @@ import java.util.Date;
|
||||
public class MerchantWithdrawParam extends BaseParam {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
@ApiModelProperty(value = "主键")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer id;
|
||||
|
||||
@@ -34,67 +35,24 @@ public class MerchantWithdrawParam extends BaseParam {
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private String withdrawCode;
|
||||
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
@ApiModelProperty(value = "用户昵称")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer userId;
|
||||
|
||||
@ApiModelProperty(value = "提现金额")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private BigDecimal money;
|
||||
private Integer nickname;
|
||||
|
||||
@ApiModelProperty(value = "打款方式 (10微信 20支付宝 30银行卡)")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer payType;
|
||||
|
||||
@ApiModelProperty(value = "支付宝姓名")
|
||||
private String alipayName;
|
||||
|
||||
@ApiModelProperty(value = "支付宝账号")
|
||||
private String alipayAccount;
|
||||
|
||||
@ApiModelProperty(value = "开户行名称")
|
||||
private String bankName;
|
||||
|
||||
@ApiModelProperty(value = "银行开户名")
|
||||
private String bankAccount;
|
||||
|
||||
@ApiModelProperty(value = "银行卡号")
|
||||
private String bankCard;
|
||||
|
||||
@ApiModelProperty(value = "申请状态 (10待审核 20审核通过 30驳回 40已打款)")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer applyStatus;
|
||||
|
||||
@ApiModelProperty(value = "审核时间")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer auditTime;
|
||||
@ApiModelProperty(value = "开始日期")
|
||||
private LocalDate beginDate;
|
||||
|
||||
@ApiModelProperty(value = "驳回原因")
|
||||
private String rejectReason;
|
||||
|
||||
@ApiModelProperty(value = "来源客户端(APP、H5、小程序等)")
|
||||
private String platform;
|
||||
|
||||
@ApiModelProperty(value = "排序(数字越小越靠前)")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer sortNumber;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String comments;
|
||||
|
||||
@ApiModelProperty(value = "状态, 0正常, 1冻结")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "是否删除, 0否, 1是")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "关联商户编号")
|
||||
private String merchantCode;
|
||||
|
||||
@ApiModelProperty(value = "商户名称")
|
||||
@QueryField(type = QueryType.LIKE)
|
||||
private String merchantName;
|
||||
@ApiModelProperty(value = "结束日期")
|
||||
private LocalDate endDate;
|
||||
|
||||
@ApiModelProperty(value = "用户编号", hidden = true)
|
||||
private Integer userId;
|
||||
}
|
||||
|
||||
@@ -71,6 +71,7 @@ public class OrderParam extends BaseParam {
|
||||
|
||||
@ApiModelProperty(value = "支付方式(废弃)")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
@Deprecated
|
||||
private Integer payType;
|
||||
|
||||
@ApiModelProperty(value = "支付方式(余额/微信/支付宝)")
|
||||
@@ -198,6 +199,10 @@ public class OrderParam extends BaseParam {
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private String merchantCode;
|
||||
|
||||
@ApiModelProperty(value = "商户编号", notes="用于小程序端查询门店客户订单")
|
||||
@TableField(exist = false)
|
||||
private String appMerchantCode;
|
||||
|
||||
@ApiModelProperty(value = "商户名称")
|
||||
@QueryField(type = QueryType.LIKE)
|
||||
private String merchantName;
|
||||
@@ -218,7 +223,6 @@ public class OrderParam extends BaseParam {
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "是否按代报餐查询")
|
||||
@TableField(exist = false)
|
||||
private Boolean agent;
|
||||
|
||||
@ApiModelProperty(value = "租户ID")
|
||||
@@ -226,19 +230,15 @@ public class OrderParam extends BaseParam {
|
||||
private Integer tenantId;
|
||||
|
||||
@ApiModelProperty("搜索关键字")
|
||||
@TableField(exist = false)
|
||||
private String keywords;
|
||||
|
||||
@ApiModelProperty(value = "签名")
|
||||
@TableField(exist = false)
|
||||
private String sign;
|
||||
|
||||
@ApiModelProperty(value = "是否查询订单商品")
|
||||
@TableField(exist = false)
|
||||
private Boolean showGoodsList;
|
||||
|
||||
@ApiModelProperty(value = "用户id集合")
|
||||
@TableField(exist = false)
|
||||
private Set<Integer> userIds;
|
||||
|
||||
private Boolean isApp;
|
||||
@@ -247,4 +247,9 @@ public class OrderParam extends BaseParam {
|
||||
|
||||
private Integer isFreeze;
|
||||
|
||||
@ApiModelProperty(value = "到期天数")
|
||||
private Integer expireDay;
|
||||
|
||||
@ApiModelProperty(value = "是否逾期")
|
||||
private Integer isExpire;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.gxwebsoft.shop.param;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("确认收货请求参数")
|
||||
@Validated
|
||||
public class OrderReceiptParam implements Serializable {
|
||||
@ApiModelProperty(value = "订单ID", required = true)
|
||||
@NotNull(message = "订单编号不能为空!")
|
||||
private Integer orderId;
|
||||
|
||||
@ApiModelProperty(value = "来源记录的参数 (json格式)", required = true)
|
||||
@NotBlank(message = "身份信息数据不能为空!")
|
||||
private String orderSourceData;
|
||||
|
||||
// @ApiModelProperty(value = "验证码", required = true)
|
||||
// @NotBlank(message = "验证码不能为空!")
|
||||
private String captcha;
|
||||
|
||||
// @ApiModelProperty(value = "收货人手机号", required = true)
|
||||
// @NotBlank(message = "收货人手机号不能为空!")
|
||||
private String receiptPhone;
|
||||
|
||||
// @ApiModelProperty(value = "紧急联系人")
|
||||
// @NotBlank(message = "紧急联系人不能为空!")
|
||||
private String emergentUser;
|
||||
|
||||
// @ApiModelProperty(value = "单位地址")
|
||||
// @NotBlank(message = "单位地址不能为空!")
|
||||
private String officeAddress;
|
||||
|
||||
// @ApiModelProperty(value = "家庭地址")
|
||||
// @NotBlank(message = "家庭地址不能为空!")
|
||||
private String homeAddress;
|
||||
}
|
||||
@@ -32,6 +32,9 @@ public class OrderRefundParam extends BaseParam {
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer orderId;
|
||||
|
||||
@ApiModelProperty(value = "订单编号")
|
||||
private String orderNo;
|
||||
|
||||
@ApiModelProperty(value = "订单商品ID")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer orderGoodsId;
|
||||
|
||||
@@ -10,6 +10,7 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 门店收益明细表查询参数
|
||||
@@ -28,49 +29,37 @@ public class ProfitLogParam extends BaseParam {
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer profitId;
|
||||
|
||||
@ApiModelProperty(value = "订单ID")
|
||||
@ApiModelProperty(value = "用户编号")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer orderId;
|
||||
private Integer userId;
|
||||
|
||||
@ApiModelProperty(value = "订单号")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private String orderNo;
|
||||
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
@ApiModelProperty(value = "用户名")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer userId;
|
||||
private String orderUserName;
|
||||
|
||||
@ApiModelProperty(value = "商户编码")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private String merchantCode;
|
||||
|
||||
@ApiModelProperty(value = "商户名")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private String merchantName;
|
||||
|
||||
@ApiModelProperty(value = "收益类型(1资产收益,2服务费收益,3推广收益,4门店业绩提成,5站点业绩提成)")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer scene;
|
||||
|
||||
@ApiModelProperty(value = "变动金额")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private BigDecimal money;
|
||||
|
||||
@ApiModelProperty(value = "变动后余额")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private BigDecimal balance;
|
||||
|
||||
@ApiModelProperty(value = "管理员备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "排序(数字越小越靠前)")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer sortNumber;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String comments;
|
||||
|
||||
@ApiModelProperty(value = "状态, 0正常, 1冻结")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "是否删除, 0否, 1是")
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "商户编码")
|
||||
private String merchantCode;
|
||||
@ApiModelProperty(value = "开始日期")
|
||||
private LocalDate beginDate;
|
||||
|
||||
@ApiModelProperty(value = "结束日期")
|
||||
private LocalDate endDate;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.gxwebsoft.shop.param;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.gxwebsoft.common.core.annotation.QueryField;
|
||||
import com.gxwebsoft.common.core.annotation.QueryType;
|
||||
import com.gxwebsoft.common.core.web.BaseParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 商户管理查询参数
|
||||
*
|
||||
* @author 科技小王子
|
||||
* @since 2022-11-30 15:10:54
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(value = "申请提现对象", description = "申请提现请求参数")
|
||||
public class WithdrawApplyParam implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "提现金额", required = true)
|
||||
@NotNull(message = "提现金额不能为空")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty(value = "收款账号类型 (10微信 20支付宝 30银行卡),不传默认20")
|
||||
private Integer cardType = 20;
|
||||
|
||||
@ApiModelProperty(value = "支付宝姓名")
|
||||
private String alipayName;
|
||||
|
||||
@ApiModelProperty(value = "支付宝账号")
|
||||
private String alipayAccount;
|
||||
|
||||
@ApiModelProperty(value = "开户行名称")
|
||||
private String bankName;
|
||||
|
||||
@ApiModelProperty(value = "银行开户名")
|
||||
private String bankAccount;
|
||||
|
||||
@ApiModelProperty(value = "银行卡号")
|
||||
private String bankCard;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String comments;
|
||||
|
||||
@ApiModelProperty(value = "用户ID", hidden = true)
|
||||
private Integer userId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.gxwebsoft.shop.param;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(value = "提现审核拒绝对象", description = "提现审核拒绝参数")
|
||||
public class WithdrawAuditFailParam implements Serializable {
|
||||
@ApiModelProperty(value = "主键ID", required = true)
|
||||
@NotNull(message = "申请单号不能为空!")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "理由", required = true)
|
||||
@NotEmpty(message = "拒绝理由不能为空!")
|
||||
private String rejectReason;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.gxwebsoft.shop.param;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(value = "提现审核成功对象", description = "提现审核成功参数")
|
||||
public class WithdrawAuditPassParam implements Serializable {
|
||||
@ApiModelProperty(value = "主键ID", required = true)
|
||||
@NotNull(message = "申请单号不能为空!")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "收款方式 (10微信 20支付宝 30银行卡 40线下),不传默认40")
|
||||
private Integer payType = 40;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String comments;
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.gxwebsoft.shop.entity.FreezeOrder;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.param.FreezeOrderParam;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -46,9 +47,10 @@ public interface FreezeOrderService extends IService<FreezeOrder> {
|
||||
/**
|
||||
* 解冻
|
||||
* @param orderId
|
||||
* @param unFreezeAmount 解冻金额
|
||||
* @throws AlipayApiException
|
||||
*/
|
||||
void unfreeze(Integer orderId) throws AlipayApiException;
|
||||
void unfreeze(Integer orderId, BigDecimal unFreezeAmount) throws AlipayApiException;
|
||||
|
||||
/**
|
||||
* 冻结
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package com.gxwebsoft.shop.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.entity.MerchantWithdraw;
|
||||
import com.gxwebsoft.shop.param.MerchantWithdrawParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawApplyParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawAuditFailParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawAuditPassParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -39,4 +43,24 @@ public interface MerchantWithdrawService extends IService<MerchantWithdraw> {
|
||||
*/
|
||||
MerchantWithdraw getByIdRel(Integer id);
|
||||
|
||||
/**
|
||||
* 申请提现
|
||||
* @param withdraw
|
||||
* @return
|
||||
*/
|
||||
ApiResult apply(WithdrawApplyParam withdraw);
|
||||
|
||||
/**
|
||||
* 审核通过
|
||||
* @param succ
|
||||
* @return
|
||||
*/
|
||||
ApiResult auditSuccess(WithdrawAuditPassParam succ);
|
||||
|
||||
/**
|
||||
* 审核拒绝
|
||||
* @param failParam
|
||||
* @return
|
||||
*/
|
||||
ApiResult auditFail(WithdrawAuditFailParam failParam);
|
||||
}
|
||||
|
||||
@@ -39,4 +39,10 @@ public interface OrderPayService extends IService<OrderPay> {
|
||||
*/
|
||||
OrderPay getByIdRel(Integer id);
|
||||
|
||||
/**
|
||||
* 根据第三方流水号获取支付订单信息
|
||||
* @param outTradeNo
|
||||
* @return
|
||||
*/
|
||||
OrderPay selectByOutTransNo(String outTradeNo);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gxwebsoft.shop.service;
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.param.OrderParam;
|
||||
@@ -45,7 +46,7 @@ public interface OrderService extends IService<Order> {
|
||||
Order getByOutTradeNo(String outTradeNo);
|
||||
|
||||
@InterceptorIgnore(tenantLine = "true")
|
||||
void paySuccess(AlipayTradeQueryResponse params);
|
||||
ApiResult paySuccess(AlipayTradeQueryResponse params);
|
||||
|
||||
boolean allinPay(Map<String, String> params);
|
||||
|
||||
@@ -59,4 +60,15 @@ public interface OrderService extends IService<Order> {
|
||||
|
||||
void updateByIdSettled(Order order);
|
||||
|
||||
/**
|
||||
* 查找到期预警订单
|
||||
* @return
|
||||
*/
|
||||
List<Order> findAlertList();
|
||||
|
||||
/**
|
||||
* 查找逾期提醒订单
|
||||
* @return
|
||||
*/
|
||||
List<Order> findOverdueList();
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gxwebsoft.shop.service.impl;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
@@ -11,6 +12,7 @@ import com.alipay.api.response.*;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gxwebsoft.apps.entity.EquipmentGoods;
|
||||
import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.core.utils.AlipayConfigUtil;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.mapper.FreezeOrderMapper;
|
||||
@@ -21,6 +23,7 @@ import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.service.OrderPayService;
|
||||
import com.gxwebsoft.shop.service.OrderService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@@ -34,6 +37,7 @@ import java.util.List;
|
||||
* @author 科技小王子
|
||||
* @since 2023-10-08 10:15:22
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class FreezeOrderServiceImpl extends ServiceImpl<FreezeOrderMapper, FreezeOrder> implements FreezeOrderService {
|
||||
|
||||
@@ -73,7 +77,7 @@ public class FreezeOrderServiceImpl extends ServiceImpl<FreezeOrderMapper, Freez
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unfreeze(Integer orderId) throws AlipayApiException {
|
||||
public void unfreeze(Integer orderId, BigDecimal unFreezeAmount) throws AlipayApiException {
|
||||
Order order = orderService.getById(orderId);
|
||||
if (!StringUtils.hasText(order.getFreezeOrderNo()) || order.getOrderSource() == 10) {
|
||||
return;
|
||||
@@ -82,6 +86,14 @@ public class FreezeOrderServiceImpl extends ServiceImpl<FreezeOrderMapper, Freez
|
||||
FreezeOrder freezeOrder = this.lambdaQuery().eq(FreezeOrder::getOutOrderNo, order.getFreezeOrderNo())
|
||||
.eq(FreezeOrder::getStatus, "SUCCESS").orderByDesc(FreezeOrder::getCreateTime).last("limit 1").one();
|
||||
|
||||
if(null == freezeOrder){
|
||||
throw new BusinessException("没有冻结订单!");
|
||||
}
|
||||
if(null == unFreezeAmount || unFreezeAmount.compareTo(BigDecimal.ZERO) == 0){
|
||||
unFreezeAmount = freezeOrder.getAmount();
|
||||
}
|
||||
freezeOrder.setUnfreezeAmount(unFreezeAmount);
|
||||
|
||||
DefaultAlipayClient alipayClient = alipayConfig.alipayClient(6);
|
||||
AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest();
|
||||
request.setNotifyUrl("https://yxw.wsdns.cn/api/shop/freeze-order/notify");
|
||||
@@ -101,12 +113,14 @@ public class FreezeOrderServiceImpl extends ServiceImpl<FreezeOrderMapper, Freez
|
||||
|
||||
request.setBizContent(bizContent.toString());
|
||||
AlipayFundAuthOrderUnfreezeResponse response = alipayClient.certificateExecute(request);
|
||||
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
System.out.println(response.getBody());
|
||||
// System.out.println("调用成功");
|
||||
// log.info(response.getBody());
|
||||
int updNum = baseMapper.updateById(freezeOrder);
|
||||
log.info("解冻押金处理成功!订单号{},更新结果{}", orderId, updNum);
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
log.warn("调用支付宝解冻接口失败!{}", response.getBody());
|
||||
throw new AlipayApiException("调用押金解冻失败!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,18 +161,20 @@ public class FreezeOrderServiceImpl extends ServiceImpl<FreezeOrderMapper, Freez
|
||||
request.setBizContent(bizContent.toString());
|
||||
AlipayFundAuthOrderAppFreezeResponse response = alipayClient.sdkExecute(request);
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
FreezeOrder freezeOrder = new FreezeOrder();
|
||||
freezeOrder.setOutOrderNo(out_order_no);
|
||||
freezeOrder.setOutRequestNo(out_request_no);
|
||||
freezeOrder.setAmount(BigDecimal.valueOf(amount));
|
||||
freezeOrder.setStatus("INIT");
|
||||
freezeOrder.setRelOrderId(order.getOrderId());
|
||||
freezeOrder.setTenantId(6);
|
||||
this.save(freezeOrder);
|
||||
|
||||
return response.getBody();
|
||||
String responseBody = response.getBody();
|
||||
log.info("调用芝麻信用成功!{}", responseBody);
|
||||
return responseBody;
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
log.info("调用芝麻信用失败!{}", JSON.toJSONString(response));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gxwebsoft.shop.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gxwebsoft.common.core.utils.CacheClient;
|
||||
import com.gxwebsoft.common.core.web.PageParam;
|
||||
@@ -33,15 +34,13 @@ import static com.gxwebsoft.common.core.constants.RedisConstants.MERCHANT_GEO_KE
|
||||
public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> implements MerchantService {
|
||||
@Resource
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
@Resource
|
||||
private CacheClient cacheClient;
|
||||
|
||||
@Override
|
||||
public PageResult<Merchant> pageRel(MerchantParam param) {
|
||||
PageParam<Merchant, MerchantParam> page = new PageParam<>(param);
|
||||
page.setDefaultOrder("create_time desc");
|
||||
List<Merchant> list = baseMapper.selectPageRel(page, param);
|
||||
return new PageResult<>(list, page.getTotal());
|
||||
Page<Merchant> list = baseMapper.selectPageRel(page, param);
|
||||
return new PageResult<>(list.getRecords(), list.getTotal());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,14 +1,44 @@
|
||||
package com.gxwebsoft.shop.service.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
|
||||
import com.alipay.api.domain.Participant;
|
||||
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
|
||||
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gxwebsoft.common.core.constants.BalanceConstants;
|
||||
import com.gxwebsoft.common.core.utils.AlipayConfigUtil;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import com.gxwebsoft.shop.entity.Merchant;
|
||||
import com.gxwebsoft.shop.entity.UserBalanceLog;
|
||||
import com.gxwebsoft.shop.mapper.MerchantWithdrawMapper;
|
||||
import com.gxwebsoft.shop.param.WithdrawApplyParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawAuditFailParam;
|
||||
import com.gxwebsoft.shop.param.WithdrawAuditPassParam;
|
||||
import com.gxwebsoft.shop.service.MerchantService;
|
||||
import com.gxwebsoft.shop.service.MerchantWithdrawService;
|
||||
import com.gxwebsoft.shop.entity.MerchantWithdraw;
|
||||
import com.gxwebsoft.shop.param.MerchantWithdrawParam;
|
||||
import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.service.UserBalanceLogService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -18,14 +48,28 @@ import java.util.List;
|
||||
* @since 2022-12-02 00:41:09
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class MerchantWithdrawServiceImpl extends ServiceImpl<MerchantWithdrawMapper, MerchantWithdraw> implements MerchantWithdrawService {
|
||||
|
||||
private final UserService userService;
|
||||
private final MerchantService merchantService;
|
||||
private final UserBalanceLogService userBalanceLogService;
|
||||
private final AlipayConfigUtil alipayConfig;
|
||||
@Override
|
||||
public PageResult<MerchantWithdraw> pageRel(MerchantWithdrawParam param) {
|
||||
PageParam<MerchantWithdraw, MerchantWithdrawParam> page = new PageParam<>(param);
|
||||
page.setDefaultOrder("create_time desc");
|
||||
List<MerchantWithdraw> list = baseMapper.selectPageRel(page, param);
|
||||
return new PageResult<>(list, page.getTotal());
|
||||
QueryWrapper wrapper = page.getWrapper();
|
||||
LocalDate beginDate = param.getBeginDate();
|
||||
Integer userId = param.getUserId();
|
||||
wrapper.eq(null != userId && userId > 0, "user_id", userId)
|
||||
.ge(null != beginDate, "create_time", beginDate);
|
||||
LocalDate endDate = param.getEndDate();
|
||||
if(null != endDate){
|
||||
wrapper.lt("create_time", endDate);
|
||||
}
|
||||
wrapper.orderByDesc("create_time");
|
||||
Page<MerchantWithdraw> list = baseMapper.selectPage(page, wrapper);
|
||||
return new PageResult<>(list.getRecords(), list.getTotal());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,4 +88,223 @@ public class MerchantWithdrawServiceImpl extends ServiceImpl<MerchantWithdrawMap
|
||||
return param.getOne(baseMapper.selectListRel(param));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public ApiResult apply(WithdrawApplyParam withdrawParam) {
|
||||
// 判断用户可提现余额是否足够
|
||||
Integer userId = withdrawParam.getUserId();
|
||||
User user = userService.getById(userId);
|
||||
BigDecimal amount = withdrawParam.getAmount();
|
||||
BigDecimal balance = user.getBalance();
|
||||
if(amount.compareTo(balance) > 0){
|
||||
return ApiResult.fail("账户余额不足!");
|
||||
}
|
||||
|
||||
Integer tenantId = user.getTenantId();
|
||||
Merchant merchant = merchantService.getOne(Wrappers.<Merchant>lambdaQuery()
|
||||
.eq(Merchant::getMerchantOwner, userId)
|
||||
.eq(Merchant::getTenantId, tenantId)
|
||||
.last("limit 1"));
|
||||
|
||||
Integer cardType = withdrawParam.getCardType();
|
||||
String alipayName = withdrawParam.getAlipayName();
|
||||
String alipayAccount = withdrawParam.getAlipayAccount();
|
||||
String bankName = withdrawParam.getBankName();
|
||||
String bankAccount = withdrawParam.getBankAccount();
|
||||
String bankCard = withdrawParam.getBankCard();
|
||||
|
||||
if(cardType == 20){
|
||||
if(StrUtil.isBlank(alipayName) || StrUtil.isBlank(alipayAccount)){
|
||||
return ApiResult.fail("支付宝账户不能为空!");
|
||||
}
|
||||
} else if(cardType == 30) {
|
||||
if(StrUtil.isBlank(bankName) || StrUtil.isBlank(bankAccount) || StrUtil.isBlank(bankCard)){
|
||||
return ApiResult.fail("银行账户不能为空!");
|
||||
}
|
||||
} else {
|
||||
return ApiResult.fail("提现方式不存在!");
|
||||
}
|
||||
|
||||
MerchantWithdraw withdraw = MerchantWithdraw.builder()
|
||||
.withdrawCode(IdUtil.getSnowflakeNextIdStr())
|
||||
.userId(userId)
|
||||
.nickname(user.getNickname())
|
||||
.tenantId(tenantId)
|
||||
.money(amount)
|
||||
.cardType(cardType)
|
||||
.alipayName(alipayName)
|
||||
.alipayAccount(alipayAccount)
|
||||
.bankName(bankName)
|
||||
.bankAccount(bankAccount)
|
||||
.bankCard(bankCard)
|
||||
.sortNumber(1)
|
||||
.applyStatus(10)
|
||||
.status(0)
|
||||
.deleted(0)
|
||||
.createTime(new Date())
|
||||
.updateTime(new Date())
|
||||
.build();
|
||||
|
||||
if(null != merchant){
|
||||
withdraw.setMerchantCode(merchant.getMerchantCode());
|
||||
}
|
||||
baseMapper.insert(withdraw);
|
||||
|
||||
BigDecimal bBal = balance.subtract(amount);
|
||||
UserBalanceLog bal = UserBalanceLog.builder()
|
||||
.userId(userId)
|
||||
.scene(BalanceConstants.BALANCE_WITHDRAW)
|
||||
.avatar(user.getAvatar())
|
||||
.merchantCode(withdraw.getMerchantCode())
|
||||
.money(amount)
|
||||
.balance(bBal)
|
||||
.tenantId(tenantId)
|
||||
.sortNumber(1)
|
||||
.status(0)
|
||||
.deleted(0)
|
||||
.createTime(new Date())
|
||||
.updateTime(new Date())
|
||||
.build();
|
||||
userBalanceLogService.save(bal);
|
||||
|
||||
user.setBalance(bBal);
|
||||
userService.updateById(user);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public ApiResult auditSuccess(WithdrawAuditPassParam withdrawApplyParam) {
|
||||
Integer id = withdrawApplyParam.getId();
|
||||
MerchantWithdraw withdraw = baseMapper.selectById(id);
|
||||
if(null == withdraw){
|
||||
return ApiResult.fail("提现申请单不存在!");
|
||||
}
|
||||
int applyStatus = withdraw.getApplyStatus();
|
||||
switch (applyStatus){
|
||||
case 20:
|
||||
return ApiResult.fail("提现申请单已审核通过!");
|
||||
case 30:
|
||||
return ApiResult.fail("提现申请单已审核驳回!");
|
||||
case 10:
|
||||
}
|
||||
|
||||
Integer payType = withdrawApplyParam.getPayType();
|
||||
if(payType == 20){
|
||||
Integer cardType = withdraw.getCardType();
|
||||
if(cardType != 20){
|
||||
return ApiResult.fail("用户申请提现账号非支付宝,不能通过支付宝打款!");
|
||||
}
|
||||
|
||||
ApiResult ret = transferByAlipay(withdraw);
|
||||
if(!ret.isOk()){
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
String comments = withdrawApplyParam.getComments();
|
||||
withdraw.setApplyStatus(20);
|
||||
if(StrUtil.isNotBlank(comments) && StrUtil.isBlank(withdraw.getComments())){
|
||||
withdraw.setComments(comments);
|
||||
}
|
||||
withdraw.setUpdateTime(new Date());
|
||||
baseMapper.updateById(withdraw);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过支付宝提现
|
||||
* @param withdraw
|
||||
* @return
|
||||
*/
|
||||
private ApiResult transferByAlipay(MerchantWithdraw withdraw) {
|
||||
Integer id = withdraw.getId();
|
||||
log.info("走支付宝渠道提现,申请单号{}。", id);
|
||||
String amount = String.valueOf(withdraw.getMoney());
|
||||
|
||||
try{
|
||||
AlipayClient alipayClient = alipayConfig.alipayClient(withdraw.getTenantId());
|
||||
|
||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||
AlipayFundTransUniTransferModel aliModel = new AlipayFundTransUniTransferModel();
|
||||
aliModel.setOutBizNo(withdraw.getWithdrawCode());
|
||||
aliModel.setRemark("安博驰");
|
||||
aliModel.setBizScene("DIRECT_TRANSFER");
|
||||
Participant payeeInfo = new Participant();
|
||||
payeeInfo.setIdentity(withdraw.getUserId() + "");
|
||||
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
|
||||
payeeInfo.setName(withdraw.getAlipayName());
|
||||
aliModel.setPayeeInfo(payeeInfo);
|
||||
aliModel.setTransAmount(amount);
|
||||
aliModel.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
||||
aliModel.setOrderTitle("安博驰");
|
||||
request.setBizModel(aliModel);
|
||||
log.info("提现单号{}提交支付宝转账参数:{}", id, JSON.toJSONString(aliModel));
|
||||
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
||||
if(response.isSuccess()){
|
||||
log.info("支付宝转账成功!申请单号:{}", id);
|
||||
return ApiResult.ok();
|
||||
} else {
|
||||
log.warn("支付宝转账不成功!{}" , JSON.toJSONString(response));
|
||||
return ApiResult.fail("支付宝转账失败!" + response.getSubMsg());
|
||||
}
|
||||
}catch( AlipayApiException e){
|
||||
log.error("支付宝转账出错!" + e.getMessage(), e);
|
||||
return ApiResult.fail("支付宝提现出错!" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public ApiResult auditFail(WithdrawAuditFailParam failParam) {
|
||||
Integer id = failParam.getId();
|
||||
MerchantWithdraw withdraw = baseMapper.selectById(id);
|
||||
if(null == withdraw){
|
||||
return ApiResult.fail("提现申请单不存在!");
|
||||
}
|
||||
int applyStatus = withdraw.getApplyStatus();
|
||||
switch (applyStatus){
|
||||
case 20:
|
||||
return ApiResult.fail("提现申请单已审核通过!");
|
||||
case 30:
|
||||
return ApiResult.fail("提现申请单已审核驳回!");
|
||||
case 10:
|
||||
}
|
||||
|
||||
String reason = failParam.getRejectReason();
|
||||
if(StrUtil.isBlank(reason)){
|
||||
reason = "提现审核拒绝";
|
||||
}
|
||||
withdraw.setApplyStatus(30);
|
||||
withdraw.setRejectReason(reason);
|
||||
withdraw.setUpdateTime(new Date());
|
||||
baseMapper.updateById(withdraw);
|
||||
|
||||
Integer userId = withdraw.getUserId();
|
||||
User user = userService.getById(userId);
|
||||
BigDecimal balance = user.getBalance();
|
||||
BigDecimal amount = withdraw.getMoney();
|
||||
|
||||
BigDecimal bBal = balance.add(amount);
|
||||
UserBalanceLog bal = UserBalanceLog.builder()
|
||||
.userId(userId)
|
||||
.scene(BalanceConstants.BALANCE_WITHDRAW_REJECT)
|
||||
.avatar(user.getAvatar())
|
||||
.merchantCode(withdraw.getMerchantCode())
|
||||
.money(amount)
|
||||
.balance(bBal)
|
||||
.tenantId(withdraw.getTenantId())
|
||||
.sortNumber(1)
|
||||
.comments(reason)
|
||||
.status(0)
|
||||
.deleted(0)
|
||||
.createTime(new Date())
|
||||
.updateTime(new Date())
|
||||
.build();
|
||||
userBalanceLogService.save(bal);
|
||||
user.setBalance(bBal);
|
||||
userService.updateById(user);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,4 +44,8 @@ public class OrderPayServiceImpl extends ServiceImpl<OrderPayMapper, OrderPay> i
|
||||
return param.getOne(baseMapper.selectListRel(param));
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderPay selectByOutTransNo(String outTradeNo) {
|
||||
return baseMapper.selectByOutTransNo(outTradeNo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gxwebsoft.shop.service.impl;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@@ -11,7 +12,9 @@ import com.gxwebsoft.apps.entity.EquipmentOrderGoods;
|
||||
import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
import com.gxwebsoft.apps.service.EquipmentOrderGoodsService;
|
||||
import com.gxwebsoft.apps.service.EquipmentService;
|
||||
import com.gxwebsoft.common.core.Constants;
|
||||
import com.gxwebsoft.common.core.utils.CacheClient;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
@@ -88,13 +91,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
return new PageResult<>(list, page.getTotal());
|
||||
}
|
||||
|
||||
// TODO 待优化:查询时自动排序并返回分页数据
|
||||
@Override
|
||||
public List<Order> listRel(OrderParam param) {
|
||||
List<Order> list = baseMapper.selectListRel(param);
|
||||
// 排序
|
||||
|
||||
PageParam<Order, OrderParam> page = new PageParam<>();
|
||||
page.setDefaultOrder("create_time desc");
|
||||
String sort = param.getSort();
|
||||
String order = param.getOrder();
|
||||
if(StrUtil.isNotBlank(sort)){
|
||||
String orderStr = sort;
|
||||
if(StrUtil.isNotBlank(order)){
|
||||
orderStr += " " + order;
|
||||
}
|
||||
page.setDefaultOrder(orderStr);
|
||||
}
|
||||
else {
|
||||
page.setDefaultOrder("create_time desc");
|
||||
}
|
||||
|
||||
return page.sortRecords(list);
|
||||
}
|
||||
|
||||
@@ -191,7 +207,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
*/
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@Override
|
||||
public void paySuccess(AlipayTradeQueryResponse params) {
|
||||
public ApiResult paySuccess(AlipayTradeQueryResponse params) {
|
||||
System.out.println("支付成功后处理的业务");
|
||||
String outTradeNo = params.getOutTradeNo();
|
||||
String totalAmount = params.getTotalAmount();
|
||||
@@ -199,8 +215,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
// 1.是否为商城订单
|
||||
Order order = orderService.getByOutTradeNo(outTradeNo);
|
||||
if (order == null) {
|
||||
System.out.println("订单不存在!");
|
||||
return;
|
||||
return new ApiResult("订单不存在!");
|
||||
}
|
||||
|
||||
Integer payStatus = order.getPayStatus();
|
||||
if(payStatus >= PAY_STATUS_SUCCESS){
|
||||
return new ApiResult("订单已支付!");
|
||||
}
|
||||
// 2.订单金额是否一致
|
||||
// 3.订单商户是否一致
|
||||
@@ -208,8 +228,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
// 5.判断交易状态
|
||||
String tradeStatus = params.getTradeStatus();
|
||||
if (!"TRADE_SUCCESS".equals(tradeStatus)) {
|
||||
System.out.println("支付未成功");
|
||||
return;
|
||||
if("TRADE_CLOSED".equals(tradeStatus)){
|
||||
// TODO 订单已关闭
|
||||
}
|
||||
return new ApiResult("支付未成功!");
|
||||
}
|
||||
|
||||
// 6.修改订单状态
|
||||
@@ -219,10 +241,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
order.setPayTime(DateUtil.date());
|
||||
order.setExpirationTime(DateUtil.nextMonth());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 6. 续租订单
|
||||
if (order.getRentOrderId() > 0) {
|
||||
Integer count = orderService.lambdaQuery().eq(Order::getRentOrderId, order.getRentOrderId()).eq(Order::getPayStatus, PAY_STATUS_SUCCESS).count();
|
||||
@@ -235,7 +253,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
DateTime nextMonthTime = DateUtil.offsetMonth(expirationTime, 1);
|
||||
parentOrder.setExpirationTime(nextMonthTime);
|
||||
// 保存续费订单状态
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
// order.setDeliveryStatus(DELIVERY_STATUS_YES);
|
||||
order.setDeliveryStatus(DELIVERY_STATUS_ACCEPT);
|
||||
order.setReceiptStatus(RECEIPT_STATUS_YES);
|
||||
order.setOrderStatus(ORDER_STATUS_COMPLETED);
|
||||
order.setStartTime(expirationTime);
|
||||
@@ -252,7 +271,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
parentOrder.setOrderStatus(ORDER_STATUS_OVER);
|
||||
parentOrder.setExpirationTime(DateUtil.parseTime("2099-12-31 23:59:59"));
|
||||
try {
|
||||
freezeOrderService.unfreeze(parentOrder.getOrderId());
|
||||
freezeOrderService.unfreeze(parentOrder.getOrderId(), BigDecimal.ZERO);
|
||||
} catch (AlipayApiException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -261,11 +280,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
orderService.updateById(order);
|
||||
|
||||
return new ApiResult(Constants.RESULT_OK_CODE, "支付成功");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -285,4 +301,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Order> findAlertList() {
|
||||
return baseMapper.selectAlertList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Order> findOverdueList() {
|
||||
return baseMapper.selectOutOfOneDayList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,12 +9,6 @@ spring:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
level:
|
||||
com.gxwebsoft: DEBUG
|
||||
com.baomidou.mybatisplus: DEBUG
|
||||
|
||||
socketio:
|
||||
host: localhost #IP地址
|
||||
|
||||
@@ -31,3 +25,16 @@ config:
|
||||
bucketName: oss-yunxinwei
|
||||
bucketDomain: https://oss.wsdns.cn
|
||||
aliyunDomain: https://oss-yunxinwei.oss-cn-shenzhen.aliyuncs.com
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.gxwebsoft: INFO
|
||||
com.baomidou.mybatisplus: INFO
|
||||
file:
|
||||
name: yxw.log
|
||||
logback:
|
||||
rollingpolicy:
|
||||
# file-name-pattern:
|
||||
max-history: 30
|
||||
@@ -12,19 +12,26 @@ spring:
|
||||
# 日志配置
|
||||
logging:
|
||||
file:
|
||||
name: websoft-api.log
|
||||
name: logs/websoft-api.log
|
||||
level:
|
||||
root: WARN
|
||||
com.gxwebsoft: ERROR
|
||||
root: INFO
|
||||
com.gxwebsoft: INFO
|
||||
com.baomidou.mybatisplus: ERROR
|
||||
com.alipay.api: INFO
|
||||
logback:
|
||||
rollingpolicy:
|
||||
# file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
|
||||
max-history: 30
|
||||
|
||||
socketio:
|
||||
host: 0.0.0.0 #IP地址
|
||||
# host: localhost
|
||||
|
||||
# 框架配置
|
||||
config:
|
||||
# 生产环境接口
|
||||
server-url: https://yxw.wsdns.cn/api
|
||||
# server-url: https://127.0.0.1:9090/api
|
||||
upload-path: /www/wwwroot/file.ws/
|
||||
|
||||
# 阿里云OSS云存储
|
||||
@@ -34,3 +41,9 @@ config:
|
||||
bucketName: oss-yunxinwei
|
||||
bucketDomain: https://oss.wsdns.cn
|
||||
aliyunDomain: https://oss-yunxinwei.oss-cn-shenzhen.aliyuncs.com
|
||||
|
||||
#定时表达式
|
||||
cron:
|
||||
alert: 0 30 9 * * ?
|
||||
profit: 0 0/2 * * * ?
|
||||
timeoutOrder: 1 0 0 * * ?
|
||||
@@ -7,8 +7,11 @@ socketio:
|
||||
# 多环境配置
|
||||
spring:
|
||||
profiles:
|
||||
active: dev
|
||||
|
||||
active: prod
|
||||
# json时间格式设置
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
date-format: yyyy-MM-dd HH:mm:ss
|
||||
application:
|
||||
name: server
|
||||
|
||||
@@ -37,11 +40,6 @@ spring:
|
||||
login-username: admin
|
||||
login-password: admin
|
||||
|
||||
# json时间格式设置
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
date-format: yyyy-MM-dd HH:mm:ss
|
||||
|
||||
# 设置上传文件大小
|
||||
servlet:
|
||||
multipart:
|
||||
@@ -91,6 +89,7 @@ config:
|
||||
file-server: https://file.wsdns.cn
|
||||
upload-path: /Users/gxwebsoft/Documents/uploads/
|
||||
local-upload-path: /Users/gxwebsoft/Documents/uploads/
|
||||
tenantId: 6
|
||||
|
||||
# 阿里云OSS云存储
|
||||
endpoint: https://oss-cn-shenzhen.aliyuncs.com
|
||||
@@ -99,5 +98,16 @@ config:
|
||||
bucketName: oss-gxwebsoft
|
||||
bucketDomain: https://oss.wsdns.cn
|
||||
aliyunDomain: https://oss-gxwebsoft.oss-cn-shenzhen.aliyuncs.com
|
||||
# smsSign: ${SMS_SIGN:南宁网宿科技}
|
||||
# smsKey: ${SMS_ACCESS_KEY:LTAI5tBWM9dSmEAoQFhNqxqJ}
|
||||
# smsSecret: ${SMS_SECRET:Dr0BqiKl7eaL1NNKoCd12qKsbgjnum}
|
||||
|
||||
# 日志配置
|
||||
#logging:
|
||||
# level:
|
||||
# com.gxwebsoft: ${LOG_LEVEL:INFO}
|
||||
# com.baomidou.mybatisplus: ${LOG_LEVEL:INFO}
|
||||
# file:
|
||||
# path: {LOGGING_PATH: ../logs}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user