Merge remote-tracking branch 'origin/master'

This commit is contained in:
wangw 2025-03-11 18:00:55 +08:00
commit 2f872e6a05
16 changed files with 156 additions and 30 deletions

View File

@ -36,7 +36,7 @@ dubbo:
threads: 20
name: dubbo
serialization: hessian2
port: -1
port: 10101
seata:

View File

@ -35,7 +35,7 @@ dubbo:
group: server-test
protocol:
threads: 20
port: -1
port: 10102
name: dubbo
serialization: hessian2

View File

@ -10,6 +10,9 @@ import com.czg.order.vo.DataSummaryPayTypeVo;
import com.czg.order.vo.DataSummaryProductSaleVo;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.ValidatorUtil;
import com.czg.validator.group.DefaultGroup;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -36,6 +39,7 @@ public class DataSummaryController {
@OperationLog("营业板块-上半部分")
//@SaAdminCheckPermission("dataSummary:trade")
public CzgResult<ShopOrderStatistic> getTradeData(DataSummaryTradeParam param) {
ValidatorUtil.validateEntity(param, DefaultGroup.class);
Long shopId = StpKit.USER.getShopId(0L);
param.setShopId(shopId);
ShopOrderStatistic data = dataSummaryService.getTradeData(param);
@ -64,8 +68,10 @@ public class DataSummaryController {
@OperationLog("销售趋势柱状图 左下")
//@SaAdminCheckPermission("dataSummary:dateAmount")
public CzgResult<DataSummaryDateAmountVo> getDateAmount(@RequestParam Integer day) {
AssertUtil.isNull(day, "天数不能为空");
Long shopId = StpKit.USER.getShopId(0L);
DataSummaryDateAmountVo data = dataSummaryService.getSummaryAmountData(shopId, day);
return CzgResult.success(data);
}

View File

@ -29,13 +29,13 @@ spring:
dubbo:
application:
name: order-server
# qos-port: 22231
qos-enable: false
qos-port: 22231
qos-enable: true
registry:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-dev
protocol:
port: -1
port: 10201
threads: 20
name: dubbo
serialization: hessian2

View File

@ -30,15 +30,15 @@ spring:
dubbo:
application:
name: order-server
# qos-port: 22232
qos-enable: false
qos-port: 22232
qos-enable: true
logger: log4j2
environment: test
registry:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-test
protocol:
port: -1
port: 10202
threads: 20
name: dubbo
serialization: hessian2

View File

@ -40,7 +40,7 @@ dubbo:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-dev
protocol:
port: -1
port: 10301
threads: 20
name: dubbo
serialization: hessian2

View File

@ -34,7 +34,7 @@ dubbo:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-test
protocol:
port: -1
port: 10302
threads: 20
name: dubbo
serialization: hessian2

View File

@ -35,7 +35,7 @@ dubbo:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-dev
protocol:
port: -1
port: 10401
threads: 20
name: dubbo
serialization: hessian2

View File

@ -35,7 +35,7 @@ dubbo:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-test
protocol:
port: -1
port: 10402
threads: 20
name: dubbo
serialization: hessian2

View File

@ -141,11 +141,11 @@ public class ShopOrderStatistic implements Serializable {
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd")
private LocalDate createDay = LocalDate.now();
private LocalDate createDay;
/**
* 最近一次统计时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime = LocalDateTime.now();
private LocalDateTime updateTime;
}

View File

@ -1,29 +1,67 @@
package com.czg.order.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
import java.util.List;
/**
* @author ww
*/
@Getter
@RequiredArgsConstructor
public enum PayEnums {
/**
* 主扫
*/
MAIN_SCAN("main_scan", "主扫"),
/**
* 被扫
*/
BACK_SCAN("back_scan", "被扫"),
/**
* 微信小程序
*/
WECHAT_MINI("wechat_mini", "微信小程序"),
/**
* 支付宝小程序
*/
ALIPAY_MINI("alipay_mini", "支付宝小程序"),
/**
* 会员支付
*/
VIP_PAY("vip_pay", "会员支付"),
/**
* 现金支付
*/
CASH_PAY("cash_pay", "现金支付"),
/**
* 挂账支付
*/
CREDIT_PAY("credit_pay", "挂账支付"),
H5_PAY("h5_pay", "h5支付");
/**
* h5支付
*/
H5_PAY("h5_pay", "H5支付");
private final String value;
private final String msg;
PayEnums(String value, String msg) {
this.value = value;
this.msg = msg;
public static List<String> getValues() {
return Arrays.stream(values()).map(PayEnums::getValue).toList();
}
public static String getText(String value) {
PayEnums item = Arrays.stream(values()).filter(obj -> value.equals(obj.getValue())).findFirst().orElse(null);
if (item != null) {
return item.getMsg();
}
return "未知支付方式";
}
}

View File

@ -1,6 +1,8 @@
package com.czg.order.param;
import com.alibaba.fastjson2.annotation.JSONField;
import com.czg.validator.group.DefaultGroup;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
@ -21,10 +23,12 @@ public class DataSummaryTradeParam implements Serializable {
/**
* 开始时间 格式yyyy-MM-dd
*/
@NotBlank(message = "开始日期不能为空", groups = DefaultGroup.class)
private String beginTime;
/**
* 结束时间 格式yyyy-MM-dd
*/
@NotBlank(message = "结束日期不能为空", groups = DefaultGroup.class)
private String endTime;
/**
* 店铺id

View File

@ -5,6 +5,7 @@ import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@ -34,15 +35,15 @@ public class DataSummaryDateAmountVo implements Serializable {
/**
* 实收金额
*/
private Integer actualAmount;
private BigDecimal actualAmount = BigDecimal.ZERO;
/**
* 优惠金额
*/
private Integer discountAmount;
private BigDecimal discountAmount = BigDecimal.ZERO;
/**
* 订单金额
*/
private Integer orderAmount;
private BigDecimal orderAmount = BigDecimal.ZERO;
/**
* 日期
*/

View File

@ -252,17 +252,19 @@ public class ShopUserServiceImpl extends ServiceImpl<ShopUserMapper, ShopUser> i
userInfoService.updateById(userInfo);
ShopUser shopUser = getOne(new QueryWrapper().eq(ShopUser::getShopId, shopId).eq(ShopUser::getUserId, userId));
if (shopUser != null) {
if (shopUser == null) {
shopUser = new ShopUser();
shopUser.setShopId(shopId);
shopUser.setUserId(userId);
} else if (shopUser.getIsVip() == 1) {
throw new ApiNotPrintException("您已加入店铺会员");
}
shopUser = BeanUtil.copyProperties(shopUserAddDTO, ShopUser.class);
shopUser.setIsVip(1);
shopUser.setCode(generateCode(shopId));
shopUser.setJoinTime(DateUtil.date().toLocalDateTime());
shopUser.setShopId(shopId);
shopUser.setUserId(userId);
return save(shopUser);
return saveOrUpdate(shopUser);
}
@Override

View File

@ -1,16 +1,26 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import com.czg.order.entity.OrderInfo;
import com.czg.order.entity.ShopOrderStatistic;
import com.czg.order.enums.PayEnums;
import com.czg.order.param.DataSummaryProductSaleParam;
import com.czg.order.param.DataSummaryTradeParam;
import com.czg.order.service.DataSummaryService;
import com.czg.order.vo.DataSummaryDateAmountVo;
import com.czg.order.vo.DataSummaryPayTypeVo;
import com.czg.order.vo.DataSummaryProductSaleVo;
import com.czg.service.order.mapper.OrderInfoMapper;
import com.czg.service.order.mapper.ShopOrderStatisticMapper;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* 数据统计Service实现类
*
@ -22,6 +32,8 @@ public class DataSummaryServiceImpl implements DataSummaryService {
@Resource
private ShopOrderStatisticMapper shopOrderStatisticMapper;
@Resource
private OrderInfoMapper orderInfoMapper;
@Override
public ShopOrderStatistic getTradeData(DataSummaryTradeParam param) {
@ -41,11 +53,73 @@ public class DataSummaryServiceImpl implements DataSummaryService {
@Override
public DataSummaryDateAmountVo getSummaryAmountData(Long shopId, Integer day) {
return new DataSummaryDateAmountVo();
LocalDate now = LocalDate.now();
LocalDate beginDate = now.plusDays(-day);
DataSummaryDateAmountVo data = new DataSummaryDateAmountVo();
List<DataSummaryDateAmountVo.TotalVo> total = new ArrayList<>();
for (int i = 1; i <= day; i++) {
String thisDay = beginDate.plusDays(i).format(DatePattern.NORM_DATE_FORMATTER);
OrderInfo orderInfo = orderInfoMapper.selectOneByQuery(QueryWrapper.create()
.select("ifnull(sum(order_amount),0) as order_amount,ifnull(sum(pay_amount),0) as pay_amount,ifnull(sum(order_amount-pay_amount),0) as discount_amount")
.eq(OrderInfo::getShopId, shopId)
.eq(OrderInfo::getTradeDay, thisDay)
.isNotNull(OrderInfo::getPaidTime)
);
DataSummaryDateAmountVo.TotalVo totalVo = new DataSummaryDateAmountVo.TotalVo();
if (orderInfo != null) {
totalVo.setOrderAmount(orderInfo.getOrderAmount());
totalVo.setActualAmount(orderInfo.getPayAmount());
totalVo.setDiscountAmount(orderInfo.getDiscountAmount());
}
totalVo.setTradeDay(thisDay);
total.add(totalVo);
}
data.setTotal(total);
return data;
}
@Override
public DataSummaryPayTypeVo getSummaryPayTypeData(Long shopId, Integer day) {
return new DataSummaryPayTypeVo();
LocalDate now = LocalDate.now();
LocalDate beginDate = now.plusDays(-day);
DataSummaryPayTypeVo data = new DataSummaryPayTypeVo();
List<DataSummaryPayTypeVo.CountPayTypeVo> total = new ArrayList<>();
List<String> days = new ArrayList<>();
for (int i = 1; i <= day; i++) {
String thisDay = beginDate.plusDays(i).format(DatePattern.NORM_DATE_FORMATTER);
days.add(thisDay);
}
List<OrderInfo> orderList = orderInfoMapper.selectListByQuery(QueryWrapper.create()
.select("pay_type,count(1) as place_num")
.eq(OrderInfo::getShopId, shopId)
.in(OrderInfo::getTradeDay, days)
.isNotNull(OrderInfo::getPaidTime)
.groupBy(OrderInfo::getPayType)
);
PayEnums[] pays = PayEnums.values();
if (CollUtil.isEmpty(orderList)) {
for (PayEnums pay : pays) {
DataSummaryPayTypeVo.CountPayTypeVo payTypeVo = new DataSummaryPayTypeVo.CountPayTypeVo();
payTypeVo.setPayType(pay.getMsg());
payTypeVo.setCount(0);
total.add(payTypeVo);
}
data.setCountPayType(total);
return data;
}
for (PayEnums pay : pays) {
OrderInfo orderInfo = orderList.stream().filter(order -> pay.getValue().equals(order.getPayType())).findFirst().orElse(null);
DataSummaryPayTypeVo.CountPayTypeVo payTypeVo = new DataSummaryPayTypeVo.CountPayTypeVo();
payTypeVo.setPayType(pay.getMsg());
payTypeVo.setCount(0);
if (orderInfo != null) {
payTypeVo.setPayType(PayEnums.getText(orderInfo.getPayType()));
payTypeVo.setCount(orderInfo.getPlaceNum());
}
total.add(payTypeVo);
}
data.setCountPayType(total);
return data;
}
}

View File

@ -26,7 +26,8 @@
sum(cash_pay_amount) as cash_pay_amount,
sum(recharge_amount) as recharge_amount,
avg(customer_unit_price) as customer_unit_price,
avg(table_turnover_rate) as table_turnover_rate
avg(table_turnover_rate) as table_turnover_rate,
max(update_time) as update_time
from tb_shop_order_statistic
where shop_id = #{shopId}
<if test="beginTime != null">