diff --git a/cash-api/account-server/src/main/resources/application-dev.yml b/cash-api/account-server/src/main/resources/application-dev.yml index 19ace13b..8cb6b0e6 100644 --- a/cash-api/account-server/src/main/resources/application-dev.yml +++ b/cash-api/account-server/src/main/resources/application-dev.yml @@ -36,7 +36,7 @@ dubbo: threads: 20 name: dubbo serialization: hessian2 - port: -1 + port: 10101 seata: diff --git a/cash-api/account-server/src/main/resources/application-test.yml b/cash-api/account-server/src/main/resources/application-test.yml index a681e5a7..6bf0b710 100644 --- a/cash-api/account-server/src/main/resources/application-test.yml +++ b/cash-api/account-server/src/main/resources/application-test.yml @@ -35,7 +35,7 @@ dubbo: group: server-test protocol: threads: 20 - port: -1 + port: 10102 name: dubbo serialization: hessian2 diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java index 5704c29a..b1fdc72b 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java @@ -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 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 getDateAmount(@RequestParam Integer day) { + AssertUtil.isNull(day, "天数不能为空"); Long shopId = StpKit.USER.getShopId(0L); DataSummaryDateAmountVo data = dataSummaryService.getSummaryAmountData(shopId, day); + return CzgResult.success(data); } diff --git a/cash-api/order-server/src/main/resources/application-dev.yml b/cash-api/order-server/src/main/resources/application-dev.yml index 1d8c3a9e..0ff01bc2 100644 --- a/cash-api/order-server/src/main/resources/application-dev.yml +++ b/cash-api/order-server/src/main/resources/application-dev.yml @@ -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 diff --git a/cash-api/order-server/src/main/resources/application-test.yml b/cash-api/order-server/src/main/resources/application-test.yml index 41d76f4b..c7a75a52 100644 --- a/cash-api/order-server/src/main/resources/application-test.yml +++ b/cash-api/order-server/src/main/resources/application-test.yml @@ -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 diff --git a/cash-api/product-server/src/main/resources/application-dev.yml b/cash-api/product-server/src/main/resources/application-dev.yml index 0db8973f..33ba14f7 100644 --- a/cash-api/product-server/src/main/resources/application-dev.yml +++ b/cash-api/product-server/src/main/resources/application-dev.yml @@ -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 diff --git a/cash-api/product-server/src/main/resources/application-test.yml b/cash-api/product-server/src/main/resources/application-test.yml index 9c2a0187..30da0d6a 100644 --- a/cash-api/product-server/src/main/resources/application-test.yml +++ b/cash-api/product-server/src/main/resources/application-test.yml @@ -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 diff --git a/cash-api/system-server/src/main/resources/application-dev.yml b/cash-api/system-server/src/main/resources/application-dev.yml index c728704f..def4d82c 100644 --- a/cash-api/system-server/src/main/resources/application-dev.yml +++ b/cash-api/system-server/src/main/resources/application-dev.yml @@ -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 diff --git a/cash-api/system-server/src/main/resources/application-test.yml b/cash-api/system-server/src/main/resources/application-test.yml index 0a73c5b5..ef0ddeec 100644 --- a/cash-api/system-server/src/main/resources/application-test.yml +++ b/cash-api/system-server/src/main/resources/application-test.yml @@ -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 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java index 80900f65..cd5bdc13 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java @@ -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; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java b/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java index 73a85068..fe435072 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java @@ -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 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 "未知支付方式"; + } + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java b/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java index 97eb9dea..83c025dc 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java @@ -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 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java b/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java index 35ed28af..bf280ca4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java @@ -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; /** * 日期 */ diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java index ed3bdf1f..49133693 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java @@ -252,17 +252,19 @@ public class ShopUserServiceImpl extends ServiceImpl 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 diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java index 1af0be05..3aab06b3 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java @@ -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 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 total = new ArrayList<>(); + List days = new ArrayList<>(); + for (int i = 1; i <= day; i++) { + String thisDay = beginDate.plusDays(i).format(DatePattern.NORM_DATE_FORMATTER); + days.add(thisDay); + } + List 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; } } diff --git a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml index 1834ac6a..cdbef80c 100644 --- a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml @@ -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}