1、增加配送师傅订单派送发送消息通知功能
2、增加普通商品配完成送结算步梯费用给到配送师傅业务功能 3、增加分销商查询个人资金流水功能
This commit is contained in:
@@ -22,6 +22,7 @@ public enum ShopDealerCapitalUpdateEnum {
|
||||
FREEZE_MONEY_THAW(50, "佣金解冻", true),
|
||||
DELIVERY_REWARD(60, "配送奖励", true),
|
||||
DELIVERY_INCOME(61, "配送提成", true),
|
||||
DELIVERY_FLOOR_FEE(62, "配送步梯费", true),
|
||||
ORDER_REFUND(70, "佣金退回(退单)", false),
|
||||
;
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.mapper.UserMapper;
|
||||
import com.gxwebsoft.glt.dto.GltTransferOrderDto;
|
||||
import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto;
|
||||
import com.gxwebsoft.glt.entity.GltTicketOrder;
|
||||
import com.gxwebsoft.glt.param.GltTicketOrderDeliveredParam;
|
||||
import com.gxwebsoft.glt.param.GltTicketOrderParam;
|
||||
@@ -178,14 +179,6 @@ public class GltTicketOrderController extends BaseController {
|
||||
}
|
||||
|
||||
gltTicketOrderService.createWithWriteOff(gltTicketOrder, loginUser.getUserId(), loginUser.getTenantId());
|
||||
|
||||
// 订单创建成功后,异步通知所有在线配送员有新订单
|
||||
try {
|
||||
notifyRidersOfNewOrder(gltTicketOrder, loginUser.getTenantId());
|
||||
} catch (Exception e) {
|
||||
log.warn("通知配送员失败(不影响下单): {}", e.getMessage());
|
||||
}
|
||||
|
||||
return success("下单成功");
|
||||
}
|
||||
|
||||
@@ -244,8 +237,14 @@ public class GltTicketOrderController extends BaseController {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("已向 {} 位配送员发送新订单通知", riders.size());
|
||||
@PreAuthorize("isAuthenticated()")
|
||||
@Operation(summary = "配送员调度单通知")
|
||||
@PostMapping("/sendRiderNewOrderNotice")
|
||||
public ApiResult<?> sendRiderNewOrderNotice(@RequestBody NoticeRiderNewOrderDto noticeRiderNewOrderDto) {
|
||||
gltSubscribeMessageService.sendRiderNewOrderNotice(noticeRiderNewOrderDto);
|
||||
return success("发送消息成功!");
|
||||
}
|
||||
|
||||
@PreAuthorize("isAuthenticated()")
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.gxwebsoft.glt.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 配送员新订单配送通知
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
@Schema(name = "ShopOrderMyVerifyDto", description = "配送员新订单配送通知")
|
||||
public class NoticeRiderNewOrderDto {
|
||||
|
||||
@Schema(description = "订单号")
|
||||
private String orderNo;
|
||||
|
||||
@Schema(description = "商品名称")
|
||||
private String goodsName;
|
||||
|
||||
@Schema(description = "配送数量")
|
||||
private Integer productCount;
|
||||
|
||||
@Schema(description = "期望送达时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "租户ID")
|
||||
private Integer tenantId;
|
||||
|
||||
@Schema(description = "openID")
|
||||
private String openId;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.gxwebsoft.glt.service;
|
||||
|
||||
import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto;
|
||||
import com.gxwebsoft.glt.entity.GltTicketOrder;
|
||||
|
||||
/**
|
||||
@@ -25,4 +26,10 @@ public interface GltSubscribeMessageService {
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
boolean sendOrderStatusNotice(GltTicketOrder order, String riderOpenId, String statusText, Integer tenantId);
|
||||
|
||||
/**
|
||||
* 推送配送师傅接单提醒
|
||||
* @param noticeRiderNewOrderDto
|
||||
*/
|
||||
void sendRiderNewOrderNotice(NoticeRiderNewOrderDto noticeRiderNewOrderDto);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
package com.gxwebsoft.glt.service.impl;
|
||||
|
||||
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
|
||||
import cn.binarywang.wx.miniapp.config.WxMaConfig;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.core.utils.RedisUtil;
|
||||
import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto;
|
||||
import com.gxwebsoft.glt.entity.GltTicketOrder;
|
||||
import com.gxwebsoft.glt.service.GltSubscribeMessageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -19,7 +16,8 @@ import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.gxwebsoft.common.core.constants.RedisConstants.*;
|
||||
import static com.gxwebsoft.common.core.constants.RedisConstants.ACCESS_TOKEN_KEY;
|
||||
import static com.gxwebsoft.common.core.constants.RedisConstants.MP_WX_KEY;
|
||||
|
||||
/**
|
||||
* 微信订阅消息服务实现
|
||||
@@ -43,7 +41,34 @@ public class GltSubscribeMessageServiceImpl implements GltSubscribeMessageServic
|
||||
* 模板名称:订单配送通知
|
||||
* 关键词:订单编号、订单内容、配送地址、订单金额
|
||||
*/
|
||||
private static final String ORDER_DELIVERY_ID = "vSMSqGVy3aG1RuzQUZlk2y5sWiTFY_hewF5-R-uYwMk";
|
||||
private static final String ORDER_DELIVERY_ID = "vSMSqGVy3aG1RuzQUZlk282p5hCvuMBcHvix1AFhN90";
|
||||
|
||||
|
||||
public void sendRiderNewOrderNotice(NoticeRiderNewOrderDto entity){
|
||||
//1.获取微信accessToken
|
||||
String accessToken = getAccessToken(entity.getTenantId());
|
||||
if(accessToken == null){
|
||||
log.error("配送发单消息发生失败:获取accessToken失败!");
|
||||
return;
|
||||
}
|
||||
|
||||
//2.品名字段最大能发送20个长度字符,大于15的长度需做处理
|
||||
String goodsName = entity.getGoodsName();
|
||||
int keepLength = 15;
|
||||
if (goodsName.length() > keepLength) {
|
||||
entity.setGoodsName(goodsName.substring(0, keepLength) + "...");
|
||||
}
|
||||
|
||||
//3.组装入参
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("character_string1", Map.of("value", String.valueOf(entity.getOrderNo())));
|
||||
data.put("thing22", Map.of("value", String.valueOf(entity.getGoodsName())));
|
||||
data.put("number20", Map.of("value", String.valueOf(entity.getProductCount())));
|
||||
data.put("time24", Map.of("value", String.valueOf(entity.getCreateTime())));
|
||||
|
||||
//推送订阅消息
|
||||
sendSubscribeMessage(accessToken, entity.getOpenId(), data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送新订单通知给配送员
|
||||
@@ -65,7 +90,7 @@ public class GltSubscribeMessageServiceImpl implements GltSubscribeMessageServic
|
||||
// 构建消息内容
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("phrase1", Map.of("value", "待配送")); // 订单状态
|
||||
data.put("character_string2", Map.of("value", String.valueOf(order.getId()))); // 订单编号
|
||||
data.put("character_string2", Map.of("value", String.valueOf(order.getOrderNo()))); // 订单编号
|
||||
data.put("thing3", Map.of("value", truncateStr(order.getAddress(), 20))); // 配送地址
|
||||
data.put("number4", Map.of("value", String.valueOf(order.getTotalNum()))); // 商品数量
|
||||
data.put("time5", Map.of("value", formatTime(order.getSendTime()))); // 期望送达时间
|
||||
@@ -208,14 +233,14 @@ public class GltSubscribeMessageServiceImpl implements GltSubscribeMessageServic
|
||||
.body();
|
||||
|
||||
JSONObject result = JSON.parseObject(response);
|
||||
int errcode = result.getIntValue("errcode");
|
||||
int errCode = result.getIntValue("errcode");
|
||||
|
||||
if (errcode == 0) {
|
||||
if (errCode == 0) {
|
||||
log.info("订阅消息发送成功 - openId={}", openId);
|
||||
return true;
|
||||
} else {
|
||||
log.warn("订阅消息发送失败 - openId={}, errcode={}, errmsg={}",
|
||||
openId, errcode, result.getString("errmsg"));
|
||||
openId, errCode, result.getString("errmsg"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,12 +16,14 @@ import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.mapper.UserMapper;
|
||||
import com.gxwebsoft.common.system.redis.OrderNoUtils;
|
||||
import com.gxwebsoft.glt.dto.GltTransferOrderDto;
|
||||
import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto;
|
||||
import com.gxwebsoft.glt.entity.GltTicketOrder;
|
||||
import com.gxwebsoft.glt.entity.GltUserTicket;
|
||||
import com.gxwebsoft.glt.entity.GltUserTicketLog;
|
||||
import com.gxwebsoft.glt.mapper.GltTicketOrderMapper;
|
||||
import com.gxwebsoft.glt.mapper.GltUserTicketMapper;
|
||||
import com.gxwebsoft.glt.param.GltTicketOrderParam;
|
||||
import com.gxwebsoft.glt.service.GltSubscribeMessageService;
|
||||
import com.gxwebsoft.glt.service.GltTicketOrderService;
|
||||
import com.gxwebsoft.glt.service.GltUserTicketLogService;
|
||||
import com.gxwebsoft.glt.service.GltUserTicketService;
|
||||
@@ -107,6 +109,9 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
@Resource
|
||||
private ShopStoreRiderMapper shopStoreRiderMapper;
|
||||
|
||||
@Resource
|
||||
private GltSubscribeMessageService gltSubscribeMessageService;
|
||||
|
||||
// 轮询指针(高并发安全)
|
||||
private final AtomicInteger index = new AtomicInteger(0);
|
||||
|
||||
@@ -254,6 +259,29 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
throw new BusinessException("写入核销记录失败");
|
||||
}
|
||||
|
||||
//发送配送师傅派单配送消息
|
||||
if(gltTicketOrder.getRiderId() != null){
|
||||
User user = userMapper.getById(gltTicketOrder.getRiderId());
|
||||
if(user != null){
|
||||
NoticeRiderNewOrderDto noticeDto = new NoticeRiderNewOrderDto();
|
||||
noticeDto.setOrderNo(gltTicketOrder.getOrderNo());
|
||||
noticeDto.setGoodsName("商品信息见订单详情");
|
||||
noticeDto.setProductCount(gltTicketOrder.getTotalNum());
|
||||
noticeDto.setCreateTime(gltTicketOrder.getCreateTime());
|
||||
noticeDto.setTenantId(tenantId);
|
||||
noticeDto.setOpenId(user.getOpenid());
|
||||
|
||||
ShopOrder shopOrder = shopOrderService.getByOrderNo(gltTicketOrder.getOrderNo(), tenantId);
|
||||
if(shopOrder != null){
|
||||
Integer formId = shopOrder.getFormId();
|
||||
ShopGoods shopGoods = shopGoodsMapper.selectById(formId);
|
||||
if(shopGoods != null){
|
||||
noticeDto.setGoodsName(shopGoods.getName());
|
||||
}
|
||||
}
|
||||
gltSubscribeMessageService.sendRiderNewOrderNotice(noticeDto);
|
||||
}
|
||||
}
|
||||
return gltTicketOrder;
|
||||
}
|
||||
|
||||
@@ -748,6 +776,29 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
dispatchOrder.setUpdateTime(now);
|
||||
|
||||
baseMapper.insert(dispatchOrder);
|
||||
|
||||
//推送配送师傅接单提醒
|
||||
if(dispatchOrder.getRiderId() != null){
|
||||
User user = userMapper.getById(dispatchOrder.getRiderId());
|
||||
if(user != null){
|
||||
NoticeRiderNewOrderDto noticeDto = new NoticeRiderNewOrderDto();
|
||||
noticeDto.setOrderNo(dispatchOrder.getOrderNo());
|
||||
noticeDto.setGoodsName("商品信息见订单详情");
|
||||
noticeDto.setProductCount(dispatchOrder.getTotalNum());
|
||||
noticeDto.setCreateTime(dispatchOrder.getCreateTime());
|
||||
noticeDto.setTenantId(tenantId);
|
||||
noticeDto.setOpenId(user.getOpenid());
|
||||
|
||||
if(shopOrder != null){
|
||||
Integer formId = shopOrder.getFormId();
|
||||
ShopGoods shopGoods = shopGoodsMapper.selectById(formId);
|
||||
if(shopGoods != null){
|
||||
noticeDto.setGoodsName(shopGoods.getName());
|
||||
}
|
||||
}
|
||||
gltSubscribeMessageService.sendRiderNewOrderNotice(noticeDto);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
@@ -861,6 +912,7 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
}
|
||||
}
|
||||
|
||||
ShopOrder order = shopOrderService.getByOrderNo(userTicket.getOrderNo(), userTicket.getTenantId());
|
||||
//生成配送师傅可提现账户分佣金额数据【配送奖励(按商品设置)、配送提成(每桶0.1)】
|
||||
int qty = ticketOrder.getTotalNum() == null ? 0 : ticketOrder.getTotalNum();
|
||||
if (qty > 0) { //配送提成(每桶0.1)
|
||||
@@ -872,7 +924,11 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
reduceDto.setTypeEnum(ShopDealerTypeEnum.WITHDRAW_ACCOUNT);
|
||||
reduceDto.setUserId(ticketOrder.getRiderId());
|
||||
reduceDto.setOrderUserId(ticketOrder.getUserId());
|
||||
if(Arrays.asList(1, 3).contains(order.getOrderType())){
|
||||
reduceDto.setOrderNo(order.getOrderNo());
|
||||
}else {
|
||||
reduceDto.setOrderNo(ticketOrder.getNo());
|
||||
}
|
||||
reduceDto.setPrice(money);
|
||||
reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.DELIVERY_INCOME);
|
||||
shopDealerUserService.reduceBalance(reduceDto);
|
||||
@@ -882,7 +938,6 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
//配送奖励(按商品设置)
|
||||
Integer goodsId = userTicket.getGoodsId();
|
||||
ShopGoods shopGood = shopGoodsMapper.selectById(goodsId);
|
||||
ShopOrder order = shopOrderService.getByOrderNo(userTicket.getOrderNo(), userTicket.getTenantId());
|
||||
if(shopGood != null && order != null){
|
||||
Integer commissionType = shopGood.getCommissionType();
|
||||
BigDecimal money = BigDecimal.ZERO;
|
||||
@@ -896,13 +951,29 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
reduceDto.setTypeEnum(ShopDealerTypeEnum.WITHDRAW_ACCOUNT);
|
||||
reduceDto.setUserId(ticketOrder.getRiderId());
|
||||
reduceDto.setOrderUserId(ticketOrder.getUserId());
|
||||
if(Arrays.asList(1, 3).contains(order.getOrderType())){
|
||||
reduceDto.setOrderNo(order.getOrderNo());
|
||||
}else {
|
||||
reduceDto.setOrderNo(ticketOrder.getNo());
|
||||
}
|
||||
reduceDto.setPrice(money);
|
||||
reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.DELIVERY_REWARD);
|
||||
shopDealerUserService.reduceBalance(reduceDto);
|
||||
}
|
||||
}
|
||||
|
||||
//配送费结算
|
||||
if(Arrays.asList(1, 3).contains(order.getOrderType()) && order.getDeliveryFee().compareTo(BigDecimal.ZERO) > 0){
|
||||
ShopDealerUserReduceDto reduceDto = new ShopDealerUserReduceDto();
|
||||
reduceDto.setTypeEnum(ShopDealerTypeEnum.WITHDRAW_ACCOUNT);
|
||||
reduceDto.setUserId(ticketOrder.getRiderId());
|
||||
reduceDto.setOrderUserId(ticketOrder.getUserId());
|
||||
reduceDto.setOrderNo(order.getOrderNo());
|
||||
reduceDto.setPrice(order.getDeliveryFee());
|
||||
reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.DELIVERY_FLOOR_FEE);
|
||||
shopDealerUserService.reduceBalance(reduceDto);
|
||||
}
|
||||
|
||||
//查询未完成订单,完成资金解冻
|
||||
if(order != null && order.getOrderStatus() == 0){
|
||||
ShopDealerUserReduceDto reduceDto = new ShopDealerUserReduceDto();
|
||||
|
||||
@@ -35,7 +35,7 @@ public class GltTicketOrderAutoDispatch10584Task {
|
||||
@Value("${glt.ticket.dispatch10584.batchSize:50}")
|
||||
private int batchSize;
|
||||
|
||||
@Scheduled(cron = "${glt.ticket.dispatch10584.cron:0/20 * * * * ?}")
|
||||
// @Scheduled(cron = "${glt.ticket.dispatch10584.cron:0/20 * * * * ?}")
|
||||
@IgnoreTenant("定时任务无登录态,需忽略租户隔离;内部使用 tenantId=10584 精确过滤")
|
||||
public void run() {
|
||||
if (!running.compareAndSet(false, true)) {
|
||||
|
||||
@@ -6,9 +6,11 @@ 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.dto.ShopDealerCapitalWaterDto;
|
||||
import com.gxwebsoft.shop.entity.ShopDealerCapital;
|
||||
import com.gxwebsoft.shop.param.ShopDealerCapitalParam;
|
||||
import com.gxwebsoft.shop.service.ShopDealerCapitalService;
|
||||
import com.gxwebsoft.shop.vo.ShopDealerCapitalWaterVO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
@@ -39,6 +41,14 @@ public class ShopDealerCapitalController extends BaseController {
|
||||
return success(shopDealerCapitalService.pageRel(param));
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:shopDealerCapital:list')")
|
||||
@Operation(summary = "分页查询分销商个人流水")
|
||||
@GetMapping("/myCapitalWater")
|
||||
public ApiResult<PageResult<ShopDealerCapitalWaterVO>> myCapitalWater(ShopDealerCapitalWaterDto waterDto) {
|
||||
// 使用关联查询
|
||||
return success(shopDealerCapitalService.myCapitalWater(waterDto));
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('shop:shopDealerCapital:list')")
|
||||
@Operation(summary = "查询全部分销商资金明细表")
|
||||
@GetMapping()
|
||||
|
||||
@@ -51,6 +51,13 @@ public class ShopVerifyUserController extends BaseController {
|
||||
return success(shopVerifyUserService.getByIdRel(id));
|
||||
}
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:shopVerifyUser:list')")
|
||||
@Operation(summary = "根据用户ID查询订单核销人管理")
|
||||
@GetMapping("/getByUserId")
|
||||
public ApiResult<ShopVerifyUser> getByUserId(@RequestParam("userId") Integer userId) {
|
||||
return success(shopVerifyUserService.getInfo(userId));
|
||||
}
|
||||
|
||||
// @PreAuthorize("hasAuthority('shop:shopVerifyUser:save')")
|
||||
@OperationLog
|
||||
@Operation(summary = "添加订单核销人管理")
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.gxwebsoft.shop.dto;
|
||||
|
||||
import com.gxwebsoft.common.core.web.BaseParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* 查询个人流水
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
@Schema(name = "ShopDealerCapitalWaterDto", description = "查询个人流水")
|
||||
public class ShopDealerCapitalWaterDto extends BaseParam {
|
||||
|
||||
@Schema(description = "用户ID")
|
||||
@NotEmpty(message = "用户ID不能为空!")
|
||||
private Integer userId;
|
||||
|
||||
@Schema(description = "起始时间", example = "2026-05-01")
|
||||
private String dateStart;
|
||||
|
||||
@Schema(description = "结束时间", example = "2026-05-31")
|
||||
private String dateEnd;
|
||||
|
||||
}
|
||||
|
||||
@@ -51,6 +51,13 @@ public class ShopActiveImage implements Serializable {
|
||||
@Schema(description = "排序")
|
||||
private Integer sortNumber;
|
||||
|
||||
@Schema(description = "跳转商品ID")
|
||||
private Integer goodsId;
|
||||
|
||||
@Schema(description = "跳转商品名称")
|
||||
@TableField(exist = false)
|
||||
private String goodsName;
|
||||
|
||||
@Schema(description = "租户ID")
|
||||
@NotNull(message = "租户ID不能为空!")
|
||||
private Integer tenantId;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class ShopDealerCapital implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private Integer orderStatus;
|
||||
|
||||
@Schema(description = "资金流动类型 (10分销收入 11团队管理津贴收入 12分红收入 13现场推广收入 20提现支出 30转账支出 40转账收入 50佣金解冻 60配送奖励 70佣金退回【退单】)")
|
||||
@Schema(description = "资金流动类型 (10分销收入 11团队管理津贴收入 12分红收入 13现场推广收入 14现场推广分佣 20提现支出 30转账支出 40转账收入 50佣金解冻 60配送奖励 61配送提成 62配送步梯费 70佣金退回【退单】)")
|
||||
private Integer flowType;
|
||||
|
||||
@Schema(description = "变更金额")
|
||||
|
||||
@@ -194,6 +194,9 @@ public class ShopGoods implements Serializable {
|
||||
@Schema(description = "水票ID")
|
||||
private Integer waterTickerId;
|
||||
|
||||
@Schema(description = "0-按每桶楼层计算 1-固定金额")
|
||||
private Integer deliveryFeeType;
|
||||
|
||||
@Schema(description = "配送楼层步梯费(元)")
|
||||
private BigDecimal deliveryFee;
|
||||
|
||||
|
||||
@@ -34,10 +34,13 @@ public class ShopVerifyUser implements Serializable {
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "核销权限是否开启 0-未开启 1-已开启")
|
||||
private Boolean verifyFlag;
|
||||
private Integer verifyFlag;
|
||||
|
||||
@Schema(description = "是否开启 0-未开始 1-已开启")
|
||||
private Boolean status;
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "排序号")
|
||||
private Integer sortNumber;
|
||||
|
||||
@Schema(description = "创建人")
|
||||
private Integer creator;
|
||||
|
||||
@@ -2,8 +2,11 @@ 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.dto.ShopDealerCapitalWaterDto;
|
||||
import com.gxwebsoft.shop.entity.ShopDealerCapital;
|
||||
import com.gxwebsoft.shop.param.ShopDealerCapitalParam;
|
||||
import com.gxwebsoft.shop.vo.ShopDealerCapitalWaterVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
@@ -34,4 +37,12 @@ public interface ShopDealerCapitalMapper extends BaseMapper<ShopDealerCapital> {
|
||||
*/
|
||||
List<ShopDealerCapital> selectListRel(@Param("param") ShopDealerCapitalParam param);
|
||||
|
||||
/**
|
||||
* 查询个人资金流水
|
||||
* @param page
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
IPage<ShopDealerCapitalWaterVO> getPageInfo(@Param("page") Page page, @Param("entity") ShopDealerCapitalWaterDto entity);
|
||||
|
||||
}
|
||||
|
||||
@@ -55,5 +55,23 @@
|
||||
<select id="selectListRel" resultType="com.gxwebsoft.shop.entity.ShopDealerCapital">
|
||||
<include refid="selectSql"></include>
|
||||
</select>
|
||||
<select id="getPageInfo" resultType="com.gxwebsoft.shop.vo.ShopDealerCapitalWaterVO">
|
||||
SELECT
|
||||
no,
|
||||
order_no,
|
||||
flow_type,
|
||||
money,
|
||||
freeze_money,
|
||||
comments,
|
||||
create_time
|
||||
FROM
|
||||
shop_dealer_capital
|
||||
WHERE
|
||||
user_id = #{entity.userId}
|
||||
<if test="entity.dateStart != null and entity.dateEnd != null">
|
||||
AND DATE(create_time) BETWEEN #{entity.dateStart} AND #{entity.dateEnd}
|
||||
</if>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -169,8 +169,8 @@ public class ShopGoodsParam extends BaseParam {
|
||||
@Schema(description = "水票ID")
|
||||
private Integer waterTickerId;
|
||||
|
||||
@Schema(description = "商品大类 1-水 2-茶叶 3-酒 4-香水")
|
||||
private Integer categoryType;
|
||||
@Schema(description = "0-按每桶楼层计算 1-固定金额")
|
||||
private Integer deliveryFeeType;
|
||||
|
||||
@Schema(description = "租户id")
|
||||
private Integer tenantId;
|
||||
|
||||
@@ -352,7 +352,12 @@ public class OrderBusinessService {
|
||||
//自配送才计算步梯费用业务【选择步梯配送方式、配送楼层大于1楼、商品已设置配送费】
|
||||
if(Arrays.asList(1, 3).contains(shopOrder.getOrderType()) && shopOrder.getDeliveryMethod() == 1 && shopOrder.getDeliveryFloor() > 1
|
||||
&& shopGoods.getDeliveryFee().compareTo(BigDecimal.ZERO) > 0){
|
||||
BigDecimal deliveryFee = BigDecimal.valueOf(shopOrder.getDeliveryFloor() - 1).multiply(shopGoods.getDeliveryFee()).multiply(BigDecimal.valueOf(goodsItem.getQuantity()));
|
||||
BigDecimal deliveryFee = BigDecimal.ZERO;
|
||||
if(shopGoods.getDeliveryFeeType() == 0 ){
|
||||
deliveryFee = BigDecimal.valueOf(shopOrder.getDeliveryFloor() - 1).multiply(shopGoods.getDeliveryFee()).multiply(BigDecimal.valueOf(goodsItem.getQuantity()));
|
||||
}else if(shopOrder.getDeliveryFloor() > 1){
|
||||
deliveryFee = shopGoods.getDeliveryFee();
|
||||
}
|
||||
if(deliveryFee.compareTo(BigDecimal.ZERO) > 0){
|
||||
shopOrder.setDeliveryFee(deliveryFee);
|
||||
shopOrder.setTotalPrice(shopOrder.getTotalPrice().add(deliveryFee));
|
||||
|
||||
@@ -2,8 +2,10 @@ package com.gxwebsoft.shop.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.dto.ShopDealerCapitalWaterDto;
|
||||
import com.gxwebsoft.shop.entity.ShopDealerCapital;
|
||||
import com.gxwebsoft.shop.param.ShopDealerCapitalParam;
|
||||
import com.gxwebsoft.shop.vo.ShopDealerCapitalWaterVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -23,6 +25,13 @@ public interface ShopDealerCapitalService extends IService<ShopDealerCapital> {
|
||||
*/
|
||||
PageResult<ShopDealerCapital> pageRel(ShopDealerCapitalParam param);
|
||||
|
||||
/**
|
||||
* 分页查询分销商个人流水
|
||||
* @param waterDto
|
||||
* @return
|
||||
*/
|
||||
PageResult<ShopDealerCapitalWaterVO> myCapitalWater(ShopDealerCapitalWaterDto waterDto);
|
||||
|
||||
/**
|
||||
* 关联查询全部
|
||||
*
|
||||
|
||||
@@ -39,6 +39,13 @@ public interface ShopVerifyUserService extends IService<ShopVerifyUser> {
|
||||
*/
|
||||
ShopVerifyUser getByIdRel(Integer id);
|
||||
|
||||
/**
|
||||
* 通过用户ID查询
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
ShopVerifyUser getInfo(Integer userId);
|
||||
|
||||
/**
|
||||
* 修改订单核销人开启状态
|
||||
* @param id 主键ID
|
||||
|
||||
@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.entity.ShopActiveImage;
|
||||
import com.gxwebsoft.shop.entity.ShopGoods;
|
||||
import com.gxwebsoft.shop.mapper.ShopActiveImageMapper;
|
||||
import com.gxwebsoft.shop.mapper.ShopGoodsMapper;
|
||||
import com.gxwebsoft.shop.param.ShopActiveImageParam;
|
||||
import com.gxwebsoft.shop.service.ShopActiveImageService;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -14,6 +16,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 推广码底图Service实现
|
||||
@@ -25,16 +28,30 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
public class ShopActiveImageServiceImpl extends ServiceImpl<ShopActiveImageMapper, ShopActiveImage> implements ShopActiveImageService {
|
||||
|
||||
private ShopGoodsMapper shopGoodsMapper;
|
||||
|
||||
@Override
|
||||
public PageResult<ShopActiveImage> pageRel(ShopActiveImageParam param) {
|
||||
PageParam<ShopActiveImage, ShopActiveImageParam> page = new PageParam<>(param);
|
||||
page.setDefaultOrder("sort_number asc, create_time desc");
|
||||
List<ShopActiveImage> list = baseMapper.selectPageRel(page, param);
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
List<Integer> goodsIdList = list.stream().filter(shopActiveImage -> shopActiveImage.getGoodsId() != null).map(ShopActiveImage::getGoodsId)
|
||||
.distinct().collect(Collectors.toList());
|
||||
List<ShopGoods> shopGoodsList = shopGoodsMapper.selectBatchIds(goodsIdList);
|
||||
|
||||
list.forEach(shopActiveImage -> {
|
||||
if(!StringUtils.isEmpty(shopActiveImage.getImgUrl())){
|
||||
shopActiveImage.setImgUrlList(Arrays.asList(shopActiveImage.getImgUrl().split(",")));
|
||||
}
|
||||
|
||||
//回显商品名称
|
||||
if(shopActiveImage.getGoodsId() != null){
|
||||
ShopGoods shopGoods = shopGoodsList.stream().filter(goods -> shopActiveImage.getGoodsId().equals(goods.getGoodsId())).findFirst().orElse(null);
|
||||
if(shopGoods != null){
|
||||
shopActiveImage.setGoodsName(shopGoods.getName());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return new PageResult<>(list, page.getTotal());
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
package com.gxwebsoft.shop.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.core.exception.enums.GlobalErrorCodeConstants;
|
||||
import com.gxwebsoft.common.core.utils.LoginUserUtil;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.shop.dto.ShopDealerCapitalWaterDto;
|
||||
import com.gxwebsoft.shop.mapper.ShopDealerCapitalMapper;
|
||||
import com.gxwebsoft.shop.service.ShopDealerCapitalService;
|
||||
import com.gxwebsoft.shop.entity.ShopDealerCapital;
|
||||
import com.gxwebsoft.shop.param.ShopDealerCapitalParam;
|
||||
import com.gxwebsoft.common.core.web.PageParam;
|
||||
import com.gxwebsoft.common.core.web.PageResult;
|
||||
import com.gxwebsoft.shop.vo.ShopDealerCapitalWaterVO;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -28,6 +38,27 @@ public class ShopDealerCapitalServiceImpl extends ServiceImpl<ShopDealerCapitalM
|
||||
return new PageResult<>(list, page.getTotal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ShopDealerCapitalWaterVO> myCapitalWater(ShopDealerCapitalWaterDto entity) {
|
||||
PageResult<ShopDealerCapitalWaterVO> pageResult = new PageResult<>();
|
||||
User loginUser = LoginUserUtil.getLoginUser();
|
||||
if(loginUser == null){
|
||||
throw new BusinessException(GlobalErrorCodeConstants.UNAUTHORIZED.getMsg());
|
||||
}
|
||||
entity.setUserId(loginUser.getUserId());
|
||||
|
||||
IPage<ShopDealerCapitalWaterVO> pageInfo = baseMapper.getPageInfo(new Page<>(entity.getPage(), entity.getLimit()), entity);
|
||||
if(CollectionUtils.isNotEmpty(pageInfo.getRecords())){
|
||||
List<ShopDealerCapitalWaterVO> records = pageInfo.getRecords();
|
||||
pageResult.setList(records);
|
||||
pageResult.setCount(pageInfo.getTotal());
|
||||
}else {
|
||||
pageResult.setCount(0l);
|
||||
pageResult.setList(new ArrayList<>());
|
||||
}
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ShopDealerCapital> listRel(ShopDealerCapitalParam param) {
|
||||
List<ShopDealerCapital> list = baseMapper.selectListRel(param);
|
||||
|
||||
@@ -120,6 +120,7 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
|
||||
case PROMOTION_PARENT_INCOME:
|
||||
case TRANSFER_INCOME:
|
||||
case DELIVERY_REWARD:
|
||||
case DELIVERY_FLOOR_FEE:
|
||||
case DELIVERY_INCOME:{
|
||||
break;
|
||||
}
|
||||
@@ -281,8 +282,8 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
|
||||
.in(ShopDealerCapital::getFlowType, Arrays.asList(ShopDealerCapitalUpdateEnum.DISTRIBUTION_INCOME.getType(),
|
||||
ShopDealerCapitalUpdateEnum.MANAGEMENT_INCOME.getType(), ShopDealerCapitalUpdateEnum.DIVIDEND_INCOME.getType(),
|
||||
ShopDealerCapitalUpdateEnum.PROMOTION_INCOME.getType(), ShopDealerCapitalUpdateEnum.PROMOTION_PARENT_INCOME.getType(),
|
||||
ShopDealerCapitalUpdateEnum.FREEZE_MONEY_THAW.getType(),
|
||||
ShopDealerCapitalUpdateEnum.DELIVERY_INCOME.getType(), ShopDealerCapitalUpdateEnum.DELIVERY_REWARD.getType()))
|
||||
ShopDealerCapitalUpdateEnum.FREEZE_MONEY_THAW.getType(), ShopDealerCapitalUpdateEnum.DELIVERY_INCOME.getType(),
|
||||
ShopDealerCapitalUpdateEnum.DELIVERY_REWARD.getType()), ShopDealerCapitalUpdateEnum.DELIVERY_FLOOR_FEE.getType())
|
||||
.isNotNull(ShopDealerCapital::getUserId)
|
||||
);
|
||||
|
||||
|
||||
@@ -44,7 +44,6 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl<ShopOrderGoodsMapper,
|
||||
@Override
|
||||
public List<ShopOrderGoods> listRel(ShopOrderGoodsParam param) {
|
||||
List<ShopOrderGoods> list = baseMapper.selectListRel(param);
|
||||
|
||||
//根据订单ID查询活动并回显对应名称、订单核销码
|
||||
Integer orderId = param.getOrderId();
|
||||
if(orderId != null){
|
||||
@@ -55,6 +54,7 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl<ShopOrderGoodsMapper,
|
||||
saleActivity = shopFlashSaleActivityMapper.selectById(order.getActivityId());
|
||||
}
|
||||
for(ShopOrderGoods orderGoods : list){
|
||||
orderGoods.setOrderStatus(order.getOrderStatus());
|
||||
orderGoods.setVerifyCode(order.getVerifyCode());
|
||||
if(saleActivity != null){
|
||||
if(orderGoods.getGoodsId().equals(saleActivity.getGoodsId())){
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.gxwebsoft.common.core.config.SpringContextUtil;
|
||||
import com.gxwebsoft.common.core.context.TenantContext;
|
||||
import com.gxwebsoft.common.core.enums.ShopDealerCapitalUpdateEnum;
|
||||
import com.gxwebsoft.common.core.enums.ShopDealerTypeEnum;
|
||||
import com.gxwebsoft.common.core.exception.BusinessException;
|
||||
import com.gxwebsoft.common.core.exception.enums.GlobalErrorCodeConstants;
|
||||
import com.gxwebsoft.common.core.service.EnvironmentAwarePaymentService;
|
||||
import com.gxwebsoft.common.core.service.PaymentCacheService;
|
||||
@@ -488,37 +489,37 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
|
||||
//1.判断用户是否登录
|
||||
User loginUser = LoginUserUtil.getLoginUser();
|
||||
if(loginUser == null){
|
||||
throw new RuntimeException(GlobalErrorCodeConstants.UNAUTHORIZED.getMsg());
|
||||
throw new BusinessException(GlobalErrorCodeConstants.UNAUTHORIZED.getMsg());
|
||||
}
|
||||
|
||||
//2.判断是否有核销权限
|
||||
Integer verifyType = verifyDto.getVerifyType();
|
||||
if(verifyType == 2){
|
||||
ShopVerifyUser verifyUser = shopVerifyUserMapper.selectOne(new LambdaQueryWrapper<ShopVerifyUser>().eq(ShopVerifyUser::getUserId, loginUser.getUserId()));
|
||||
if(!(verifyUser != null && verifyUser.getVerifyFlag() && verifyUser.getStatus())){
|
||||
throw new RuntimeException("暂无核销权限!");
|
||||
if(!(verifyUser != null && verifyUser.getVerifyFlag() == 1 && verifyUser.getStatus() == 1)){
|
||||
throw new BusinessException("暂无核销权限!");
|
||||
}
|
||||
}
|
||||
|
||||
//3.查询订单信息
|
||||
ShopOrder shopOrder = baseMapper.selectOne(new LambdaQueryWrapper<ShopOrder>().eq(ShopOrder::getVerifyCode, verifyDto.getVerifyCode()));
|
||||
if(shopOrder == null){
|
||||
throw new RuntimeException(GlobalErrorCodeConstants.NOT_FOUND.getMsg());
|
||||
throw new BusinessException(GlobalErrorCodeConstants.NOT_FOUND.getMsg());
|
||||
}
|
||||
|
||||
//4.判断当前订单状态是否允许核销
|
||||
if(Arrays.asList(2,3,4,6,7).contains(shopOrder.getOrderStatus())){
|
||||
throw new RuntimeException("订单当前状态不可核销!");
|
||||
throw new BusinessException("订单当前状态不可核销!");
|
||||
}
|
||||
|
||||
//5.判断订单是否已支付
|
||||
if(!shopOrder.getPayStatus()){
|
||||
throw new RuntimeException("订单未支付,不可核销!");
|
||||
throw new BusinessException("订单未支付,不可核销!");
|
||||
}
|
||||
|
||||
//6.判断是否已核销
|
||||
if(shopOrder.getVerifyStatus() != null && shopOrder.getVerifyStatus() == 1){
|
||||
throw new RuntimeException("此订单已核销,无需重复核销!");
|
||||
throw new BusinessException("此订单已核销,无需重复核销!");
|
||||
}
|
||||
|
||||
shopOrder.setVerifyStatus(1);
|
||||
@@ -624,7 +625,7 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
|
||||
}
|
||||
return baseMapper.updateById(shopOrder) > 0;
|
||||
}catch (Exception e){
|
||||
throw new RuntimeException("核销失败:" + e.getMessage());
|
||||
throw new BusinessException("核销失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ public class ShopVerifyUserServiceImpl extends ServiceImpl<ShopVerifyUserMapper,
|
||||
@Override
|
||||
public PageResult<ShopVerifyUser> pageRel(ShopVerifyUserParam param) {
|
||||
PageParam<ShopVerifyUser, ShopVerifyUserParam> page = new PageParam<>(param);
|
||||
page.setDefaultOrder("create_time desc");
|
||||
page.setDefaultOrder("sort_number asc, create_time desc");
|
||||
List<ShopVerifyUser> list = baseMapper.selectPageRel(page, param);
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
List<Integer> userIdList = list.stream().map(ShopVerifyUser::getUserId).distinct().collect(Collectors.toList());
|
||||
@@ -90,15 +90,24 @@ public class ShopVerifyUserServiceImpl extends ServiceImpl<ShopVerifyUserMapper,
|
||||
return verifyUser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShopVerifyUser getInfo(Integer userId) {
|
||||
List<ShopVerifyUser> list = lambdaQuery().eq(ShopVerifyUser::getUserId, userId).list();
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
return list.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateStatus(Integer id) {
|
||||
ShopVerifyUser verifyUser = baseMapper.selectById(id);
|
||||
if(verifyUser != null){
|
||||
Boolean status = verifyUser.getStatus();
|
||||
if(status){
|
||||
verifyUser.setStatus(false);
|
||||
Integer status = verifyUser.getStatus();
|
||||
if(status == 0){
|
||||
verifyUser.setStatus(1);
|
||||
}else {
|
||||
verifyUser.setStatus(true);
|
||||
verifyUser.setStatus(0);
|
||||
}
|
||||
verifyUser.setUpdateTime(LocalDateTime.now());
|
||||
User loginUser = LoginUserUtil.getLoginUser();
|
||||
@@ -114,11 +123,11 @@ public class ShopVerifyUserServiceImpl extends ServiceImpl<ShopVerifyUserMapper,
|
||||
public Boolean updateVerifyFlag(Integer id) {
|
||||
ShopVerifyUser verifyUser = baseMapper.selectById(id);
|
||||
if(verifyUser != null){
|
||||
Boolean verifyFlag = verifyUser.getVerifyFlag();
|
||||
if(verifyFlag){
|
||||
verifyUser.setVerifyFlag(false);
|
||||
Integer verifyFlag = verifyUser.getVerifyFlag();
|
||||
if(verifyFlag == 0){
|
||||
verifyUser.setVerifyFlag(1);
|
||||
}else {
|
||||
verifyUser.setVerifyFlag(true);
|
||||
verifyUser.setVerifyFlag(0);
|
||||
}
|
||||
verifyUser.setUpdateTime(LocalDateTime.now());
|
||||
User loginUser = LoginUserUtil.getLoginUser();
|
||||
|
||||
@@ -28,7 +28,7 @@ public class CouponExpireTask {
|
||||
* 生产环境:每天凌晨2点执行
|
||||
* 开发环境:每10分钟执行一次(用于测试)
|
||||
*/
|
||||
@Scheduled(cron = "${coupon.expire.cron:0 0 2 * * ?}")
|
||||
// @Scheduled(cron = "${coupon.expire.cron:0 0 2 * * ?}")
|
||||
public void processExpiredCoupons() {
|
||||
log.info("开始执行过期优惠券处理任务...");
|
||||
|
||||
@@ -57,7 +57,7 @@ public class CouponExpireTask {
|
||||
* 每小时执行一次优惠券状态检查(可选)
|
||||
* 用于及时发现和处理刚过期的优惠券
|
||||
*/
|
||||
@Scheduled(cron = "0 0 * * * ?")
|
||||
// @Scheduled(cron = "0 0 * * * ?")
|
||||
public void hourlyExpiredCouponsCheck() {
|
||||
// 只在生产环境执行
|
||||
if (!"prod".equals(activeProfile)) {
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.gxwebsoft.shop.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 查询个人流水
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
@Schema(name = "ShopDealerCapitalWaterVO", description = "查询个人流水")
|
||||
public class ShopDealerCapitalWaterVO {
|
||||
|
||||
@Schema(description = "订单编号")
|
||||
private String no;
|
||||
|
||||
@Schema(description = "关联订单编号")
|
||||
private String orderNo;
|
||||
|
||||
@Schema(description = "资金流动类型 (10分销收入 11团队管理津贴收入 12分红收入 13现场推广收入 14现场推广分佣 20提现支出 30转账支出 40转账收入 50佣金解冻 60配送奖励 61配送提成 62配送步梯费 70佣金退回【退单】)")
|
||||
private Integer flowType;
|
||||
|
||||
@Schema(description = "变更金额")
|
||||
private BigDecimal money;
|
||||
|
||||
@Schema(description = "变更后金额")
|
||||
private BigDecimal moneyAfter;
|
||||
|
||||
@Schema(description = "变更冻结金额")
|
||||
private BigDecimal freezeMoney;
|
||||
|
||||
@Schema(description = "变更冻结后金额")
|
||||
private BigDecimal freezeMoneyAfter;
|
||||
|
||||
@Schema(description = "描述")
|
||||
private String comments;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ spring:
|
||||
# redis
|
||||
redis:
|
||||
database: 0
|
||||
host: 8.134.55.105
|
||||
port: 16379
|
||||
host: 1Panel-redis-GmNr
|
||||
port: 6379
|
||||
password: redis_t74P8C
|
||||
|
||||
# 日志配置
|
||||
|
||||
@@ -15,9 +15,8 @@ spring:
|
||||
|
||||
redis:
|
||||
database: 0
|
||||
host: 8.134.55.105
|
||||
port: 16379
|
||||
password: redis_t74P8C
|
||||
host: localhost
|
||||
port: 6379
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
|
||||
Reference in New Issue
Block a user