交班相关代码

This commit is contained in:
Tankaikai
2025-02-27 19:01:31 +08:00
parent 166634e3f0
commit 8cbfbe265f
22 changed files with 888 additions and 17 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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<String> 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;
}
}

View File

@@ -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<HandoverRecord> {
/**
* 统计交班数据
*
* @return 交班数据
*/
HandoverTotalVo totalHandoverData();
/**
* 初始化交班记录
*/
void initHandoverRecord(HandoverRecord entity);
}

View File

@@ -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;
}

View File

@@ -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<HandoverProductListVo> detailList;
}

View File

@@ -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<OrderInfo> {
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<HandoverProductListVo> getHandoverDetailList(Long shopId, String loginTime, String handoverTime);
}

View File

@@ -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<String> 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;
}
}