Merge #111 into master from cc_20260417_bonus

fix:工资奖金

* cc_20260417_bonus: (28 commits squashed)

  - feat:工资奖金发放

  - fix:工资奖金发放

  - fix:工资奖金发放

  - fix:工资奖金发放

  - fix:工资奖金发放

  - fix:门店实收相关接口

  - fix:新品销售门店级接口

  - fix:新品销售菜品列表接口;规则新增返回id

  - fix:新品销售菜品详情接口

  - fix:新品销售菜品接口补充

  - fix:小程序接口补充

  - fix

  - fix:新增实收、新品销售测试接口

  - fix:新增实收、新品销售测试接口

  - fix

  - fix:新增门店菜品列表接口

  - fix:同规则下无法新增相同菜品规则;新增小程序门店列表接口

  - fix

  - fix:小程序用户获取来源修改

  - fix:实收规则新增上月日均实收字段

  - fix:规则限制

  - fix:小程序上月日均实收

  - fix:查询异常

  - fix:查询异常

  - fix:菜品员工明细字段赋值异常

  - fix:排序

  - fix:排序

  - fix:员工实收列表新增门店筛选条件

Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/111
This commit is contained in:
王非凡
2026-04-27 10:41:08 +00:00
committed by 正新
parent 97f8a8669c
commit 22fcfc6a90
95 changed files with 5466 additions and 8 deletions

View File

@@ -0,0 +1,90 @@
package com.cool.store.entity.bonus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import javax.persistence.*;
/**
* 奖金发放规则
*/
@Data
@Table(name = "bonus_distribution_rule")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BonusDistributionRuleDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 规则类型1-实收 2-新品销售
*/
private Integer type;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 生效开始年月
*/
@Column(name = "start_date")
private Date startDate;
/**
* 生效结束年月
*/
@Column(name = "end_date")
private Date endDate;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 创建人id
*/
@Column(name = "create_user_id")
private String createUserId;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 更新人id
*/
@Column(name = "update_user_id")
private String updateUserId;
/**
* 奖金规则配置
*/
@Column(name = "bonus_config")
private String bonusConfig;
/**
* 分配规则配置
*/
@Column(name = "distribute_config")
private String distributeConfig;
/**
* 是否启用0否1是
*/
private Integer enable;
}

View File

@@ -0,0 +1,63 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 员工奖励明细
*/
@Data
@Table(name = "bonus_employee_reward_detail")
public class BonusEmployeeRewardDetailDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放年月
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 奖励人姓名
*/
@Column(name = "reward_user_name")
private String rewardUserName;
/**
* 奖励人id
*/
@Column(name = "reward_user_id")
private String rewardUserId;
/**
* 实收奖励金额
*/
@Column(name = "received_amount")
private BigDecimal receivedAmount;
/**
* 新品销售奖励金额
*/
@Column(name = "new_project_amount")
private BigDecimal newProjectAmount;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,75 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 新品销售奖金-员工
*/
@Data
@Table(name = "bonus_new_product_employee")
public class BonusNewProductEmployeeDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* bonus_new_product_store.id
*/
@Column(name = "product_store_id")
private Long productStoreId;
/**
* 规则id
*/
@Column(name = "rule_id")
private Long ruleId;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放年月日
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 奖励比例(%
*/
@Column(name = "reward_ratio")
private BigDecimal rewardRatio;
/**
* 奖励金额
*/
@Column(name = "reward_amount")
private BigDecimal rewardAmount;
/**
* 奖励人姓名
*/
@Column(name = "reward_user_name")
private String rewardUserName;
/**
* 奖励人id
*/
@Column(name = "reward_user_id")
private String rewardUserId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,99 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 新品销售奖金-菜品
*/
@Data
@Table(name = "bonus_new_product_recipe")
public class BonusNewProductRecipeDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 规则id
*/
@Column(name = "rule_id")
private Long ruleId;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放年月日
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 菜品编码
*/
@Column(name = "recipe_no")
private String recipeNo;
/**
* 菜品名称
*/
@Column(name = "recipe_name")
private String recipeName;
/**
* 日销量奖励最低达标数量
*/
@Column(name = "min_standard_num")
private Integer minStandardNum;
/**
* 销售奖励(元/个)
*/
@Column(name = "reward_amount")
private BigDecimal rewardAmount;
/**
* 日销量超额奖励基数
*/
@Column(name = "excess_standard_num")
private Integer excessStandardNum;
/**
* 超额后额外销售奖励(元/个)
*/
@Column(name = "excess_amount")
private BigDecimal excessAmount;
/**
* 销量
*/
@Column(name = "sales_volume")
private Integer salesVolume;
/**
* 基础奖金
*/
@Column(name = "basic_reward_amount")
private BigDecimal basicRewardAmount;
/**
* 超额奖金
*/
@Column(name = "excess_reward_amount")
private BigDecimal excessRewardAmount;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,99 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 新品销售奖金-菜品-员工
*/
@Data
@Table(name = "bonus_new_product_recipe_employee")
public class BonusNewProductRecipeEmployeeDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* bonus_new_product_recipe.id
*/
@Column(name = "product_recipe_id")
private Long productRecipeId;
/**
* 规则id
*/
@Column(name = "rule_id")
private Long ruleId;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放年月日
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 菜品编码
*/
@Column(name = "recipe_no")
private String recipeNo;
/**
* 菜品名称
*/
@Column(name = "recipe_name")
private String recipeName;
/**
* 销量
*/
@Column(name = "sales_volume")
private Integer salesVolume;
/**
* 基础奖金
*/
@Column(name = "basic_reward_amount")
private BigDecimal basicRewardAmount;
/**
* 超额奖金
*/
@Column(name = "excess_reward_amount")
private BigDecimal excessRewardAmount;
/**
* 奖励比例(%
*/
@Column(name = "reward_ratio")
private BigDecimal rewardRatio;
/**
* 奖励人姓名
*/
@Column(name = "reward_user_name")
private String rewardUserName;
/**
* 奖励人id
*/
@Column(name = "reward_user_id")
private String rewardUserId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,51 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 新品销售奖金-门店
*/
@Data
@Table(name = "bonus_new_product_store")
public class BonusNewProductStoreDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 规则id
*/
@Column(name = "rule_id")
private Long ruleId;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放月份
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 奖金总计
*/
@Column(name = "amount_total")
private BigDecimal amountTotal;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,75 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 实收奖金发放-员工
*/
@Data
@Table(name = "bonus_received_employee")
public class BonusReceivedEmployeeDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* bonus_received_store.id
*/
@Column(name = "received_store_id")
private Long receivedStoreId;
/**
* 规则id
*/
@Column(name = "rule_id")
private Long ruleId;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放月份
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 奖励比例(%
*/
@Column(name = "reward_ratio")
private BigDecimal rewardRatio;
/**
* 实收奖励金额
*/
@Column(name = "received_amount")
private BigDecimal receivedAmount;
/**
* 奖励人姓名
*/
@Column(name = "reward_user_name")
private String rewardUserName;
/**
* 奖励人id
*/
@Column(name = "reward_user_id")
private String rewardUserId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,75 @@
package com.cool.store.entity.bonus;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
/**
* 实收奖金发放-门店
*/
@Data
@Table(name = "bonus_received_store")
public class BonusReceivedStoreDO {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 规则id
*/
@Column(name = "rule_id")
private Long ruleId;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/**
* 发放月份
*/
@Column(name = "pay_date")
private Date payDate;
/**
* 月度实收
*/
@Column(name = "received_monthly")
private BigDecimal receivedMonthly;
/**
* 月度营业天数
*/
@Column(name = "business_days")
private Integer businessDays;
/**
* 日均实收
*/
@Column(name = "received_daily")
private BigDecimal receivedDaily;
/**
* 上月日均实收
*/
@Column(name = "received_daily_last")
private BigDecimal receivedDailyLast;
/**
* 奖金总计
*/
@Column(name = "amount_total")
private BigDecimal amountTotal;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -0,0 +1,33 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* <p>
* 新品销售试算
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusProductComputeRequest {
@ApiModelProperty("菜品销量")
@NotEmpty(message = "菜品销量不能为空")
private List<BonusProductRecipeCompute> recipeSales;
@ApiModelProperty("新品销售奖金规则配置(新品销售必填)")
@NotEmpty(message = "新品销售奖金规则配置不能为空")
@Valid
private List<BonusRuleProductConfig> productConfigs;
@ApiModelProperty("分配规则")
@NotEmpty(message = "分配规则不能为空")
@Valid
private List<BonusRuleDistributeConfig> distributeConfigs;
}

View File

@@ -0,0 +1,36 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 员工新品查询Request
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusProductEmployeeQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店编码/名称")
private String storeNumOrName;
@ApiModelProperty("开始日期")
private Date startDate;
@ApiModelProperty("结束日期")
private Date endDate;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("菜品编码或名称")
private String recipeNoOrName;
@ApiModelProperty("门店id")
private String storeId;
}

View File

@@ -0,0 +1,33 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* <p>
* 新品销售月度查询Request
* </p>
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductMonthlyQueryRequest {
@ApiModelProperty("规则id")
private Long ruleId;
@ApiModelProperty("门店id")
@NotBlank(message = "门店id不能为空")
private String storeId;
@ApiModelProperty("发放月份")
@NotNull(message = "发放月份不能为空")
private Date payDate;
@ApiModelProperty("奖励人id")
private String rewardUserId;
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 门店新品销售奖金发放列表查询请求
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店编码/名称")
private String storeNumOrName;
@ApiModelProperty("开始日期")
private Date startDate;
@ApiModelProperty("结束日期")
private Date endDate;
@ApiModelProperty("菜品编码或名称")
private String recipeNoOrName;
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* <p>
* 新品销售试算菜品
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BonusProductRecipeCompute {
@ApiModelProperty("菜品编码")
@NotNull(message = "菜品编码不能为空")
private String recipeNo;
@ApiModelProperty("销量")
@NotNull(message = "销量不能为空")
private Integer salesVolume;
}

View File

@@ -0,0 +1,37 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* <p>
* 门店菜品员工查询Request
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusProductRecipeEmployeeQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店id")
@NotBlank(message = "门店id不能为空")
private String storeId;
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("奖励人id")
@NotNull(message = "奖励人id不能为空")
private String rewardUserId;
@ApiModelProperty("开始日期")
private Date startDate;
@ApiModelProperty("结束日期")
private Date endDate;
}

View File

@@ -0,0 +1,34 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* <p>
* 门店菜品查询Request
* </p>
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductRecipeQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店id")
@NotBlank(message = "门店id不能为空")
private String storeId;
@ApiModelProperty("菜品编码")
@NotNull(message = "菜品编码不能为空")
private String recipeNo;
@ApiModelProperty("开始日期")
private Date startDate;
@ApiModelProperty("结束日期")
private Date endDate;
}

View File

@@ -0,0 +1,43 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 月度实收试算
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusReceivedComputeRequest {
@ApiModelProperty("月度实收")
@NotNull(message = "月度实收不能为空")
private BigDecimal receivedMonthly;
@ApiModelProperty("月度营业天数")
@NotNull(message = "月度营业天数不能为空")
private Integer businessDays;
@ApiModelProperty("日均实收小于等于该值不发放奖金(实收必填)")
@NotNull(message = "日均实收小于等于该值不发放奖金(实收必填)不能为空")
private BigDecimal receivedStart;
@ApiModelProperty("实收奖励规则配置(实收必填)")
@NotNull(message = "实收奖励规则配置(实收必填)不能为空")
@Valid
private List<BonusRuleReceivedConfig> receivedConfigs;
@ApiModelProperty("分配规则")
@NotNull(message = "分配规则不能为空")
@Valid
private List<BonusRuleDistributeConfig> distributeConfigs;
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 员工实收奖金发放列表查询请求
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusReceivedEmployeeQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店编码/名称")
private String storeNumOrName;
@ApiModelProperty("开始年月")
private Date startMonth;
@ApiModelProperty("结束年月")
private Date endMonth;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("门店id")
private String storeId;
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 门店实收奖金发放列表查询请求
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusReceivedStoreQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店编码/名称")
private String storeNumOrName;
@ApiModelProperty("开始年月")
private Date startMonth;
@ApiModelProperty("结束年月")
private Date endMonth;
@ApiModelProperty("门店id")
private String storeId;
}

View File

@@ -0,0 +1,35 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* <p>
* 奖金发放规则新增Request
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleAddRequest {
@ApiModelProperty("门店id")
@NotBlank(message = "门店id不能为空")
private String storeId;
@ApiModelProperty("规则类型1-实收 2-新品销售")
@NotNull(message = "规则类型不能为空")
private Integer type;
@ApiModelProperty("生效开始年月")
@NotNull(message = "生效开始年月不能为空")
private Date startDate;
@ApiModelProperty("生效结束年月")
@NotNull(message = "生效结束年月不能为空")
private Date endDate;
}

View File

@@ -0,0 +1,26 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* <p>
* 分配规则
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleDistributeConfig {
@ApiModelProperty("奖励人id")
private String rewardUserId;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("奖励比例(%")
private BigDecimal rewardRatio;
}

View File

@@ -0,0 +1,25 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* <p>
* 奖金发放规则启用Request
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleEnableRequest {
@ApiModelProperty("规则id")
@NotNull(message = "规则id不能为空")
private Long id;
@ApiModelProperty("是否启用0否1是")
@NotNull(message = "是否启用不能为空")
private Integer enable;
}

View File

@@ -0,0 +1,35 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* <p>
* 新品销售规则配置
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleProductConfig {
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("菜品名称")
private String recipeName;
@ApiModelProperty("日销量奖励最低达标数量")
private Integer minStandardNum;
@ApiModelProperty("销售奖励(元/个)")
private BigDecimal rewardAmount;
@ApiModelProperty("日销量超额奖励基数")
private Integer excessStandardNum;
@ApiModelProperty("超额后额外销售奖励(元/个)")
private BigDecimal excessAmount;
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.request.bonus;
import com.cool.store.common.PageBasicInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 规则查询Request
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleQueryRequest extends PageBasicInfo {
@ApiModelProperty("门店编码或名称")
private String storeNumOrName;
@ApiModelProperty("规则类型1-实收 2-新品销售")
private Integer type;
@ApiModelProperty("是否启用0否1是")
private Integer enable;
@ApiModelProperty("门店id")
private String storeId;
}

View File

@@ -0,0 +1,30 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* <p>
* 实收规则
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleReceivedConfig {
@ApiModelProperty("实收小于等于")
@NotNull(message = "实收小于等于不能为空")
private BigDecimal le;
@ApiModelProperty("实收大于")
@NotNull(message = "实收大于不能为空")
private BigDecimal gt;
@ApiModelProperty("奖励比例(%")
@NotNull(message = "奖励比例不能为空")
private BigDecimal rewardRatio;
}

View File

@@ -0,0 +1,47 @@
package com.cool.store.request.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* <p>
* 奖金发放规则编辑Request
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleUpdateRequest {
@ApiModelProperty("id")
@NotNull(message = "id不能为空")
private Long id;
@ApiModelProperty("生效开始年月")
@NotNull(message = "生效开始年月不能为空")
private Date startDate;
@ApiModelProperty("生效结束年月")
@NotNull(message = "生效结束年月不能为空")
private Date endDate;
@ApiModelProperty("日均实收小于等于该值不发放奖金(实收必填)")
private BigDecimal receivedStart;
@ApiModelProperty("实收奖励规则配置(实收必填)")
private List<BonusRuleReceivedConfig> receivedConfigs;
@ApiModelProperty("新品销售奖金规则配置(新品销售必填)")
private List<BonusRuleProductConfig> productConfigs;
@ApiModelProperty("分配规则")
@NotEmpty(message = "分配规则不能为空")
private List<BonusRuleDistributeConfig> distributeConfigs;
}

View File

@@ -0,0 +1,27 @@
package com.cool.store.request.storeopen;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 门店月营收请求
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class StoreMonthRevenueRequest {
@ApiModelProperty("门店编码")
@NotBlank(message = "门店编码不能为空")
private String storeNum;
@ApiModelProperty("开始月份格式yyyy-MM")
@NotBlank(message = "开始月份不能为空")
private String startDate;
@ApiModelProperty("结束月份格式yyyy-MM")
@NotBlank(message = "结束月份不能为空")
private String endDate;
}

View File

@@ -0,0 +1,27 @@
package com.cool.store.request.storeopen;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 门店菜品日销量请求
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class StoreRecipeDailySalesRequest {
@ApiModelProperty("门店编码")
@NotBlank(message = "门店编码不能为空")
private String storeNum;
@ApiModelProperty("开始日期格式yyyy-MM-dd")
@NotBlank(message = "开始日期不能为空")
private String startDate;
@ApiModelProperty("结束日期格式yyyy-MM-dd")
@NotBlank(message = "结束日期不能为空")
private String endDate;
}

View File

@@ -0,0 +1,19 @@
package com.cool.store.request.storeopen;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 门店菜品种类请求
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class StoreRecipesRequest {
@ApiModelProperty("门店编码")
@NotBlank(message = "门店编码不能为空")
private String storeNum;
}

View File

@@ -0,0 +1,41 @@
package com.cool.store.response.storeopen;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.math.BigDecimal;
/**
* 门店月营收响应
*
* @author wangff
* @since 2026/4/20
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class StoreMonthRevenueResponse {
/**
* 月份格式yyyy-MM
*/
private String date;
/**
* 月度实收
*/
private BigDecimal receivedAmount;
/**
* 月度营业天数
*/
private Integer businessDays;
/**
* 当月日均实收
*/
private BigDecimal receivedAmountDaily;
/**
* 上月日均实收
*/
private BigDecimal receivedAmountDailyLastMonth;
}

View File

@@ -0,0 +1,18 @@
package com.cool.store.response.storeopen;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 门店开放数据API通用响应
*
* @author wangff
* @since 2026/4/20
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class StoreOpenApiResponse<T> {
private Integer code;
private String msg;
private T data;
}

View File

@@ -0,0 +1,34 @@
package com.cool.store.response.storeopen;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 门店菜品日销量响应
*
* @author wangff
* @since 2026/4/20
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class StoreRecipeDailySalesResponse {
/**
* 日期格式yyyy-MM-dd
*/
private String date;
/**
* 日销售量
*/
private Integer sales;
/**
* 菜品编码
*/
private String recipeNo;
/**
* 菜品名称
*/
private String recipeName;
}

View File

@@ -0,0 +1,24 @@
package com.cool.store.response.storeopen;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 门店菜品种类响应
*
* @author wangff
* @since 2026/4/20
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class StoreRecipesResponse {
/**
* 菜品编码
*/
private String recipeNo;
/**
* 菜品名称
*/
private String recipeName;
}

View File

@@ -0,0 +1,24 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 基础信息VO
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusBasicVO {
@ApiModelProperty("门店id")
private String storeId;
@ApiModelProperty("门店编码")
private String storeNum;
@ApiModelProperty("门店名称")
private String storeName;
}

View File

@@ -0,0 +1,45 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* <p>
* 实算用户金额VO
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BonusComputeUserVO {
@ApiModelProperty("奖励金额")
private BigDecimal rewardAmount;
@ApiModelProperty("奖励人id")
private String rewardUserId;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("基础奖金")
private BigDecimal basicRewardAmount;
@ApiModelProperty("超额奖金")
private BigDecimal excessRewardAmount;
@ApiModelProperty("奖励比例(%")
private BigDecimal rewardRatio;
public BonusComputeUserVO(BigDecimal rewardAmount, String rewardUserId, String rewardUserName) {
this.rewardAmount = rewardAmount;
this.rewardUserName = rewardUserName;
this.rewardUserId = rewardUserId;
}
}

View File

@@ -0,0 +1,33 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 员工奖金明细
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusEmployeeDetailVO extends BonusBasicVO {
@ApiModelProperty("发放年月")
private Date payDate;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("奖励人id")
private String rewardUserId;
@ApiModelProperty("实收奖励金额")
private BigDecimal receivedAmount;
@ApiModelProperty("新品销售奖励金额")
private BigDecimal newProjectAmount;
}

View File

@@ -0,0 +1,27 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* <p>
* 新品销售实算VO
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BonusProductComputeVO {
@ApiModelProperty("菜品信息")
private List<BonusProductRecipeComputeVO> recipes;
@ApiModelProperty("明细(员工级)")
private List<BonusComputeUserVO> detail;
}

View File

@@ -0,0 +1,30 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 门店新品销售奖金方法列表-员工
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusProductEmployeeListVO extends BonusBasicVO {
@ApiModelProperty("发放年月")
private Date payDate;
@ApiModelProperty("奖励金额")
private BigDecimal receivedAmount;
@ApiModelProperty("奖励人id")
private String rewardUserId;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
}

View File

@@ -0,0 +1,48 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 新品销售菜品实算VO
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusProductRecipeComputeVO {
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("菜品名称")
private String recipeName;
@ApiModelProperty("日销量奖励最低达标数量")
private Integer minStandardNum;
@ApiModelProperty("销售奖励(元/个)")
private BigDecimal rewardAmount;
@ApiModelProperty("日销量超额奖励基数")
private Integer excessStandardNum;
@ApiModelProperty("超额后额外销售奖励(元/个)")
private BigDecimal excessAmount;
@ApiModelProperty("销量")
private Integer salesVolume;
@ApiModelProperty("基础奖金")
private BigDecimal basicRewardAmount;
@ApiModelProperty("超额奖金")
private BigDecimal excessRewardAmount;
@ApiModelProperty("明细(员工-菜品级)")
private List<BonusComputeUserVO> detail;
}

View File

@@ -0,0 +1,49 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 门店新品销售奖金发放详情-菜品
* </p>
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductRecipeDetailVO extends BonusBasicVO {
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("菜品名称")
private String recipeName;
@ApiModelProperty("发放日期")
private Date payDate;
@ApiModelProperty("日销量奖励最低达标数量")
private Integer minStandardNum;
@ApiModelProperty("销售奖励(元/个)")
private BigDecimal rewardAmount;
@ApiModelProperty("日销量超额奖励基数")
private Integer excessStandardNum;
@ApiModelProperty("超额后额外销售奖励(元/个)")
private BigDecimal excessAmount;
@ApiModelProperty("销量")
private Integer salesVolume;
@ApiModelProperty("基础奖金")
private BigDecimal basicRewardAmount;
@ApiModelProperty("超额奖金")
private BigDecimal excessRewardAmount;
}

View File

@@ -0,0 +1,64 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 门店新品销售菜品员工详情VO
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusProductRecipeEmployeeDetailVO extends BonusBasicVO {
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("菜品名称")
private String recipeName;
@ApiModelProperty("发放月份")
private Date payDate;
@ApiModelProperty("日销量奖励最低达标数量")
private Integer minStandardNum;
@ApiModelProperty("销售奖励(元/个)")
private BigDecimal rewardAmount;
@ApiModelProperty("日销量超额奖励基数")
private Integer excessStandardNum;
@ApiModelProperty("超额后额外销售奖励(元/个)")
private BigDecimal excessAmount;
@ApiModelProperty("销量")
private Integer salesVolume;
@ApiModelProperty("基础奖金")
private BigDecimal basicRewardAmount;
@ApiModelProperty("超额奖金")
private BigDecimal excessRewardAmount;
@ApiModelProperty("奖励人id")
private String rewardUserId;
@ApiModelProperty("奖励比例")
private BigDecimal rewardRatio;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("奖金总计")
private BigDecimal amountTotal;
public BigDecimal getAmountTotal() {
return basicRewardAmount.add(excessRewardAmount);
}
}

View File

@@ -0,0 +1,49 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 门店新品销售菜品员工列表VO
* </p>
*
* @author wangff
* @since 2026/4/23
*/
@Data
public class BonusProductRecipeEmployeeListVO extends BonusBasicVO {
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("菜品名称")
private String recipeName;
@ApiModelProperty("发放月份")
private Date payDate;
@ApiModelProperty("销量")
private Integer salesVolume;
@ApiModelProperty("基础奖金")
private BigDecimal basicRewardAmount;
@ApiModelProperty("超额奖金")
private BigDecimal excessRewardAmount;
@ApiModelProperty("奖励人id")
private String rewardUserId;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
@ApiModelProperty("奖金总计")
private BigDecimal amountTotal;
public BigDecimal getAmountTotal() {
return basicRewardAmount.add(excessRewardAmount);
}
}

View File

@@ -0,0 +1,41 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 门店新品销售奖金发放列表-菜品
* </p>
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductRecipeListVO extends BonusBasicVO {
@ApiModelProperty("菜品编码")
private String recipeNo;
@ApiModelProperty("菜品名称")
private String recipeName;
@ApiModelProperty("发放月份")
private Date payDate;
@ApiModelProperty("基础奖金")
private BigDecimal basicRewardAmount;
@ApiModelProperty("超额奖金")
private BigDecimal excessRewardAmount;
@ApiModelProperty("奖金总计")
private BigDecimal amountTotal;
public BigDecimal getAmountTotal() {
return basicRewardAmount.add(excessRewardAmount);
}
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.vo.bonus;
import com.cool.store.request.bonus.BonusRuleProductConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 门店新品销售奖金详情VO
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductStoreDetailVO {
@ApiModelProperty("门店编码")
private String storeNum;
@ApiModelProperty("门店名称")
private String storeName;
@ApiModelProperty("发放年月")
private Date payDate;
@ApiModelProperty("新品销售奖金规则配置(新品销售必填)")
private List<BonusRuleProductConfig> productConfigs;
@ApiModelProperty("发放明细列表")
private List<EmployeeBonusVO> employeeList;
}

View File

@@ -0,0 +1,25 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 门店新品销售奖金发放列表VO
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusProductStoreListVO extends BonusBasicVO {
@ApiModelProperty("规则id")
private Long ruleId;
@ApiModelProperty("发放年月")
private Date payDate;
@ApiModelProperty("奖金额总计")
private BigDecimal amountTotal;
}

View File

@@ -0,0 +1,31 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 实收实算VO
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BonusReceivedComputeVO {
@ApiModelProperty("日均实收")
private BigDecimal receivedDaily;
@ApiModelProperty("奖金总计")
private BigDecimal amountTotal;
@ApiModelProperty("发放明细")
private List<BonusComputeUserVO> detail;
}

View File

@@ -0,0 +1,49 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 员工实收奖金发放列表VO
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusReceivedEmployeeListVO extends BonusBasicVO {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("门店实收id")
private Long receivedStoreId;
@ApiModelProperty("发放月份")
private Date payDate;
@ApiModelProperty("月度实收")
private BigDecimal receivedMonthly;
@ApiModelProperty("月度营业天数")
private Integer businessDays;
@ApiModelProperty("日均实收")
private BigDecimal receivedDaily;
@ApiModelProperty("上月日均实收")
private BigDecimal receivedDailyLast;
@ApiModelProperty("实收奖金额总计")
private BigDecimal amountTotal;
@ApiModelProperty("奖励比例")
private BigDecimal rewardRatio;
@ApiModelProperty("实收奖励金额")
private BigDecimal receivedAmount;
@ApiModelProperty("奖励人姓名")
private String rewardUserName;
}

View File

@@ -0,0 +1,57 @@
package com.cool.store.vo.bonus;
import com.cool.store.request.bonus.BonusRuleReceivedConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 门店实收奖金详情VO
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusReceivedStoreDetailVO {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("门店id")
private String storeId;
@ApiModelProperty("门店编码")
private String storeNum;
@ApiModelProperty("门店名称")
private String storeName;
@ApiModelProperty("发放月份")
private Date payDate;
@ApiModelProperty("月度实收")
private BigDecimal receivedMonthly;
@ApiModelProperty("月度营业天数")
private Integer businessDays;
@ApiModelProperty("日均实收小于等于该值不发放奖金(实收必填)")
private BigDecimal receivedStart;
@ApiModelProperty("实收奖励规则配置(实收必填)")
private List<BonusRuleReceivedConfig> receivedConfigs;
@ApiModelProperty("日均实收")
private BigDecimal receivedDaily;
@ApiModelProperty("上月日均实收")
private BigDecimal receivedDailyLast;
@ApiModelProperty("奖金额总计")
private BigDecimal amountTotal;
@ApiModelProperty("员工本月奖金发放列表")
private List<EmployeeBonusVO> employeeList;
}

View File

@@ -0,0 +1,38 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 门店实收奖金发放列表VO
*
* @author wangff
* @since 2026/4/22
*/
@Data
public class BonusReceivedStoreListVO extends BonusBasicVO {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("发放月份")
private Date payDate;
@ApiModelProperty("月度实收")
private BigDecimal receivedMonthly;
@ApiModelProperty("月度营业天数")
private Integer businessDays;
@ApiModelProperty("日均实收")
private BigDecimal receivedDaily;
@ApiModelProperty("上月日均实收")
private BigDecimal receivedDailyLast;
@ApiModelProperty("奖金额总计")
private BigDecimal amountTotal;
}

View File

@@ -0,0 +1,35 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 奖金发放规则列表VO
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleListVO extends BonusBasicVO {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("规则类型1-实收 2-新品销售")
private Integer type;
@ApiModelProperty("是否启用0否1是")
private Integer enable;
@ApiModelProperty("生效开始年月")
private Date startDate;
@ApiModelProperty("生效结束年月")
private Date endDate;
@ApiModelProperty("创建时间")
private Date createTime;
}

View File

@@ -0,0 +1,61 @@
package com.cool.store.vo.bonus;
import com.cool.store.request.bonus.BonusRuleDistributeConfig;
import com.cool.store.request.bonus.BonusRuleProductConfig;
import com.cool.store.request.bonus.BonusRuleReceivedConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* <p>
* 奖金发放规则VO
* </p>
*
* @author wangff
* @since 2026/4/20
*/
@Data
public class BonusRuleVO {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("规则类型1-实收 2-新品销售")
private Integer type;
@ApiModelProperty("门店id")
private String storeId;
@ApiModelProperty("门店编码")
private String storeNum;
@ApiModelProperty("门店名称")
private String storeName;
@ApiModelProperty("生效开始年月")
private Date startDate;
@ApiModelProperty("生效结束年月")
private Date endDate;
@ApiModelProperty("日均实收小于等于该值不发放奖金(实收必填)")
private BigDecimal receivedStart;
@ApiModelProperty("实收奖励规则配置(实收必填)")
private List<BonusRuleReceivedConfig> receivedConfigs;
@ApiModelProperty("新品销售奖金规则配置(新品销售必填)")
private List<BonusRuleProductConfig> productConfigs;
@ApiModelProperty("分配规则")
private List<BonusRuleDistributeConfig> distributeConfigs;
@ApiModelProperty("是否启用0否1是")
private Integer enable;
@ApiModelProperty("上月日均实收")
private BigDecimal receivedDailyLast;
}

View File

@@ -0,0 +1,33 @@
package com.cool.store.vo.bonus;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* <p>
* 门店实收员工VO
* </p>
*
* @author wangff
* @since 2026/4/22
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeBonusVO {
@ApiModelProperty("员工id")
private String rewardUserId;
@ApiModelProperty("员工名称")
private String rewardUserName;
@ApiModelProperty("奖励比例")
private BigDecimal rewardRatio;
@ApiModelProperty("金额")
private BigDecimal receivedAmount;
}