From 8cbfbe265fe4524069c9957bbbc7cbf630d0c1fd Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Thu, 27 Feb 2025 19:01:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E7=8F=AD=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/HandoverRecordController.java | 37 +++++++ .../src/main/resources/application.yml | 8 ++ .../src/main/resources/application.yml | 14 +++ .../czg/account/dto/HandoverRecordDTO.java | 100 +++++++++++++++++ .../czg/account/entity/HandoverRecord.java | 104 ++++++++++++++++++ .../czg/account/entity/PictureClassify.java | 3 +- .../enums/HandoverAccountTypeEnum.java | 43 ++++++++ .../service/HandoverRecordService.java | 26 +++++ .../czg/account/vo/HandoverProductListVo.java | 44 ++++++++ .../com/czg/account/vo/HandoverTotalVo.java | 77 +++++++++++++ .../czg/order/service/OrderInfoService.java | 52 +++++++++ .../java/com/czg/enums/PlatformTypeEnum.java | 54 +++++++++ .../account/mapper/HandoverRecordMapper.java | 16 +++ .../impl/AuthorizationServiceImpl.java | 42 ++++++- .../impl/HandoverRecordServiceImpl.java | 103 +++++++++++++++++ .../impl/PictureClassifyServiceImpl.java | 8 +- .../impl/PictureGalleryServiceImpl.java | 6 +- .../resources/mapper/HandoverRecordMapper.xml | 6 + .../service/order/mapper/OrderInfoMapper.java | 56 +++++++++- .../service/impl/OrderInfoServiceImpl.java | 26 +++++ .../main/resources/mapper/OrderInfoMapper.xml | 78 +++++++++++++ .../service/impl/ShopVendorServiceImpl.java | 2 +- 22 files changed, 888 insertions(+), 17 deletions(-) create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/HandoverRecordDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/entity/HandoverRecord.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/enums/HandoverAccountTypeEnum.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/service/HandoverRecordService.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverTotalVo.java create mode 100644 cash-common/cash-common-tools/src/main/java/com/czg/enums/PlatformTypeEnum.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/mapper/HandoverRecordMapper.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/HandoverRecordServiceImpl.java create mode 100644 cash-service/account-service/src/main/resources/mapper/HandoverRecordMapper.xml diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java new file mode 100644 index 000000000..34c1d43ba --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java @@ -0,0 +1,37 @@ +package com.czg.controller.admin; + +import com.czg.account.service.HandoverRecordService; +import com.czg.account.vo.HandoverTotalVo; +import com.czg.log.annotation.OperationLog; +import com.czg.resp.CzgResult; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 交班 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-27 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/admin/handover-record") +public class HandoverRecordController { + private final HandoverRecordService handoverRecordService; + + + /** + * 收银机-交班数据统计 + */ + @GetMapping("total") + @OperationLog("收银机-交班数据统计") + //@SaAdminCheckPermission("handoverRecord:total") + public CzgResult total() { + HandoverTotalVo data = handoverRecordService.totalHandoverData(); + return CzgResult.success(data); + } + +} \ No newline at end of file diff --git a/cash-api/account-server/src/main/resources/application.yml b/cash-api/account-server/src/main/resources/application.yml index 8ba6ac541..e322b9cd5 100644 --- a/cash-api/account-server/src/main/resources/application.yml +++ b/cash-api/account-server/src/main/resources/application.yml @@ -13,6 +13,14 @@ spring: logging: config: classpath:logback.xml +# MyBatis-Flex +mybatis-flex: + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + wx: appId: wxd88fffa983758a30 secrete: a34a61adc0602118b49400baa8812454 diff --git a/cash-api/order-server/src/main/resources/application.yml b/cash-api/order-server/src/main/resources/application.yml index 3e312c60c..ad0a6fc43 100644 --- a/cash-api/order-server/src/main/resources/application.yml +++ b/cash-api/order-server/src/main/resources/application.yml @@ -10,3 +10,17 @@ spring: logging: config: classpath:logback.xml + +# MyBatis-Flex +mybatis-flex: + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + +dubbo: + consumer: + check: false + + diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/HandoverRecordDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/HandoverRecordDTO.java new file mode 100644 index 000000000..4334cb50b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/HandoverRecordDTO.java @@ -0,0 +1,100 @@ +package com.czg.account.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 交班记录表 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-27 + */ +@Data +public class HandoverRecordDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + /** + * 店铺 id + */ + private Long shopId; + /** + * 店铺 id + */ + private String shopName; + /** + * 登录时间 + */ + private LocalDateTime loginTime; + /** + * 交班时间 + */ + private LocalDateTime handoverTime; + /** + * 账户类型 merchant-商户 staff-员工 + */ + private String accountType; + /** + * 员工 id + */ + private Long staffId; + /** + * 员工姓名 + */ + private String staffName; + /** + * 当班总收入 + */ + private BigDecimal handAmount; + /** + * 现金收入 + */ + private BigDecimal cashAmount; + /** + * 微信收入 + */ + private BigDecimal wechatAmount; + /** + * 支付宝收入 + */ + private BigDecimal alipayAmount; + /** + * 会员支付 + */ + private BigDecimal vipPay; + /** + * 会员充值 + */ + private BigDecimal vipRecharge; + /** + * 分类数据 json + */ + private String categoryData; + /** + * 商品数据 json + */ + private String productData; + /** + * 快捷收款金额 + */ + private BigDecimal quickInAmount; + /** + * 退款金额 + */ + private BigDecimal refundAmount; + /** + * 挂账金额 + */ + private BigDecimal creditAmount; + /** + * 订单数量 + */ + private Integer orderCount; + +} \ No newline at end of file diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/HandoverRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/HandoverRecord.java new file mode 100644 index 000000000..1c48d04d4 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/HandoverRecord.java @@ -0,0 +1,104 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 交班记录表 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-27 + */ +@Data +@Table("tb_handover_record") +public class HandoverRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + /** + * 店铺 id + */ + private Long shopId; + /** + * 店铺名称 + */ + private String shopName; + /** + * 登录时间 + */ + private LocalDateTime loginTime; + /** + * 交班时间 + */ + private LocalDateTime handoverTime; + /** + * 账户类型 merchant-商户 staff-员工 + */ + private String accountType; + /** + * 员工 id + */ + private Long staffId; + /** + * 员工姓名 + */ + private String staffName; + /** + * 当班总收入 + */ + private BigDecimal handAmount; + /** + * 现金收入 + */ + private BigDecimal cashAmount; + /** + * 微信收入 + */ + private BigDecimal wechatAmount; + /** + * 支付宝收入 + */ + private BigDecimal alipayAmount; + /** + * 会员支付 + */ + private BigDecimal vipPay; + /** + * 会员充值 + */ + private BigDecimal vipRecharge; + /** + * 分类数据 json + */ + private String categoryData; + /** + * 商品数据 json + */ + private String productData; + /** + * 快捷收款金额 + */ + private BigDecimal quickInAmount; + /** + * 退款金额 + */ + private BigDecimal refundAmount; + /** + * 挂账金额 + */ + private BigDecimal creditAmount; + /** + * 订单数量 + */ + private Integer orderCount; +} \ No newline at end of file diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PictureClassify.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PictureClassify.java index fb283c9b1..f1771a80d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PictureClassify.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/PictureClassify.java @@ -4,7 +4,6 @@ import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; -import com.mybatisflex.core.keygen.KeyGenerators; import lombok.Data; import java.io.Serial; @@ -27,7 +26,7 @@ public class PictureClassify implements Serializable { /** * id */ - @Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId) + @Id(keyType = KeyType.Auto) private Long id; /** * 店铺id diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/enums/HandoverAccountTypeEnum.java b/cash-common/cash-common-service/src/main/java/com/czg/account/enums/HandoverAccountTypeEnum.java new file mode 100644 index 000000000..a6c9a4cd7 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/enums/HandoverAccountTypeEnum.java @@ -0,0 +1,43 @@ +package com.czg.account.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.List; + +/** + * 交班账户类型 + * + * @author tankaikai + * @since 2025-02-27 14:39 + */ +@Getter +@RequiredArgsConstructor +public enum HandoverAccountTypeEnum { + /** + * 商户 + */ + MERCHANT("merchant", "商户"), + + /** + * 员工 + */ + STAFF("staff", "员工"); + + private final String value; + private final String text; + + + public static List getValues() { + return Arrays.stream(values()).map(HandoverAccountTypeEnum::getValue).toList(); + } + + public static String getText(String value) { + HandoverAccountTypeEnum item = Arrays.stream(values()).filter(obj -> value.equals(obj.getValue())).findFirst().orElse(null); + if (item != null) { + return item.getText(); + } + return null; + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/HandoverRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/HandoverRecordService.java new file mode 100644 index 000000000..63a03000c --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/HandoverRecordService.java @@ -0,0 +1,26 @@ +package com.czg.account.service; + +import com.czg.account.entity.HandoverRecord; +import com.czg.account.vo.HandoverTotalVo; +import com.mybatisflex.core.service.IService; + +/** + * 交班记录表 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-27 + */ +public interface HandoverRecordService extends IService { + /** + * 统计交班数据 + * + * @return 交班数据 + */ + HandoverTotalVo totalHandoverData(); + + /** + * 初始化交班记录 + */ + void initHandoverRecord(HandoverRecord entity); + +} \ No newline at end of file diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java new file mode 100644 index 000000000..26233c33c --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverProductListVo.java @@ -0,0 +1,44 @@ +package com.czg.account.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 交班售出商品 + * + * @author tankaikai + * @since 2025-02-27 15:34 + */ +@Data +public class HandoverProductListVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 商品id + */ + private Long productId; + /** + * sku id + */ + private Long skuId; + /** + * 商品名称 + */ + private String productName; + /** + * 规格名称 + */ + private String skuName; + /** + * 商品数量 + */ + private BigDecimal num; + /** + * 小计(商品金额) + */ + private BigDecimal amount; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverTotalVo.java b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverTotalVo.java new file mode 100644 index 000000000..f9eb9f3d1 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/HandoverTotalVo.java @@ -0,0 +1,77 @@ +package com.czg.account.vo; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 交班数据统计 + * + * @author tankaikai + * @since 2025-02-27 15:34 + */ +@Data +public class HandoverTotalVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 当班记录id + */ + private Long id; + /** + * 店铺id + */ + private Long shopId; + /** + * 店铺名称 + */ + private String shopName; + /** + * 账户类型 merchant-商户 staff-员工 + */ + private String accountType; + /** + * 员工id + */ + private Long staffId; + /** + * 员工名称(营业员) + */ + private String staffName; + /** + * 上岗时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime loginTime; + /** + * 交班时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime handoverTime; + /** + * 现金支付 + */ + private BigDecimal cashAmount; + /** + * 退款金额 + */ + private BigDecimal refundAmount; + /** + * 当班总收入(营业额) + */ + private BigDecimal handAmount; + /** + * 订单数量 + */ + private Integer orderCount; + /** + * 售出商品列表 + */ + private List detailList; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java index 65b7f6297..5bdb3a884 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java @@ -1,6 +1,7 @@ package com.czg.order.service; import com.alibaba.fastjson2.JSONObject; +import com.czg.account.vo.HandoverProductListVo; import com.czg.order.dto.CheckOrderPay; import com.czg.order.dto.OrderInfoAddDTO; import com.czg.order.dto.OrderInfoQueryDTO; @@ -15,6 +16,7 @@ import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; /** * 订单表 服务层。 @@ -37,4 +39,54 @@ public interface OrderInfoService extends IService { void upOrderInfo(OrderInfo orderInfo, BigDecimal payAmount, LocalDateTime payTime, Long payOrderId, PayEnums payType); void expired(Long orderId); + + /** + * 交班现金支付统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 现金支付总额 + */ + BigDecimal getHandoverCashAmount(Long shopId, String loginTime, String handoverTime); + + /** + * 交班退款统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 退款总额 + */ + BigDecimal getHandoverRefundAmount(Long shopId, String loginTime, String handoverTime); + + /** + * 交班营业额统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 营业额 + */ + BigDecimal getHandoverTotalAmount(Long shopId, String loginTime, String handoverTime); + + /** + * 交班订单数统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 交班订单数 + */ + int getHandoverOrderNum(Long shopId, String loginTime, String handoverTime); + + /** + * 交班售出商品明细 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 交班售出商品明细 + */ + List getHandoverDetailList(Long shopId, String loginTime, String handoverTime); } diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/enums/PlatformTypeEnum.java b/cash-common/cash-common-tools/src/main/java/com/czg/enums/PlatformTypeEnum.java new file mode 100644 index 000000000..8601b3298 --- /dev/null +++ b/cash-common/cash-common-tools/src/main/java/com/czg/enums/PlatformTypeEnum.java @@ -0,0 +1,54 @@ +package com.czg.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.List; + +/** + * 平台类型枚举 + * + * @author tankaikai + * @since 2025-02-27 14:39 + */ +@Getter +@RequiredArgsConstructor +public enum PlatformTypeEnum { + /** + * 收银机客户端 + */ + PC_CLIENT("PC", "收银机客户端"), + /** + * 微信小程序 + */ + WECHAT("WX", "微信小程序"), + /** + * 支付宝小程序 + */ + ALIPAY("ALI", "支付宝小程序"), + /** + * PC管理端 + */ + WEB_ADMIN("WEB", "PC管理端"), + /** + * APP管理端 + */ + APP_ADMIN("APP", "APP管理端"); + + private final String value; + private final String text; + + + public static List getValues() { + return Arrays.stream(values()).map(PlatformTypeEnum::getValue).toList(); + } + + public static String getText(String value) { + PlatformTypeEnum item = Arrays.stream(values()).filter(obj -> value.equals(obj.getValue())).findFirst().orElse(null); + if (item != null) { + return item.getText(); + } + return null; + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/HandoverRecordMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/HandoverRecordMapper.java new file mode 100644 index 000000000..8bc135aa1 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/HandoverRecordMapper.java @@ -0,0 +1,16 @@ +package com.czg.service.account.mapper; + +import com.czg.account.entity.HandoverRecord; +import com.mybatisflex.core.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 交班记录表 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-27 + */ +@Mapper +public interface HandoverRecordMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java index af5b4e4d8..d0ba4680e 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java @@ -6,20 +6,23 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import com.czg.account.dto.SysLoginDTO; import com.czg.account.entity.*; +import com.czg.account.enums.HandoverAccountTypeEnum; import com.czg.account.service.*; import com.czg.account.vo.LoginVO; import com.czg.config.RedisCst; +import com.czg.enums.PlatformTypeEnum; import com.czg.enums.StatusEnum; import com.czg.exception.ApiNotPrintException; import com.czg.sa.MyStpLogic; import com.czg.sa.StpKit; import com.czg.service.RedisService; import com.czg.service.account.mapper.SysMenuMapper; +import com.czg.utils.ServletUtil; import com.wf.captcha.SpecCaptcha; import jakarta.annotation.Resource; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -44,6 +47,8 @@ public class AuthorizationServiceImpl implements AuthorizationService { private SysRoleService sysRoleService; @Resource private SysMenuMapper sysMenuMapper; + @Resource + private HandoverRecordService handoverRecordService; @Override @@ -83,8 +88,8 @@ public class AuthorizationServiceImpl implements AuthorizationService { } user = sysUserService.queryChain().eq(SysUser::getAccount, sysUser.getId() + "@" + loginDTO.staffUserName()).one(); - }else { - user = sysUserService.queryChain().eq(SysUser::getAccount,loginDTO.username()).one(); + } else { + user = sysUserService.queryChain().eq(SysUser::getAccount, loginDTO.username()).one(); } if (user == null) { @@ -97,11 +102,12 @@ public class AuthorizationServiceImpl implements AuthorizationService { } ShopInfo shopInfo; + ShopStaff shopStaff = null; boolean isStaff = false; List shopStaffPromissionList = null; // 商户员工登录 if (loginDTO.loginType() == 1) { - ShopStaff shopStaff = shopStaffService.queryChain().eq(ShopStaff::getStatus, 1) + shopStaff = shopStaffService.queryChain().eq(ShopStaff::getStatus, 1) .eq(ShopStaff::getIsManage, 1) .eq(ShopStaff::getId, user.getId()).one(); if (shopStaff == null) { @@ -112,7 +118,7 @@ public class AuthorizationServiceImpl implements AuthorizationService { // 查询员工权限 shopStaffPromissionList = shopStaffPermissionService.getPermissionByStaffId(shopInfo.getId(), shopStaff.getId(), user.getId()).stream().map(ShopPermission::getCode).toList(); - }else { + } else { shopInfo = shopInfoService.getById(user.getId()); } @@ -126,7 +132,7 @@ public class AuthorizationServiceImpl implements AuthorizationService { } } - StpKit.USER.login(user.getId(), user.getAccount(), shopInfo.getId(), isStaff ? MyStpLogic.LoginType.STAFF :MyStpLogic.LoginType.MANAGER, user.getIsAdmin()); + StpKit.USER.login(user.getId(), user.getAccount(), shopInfo.getId(), isStaff ? MyStpLogic.LoginType.STAFF : MyStpLogic.LoginType.MANAGER, user.getIsAdmin()); // 查询角色 List roleList = sysRoleService.getByUserId(user.getId()); List roleNames = roleList.stream().map(SysRole::getName).collect(Collectors.toList()); @@ -138,6 +144,30 @@ public class AuthorizationServiceImpl implements AuthorizationService { promissionList.addAll(shopStaffPromissionList); } StpKit.USER.addPermissionList(promissionList); + String platformType = ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"); + if (PlatformTypeEnum.PC_CLIENT.getValue().equals(platformType)) { + // 初始化交班记录 + HandoverRecord entity = getHandoverRecord(isStaff, shopInfo, shopStaff); + handoverRecordService.initHandoverRecord(entity); + } return new LoginVO(StpKit.USER.getTokenInfo(), promissionList, loginDTO.loginType(), shopInfo); } + + @NotNull + private static HandoverRecord getHandoverRecord(boolean isStaff, ShopInfo shopInfo, ShopStaff shopStaff) { + HandoverRecord entity = new HandoverRecord(); + if (isStaff) { + entity.setAccountType(HandoverAccountTypeEnum.STAFF.getValue()); + entity.setStaffId(shopStaff.getId()); + entity.setStaffName(shopStaff.getName()); + } else { + entity.setAccountType(HandoverAccountTypeEnum.MERCHANT.getValue()); + + entity.setStaffId(shopInfo.getId()); + entity.setStaffName(shopInfo.getShopName()); + } + entity.setShopId(shopInfo.getId()); + entity.setShopName(shopInfo.getShopName()); + return entity; + } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/HandoverRecordServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/HandoverRecordServiceImpl.java new file mode 100644 index 000000000..ec287250f --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/HandoverRecordServiceImpl.java @@ -0,0 +1,103 @@ +package com.czg.service.account.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.czg.account.dto.HandoverRecordDTO; +import com.czg.account.entity.HandoverRecord; +import com.czg.account.service.HandoverRecordService; +import com.czg.account.vo.HandoverProductListVo; +import com.czg.account.vo.HandoverTotalVo; +import com.czg.order.service.OrderInfoService; +import com.czg.sa.StpKit; +import com.czg.service.account.mapper.HandoverRecordMapper; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 交班记录表 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-27 + */ +@Service +public class HandoverRecordServiceImpl extends ServiceImpl implements HandoverRecordService { + + @DubboReference + private OrderInfoService orderInfoService; + + private QueryWrapper buildQueryWrapper(HandoverRecordDTO param) { + QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper(); + /*if (StrUtil.isNotEmpty(param.getName())) { + queryWrapper.like(HandoverRecord::getName, param.getName()); + }*/ + Long shopId = StpKit.USER.getShopId(0L); + queryWrapper.eq(HandoverRecord::getShopId, shopId); + queryWrapper.orderBy(HandoverRecord::getId, false); + return queryWrapper; + } + + + @Override + public HandoverTotalVo totalHandoverData() { + orderInfoService.historyOrder(0L, "11"); + Long shopId = StpKit.USER.getShopId(0L); + LocalDateTime handoverTime = LocalDateTime.now(); + HandoverRecord record = super.getOne(query().eq(HandoverRecord::getShopId, shopId).isNull(HandoverRecord::getHandoverTime)); + HandoverTotalVo data = new HandoverTotalVo(); + data.setId(record.getId()); + data.setShopId(record.getShopId()); + data.setShopName(record.getShopName()); + data.setAccountType(record.getAccountType()); + data.setStaffId(record.getStaffId()); + data.setStaffName(record.getStaffName()); + data.setLoginTime(record.getLoginTime()); + data.setHandoverTime(handoverTime); + String loginTimeStr = LocalDateTimeUtil.formatNormal(record.getLoginTime()); + String handoverTimeStr = LocalDateTimeUtil.formatNormal(handoverTime); + data.setCashAmount(sumCashAmount(shopId, loginTimeStr, handoverTimeStr)); + data.setRefundAmount(sumRefundAmount(shopId, loginTimeStr, handoverTimeStr)); + data.setHandAmount(sumHandAmount(shopId, loginTimeStr, handoverTimeStr)); + data.setOrderCount(countOrderNum(shopId, loginTimeStr, handoverTimeStr)); + data.setDetailList(getDetailList(shopId, loginTimeStr, handoverTimeStr)); + return data; + } + + @Override + public void initHandoverRecord(HandoverRecord entity) { + Long shopId = StpKit.USER.getShopId(0L); + List list = super.list(query().eq(HandoverRecord::getShopId, shopId).isNull(HandoverRecord::getHandoverTime)); + if (CollUtil.isNotEmpty(list)) { + return; + } + entity.setShopId(shopId); + entity.setLoginTime(LocalDateTime.now()); + super.save(entity); + } + + private BigDecimal sumCashAmount(Long shopId, String loginTime, String handoverTime) { + return orderInfoService.getHandoverCashAmount(shopId, loginTime, handoverTime); + } + + private BigDecimal sumRefundAmount(Long shopId, String loginTime, String handoverTime) { + return orderInfoService.getHandoverRefundAmount(shopId, loginTime, handoverTime); + } + + private BigDecimal sumHandAmount(Long shopId, String loginTime, String handoverTime) { + return orderInfoService.getHandoverTotalAmount(shopId, loginTime, handoverTime); + } + + private int countOrderNum(Long shopId, String loginTime, String handoverTime) { + return orderInfoService.getHandoverOrderNum(shopId, loginTime, handoverTime); + } + + private List getDetailList(Long shopId, String loginTime, String handoverTime) { + return orderInfoService.getHandoverDetailList(shopId, loginTime, handoverTime); + } +} \ No newline at end of file diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PictureClassifyServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PictureClassifyServiceImpl.java index 58dfa4e0d..f9ab5fbfd 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PictureClassifyServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PictureClassifyServiceImpl.java @@ -32,7 +32,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl { q.eq(PictureClassify::getShopId, shopId).or(q1 -> { q1.eq(PictureClassify::getShopId, 0).eq(PictureClassify::getIsSystem, YesNoEnum.YES.value()); @@ -52,7 +52,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl { q.eq(PictureClassify::getShopId, shopId).or(q1 -> { @@ -72,7 +72,7 @@ public class PictureClassifyServiceImpl extends ServiceImpl + + + + + \ No newline at end of file diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoMapper.java index 60394cdb3..e5ccc92ae 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoMapper.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoMapper.java @@ -1,7 +1,11 @@ package com.czg.service.order.mapper; -import com.mybatisflex.core.BaseMapper; +import com.czg.account.vo.HandoverProductListVo; import com.czg.order.entity.OrderInfo; +import com.mybatisflex.core.BaseMapper; + +import java.math.BigDecimal; +import java.util.List; /** * 订单表 映射层。 @@ -11,4 +15,54 @@ import com.czg.order.entity.OrderInfo; */ public interface OrderInfoMapper extends BaseMapper { + /** + * 交班现金支付统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 现金支付总额 + */ + BigDecimal getHandoverCashAmount(Long shopId, String loginTime, String handoverTime); + + /** + * 交班退款统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 退款总额 + */ + BigDecimal getHandoverRefundAmount(Long shopId, String loginTime, String handoverTime); + + /** + * 交班营业额统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 营业额 + */ + BigDecimal getHandoverTotalAmount(Long shopId, String loginTime, String handoverTime); + + /** + * 交班订单数统计 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 交班订单数 + */ + int getHandoverOrderNum(Long shopId, String loginTime, String handoverTime); + + /** + * 交班售出商品明细 + * + * @param shopId 店铺id + * @param loginTime 上岗时间 + * @param handoverTime 交班时间 + * @return 交班售出商品明细 + */ + List getHandoverDetailList(Long shopId, String loginTime, String handoverTime); + } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index 839c6f188..2b57da6f4 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson2.JSONObject; import com.czg.account.dto.shopuser.ShopUserMoneyEditDTO; import com.czg.account.entity.*; import com.czg.account.service.*; +import com.czg.account.vo.HandoverProductListVo; import com.czg.config.RabbitPublisher; import com.czg.config.RedisCst; import com.czg.entity.notify.CzgPayNotifyDTO; @@ -566,6 +567,31 @@ public class OrderInfoServiceImpl extends ServiceImpl getHandoverDetailList(Long shopId, String loginTime, String handoverTime) { + return super.mapper.getHandoverDetailList(shopId, loginTime, handoverTime); + } + /** * 初始化订单信息 */ diff --git a/cash-service/order-service/src/main/resources/mapper/OrderInfoMapper.xml b/cash-service/order-service/src/main/resources/mapper/OrderInfoMapper.xml index 109760816..feb6903de 100644 --- a/cash-service/order-service/src/main/resources/mapper/OrderInfoMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/OrderInfoMapper.xml @@ -4,4 +4,82 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + AND t1.shop_id = + #{shopId} + = + str_to_date + ( + #{loginTime}, + '%Y-%m-%d %H:%i:%s' + ) + AND + t1 + . + paid_time + <= + str_to_date + ( + #{handoverTime}, + '%Y-%m-%d %H:%i:%s' + ) + ]]> + + + + + + + diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java index 2eac2a76d..5c0a266ba 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java @@ -34,6 +34,7 @@ public class ShopVendorServiceImpl extends ServiceImpl getShopVendorList(ShopVendorDTO param) { QueryWrapper queryWrapper = buildQueryWrapper(param); - queryWrapper.eq(ShopVendor::getIsDel, DeleteEnum.NORMAL.value()); return super.listAs(queryWrapper, ShopVendorDTO.class); }