diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectFormController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectFormController.java index 39e1ebc6..e755ac2e 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectFormController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectFormController.java @@ -108,7 +108,9 @@ public class BmsSubjectFormController { public R deleteById(@PathVariable("ids") String ids){ List idsLong = StringUtils.splitIdLong(ids); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.in(BmsSubject::getFormId,idsLong); + lqw.in(BmsSubject::getFormId,idsLong) + .or() + .in(BmsSubject::getFormIdForCostApply,idsLong); if(bmsSubjectService.count(lqw)>0){ return R.error("表单被使用中,删除失败"); } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java index 9407e82f..748b3f68 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java @@ -53,6 +53,9 @@ public class BmsSubject implements Serializable { /** 行政区域:0全部可见;1-部分可见;2-全部不可见 */ private Integer bizRegionFlag; + /** 是否进场费用 */ + private Integer slottingFlag; + @TableField(exist = false) private String parName; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSubjectForm.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSubjectForm.java index d12baeea..29562384 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSubjectForm.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSubjectForm.java @@ -31,6 +31,11 @@ public class BmsSubjectForm implements Serializable { @TableId(type = IdType.AUTO) private Long id; + /** + * 类型:0->核销模板;1->费用模板 + */ + private Integer formType; + /** 标题 */ @NotBlank(message = "标题不能为空") @Length(max = 40,message = "标题长度不能超过40字") diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java new file mode 100644 index 00000000..52abc524 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java @@ -0,0 +1,75 @@ +package com.qs.serve.modules.tbs.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.StringUtils; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.tbs.entity.TbsActivitySlottingFee; +import com.qs.serve.modules.tbs.service.TbsActivitySlottingFeeService; + +import javax.validation.Valid; +import java.util.List; + +/** + * 预算 活动进场费 + * @author YenHex + * @since 2023-06-26 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("tbs/activitySlottingFee") +public class TbsActivitySlottingFeeController { + + private TbsActivitySlottingFeeService tbsActivitySlottingFeeService; + + /** + * 列表 + * @param param + * @return + */ + //@GetMapping("/list") + public R> getList(TbsActivitySlottingFee param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + PageUtil.startPage(); + List list = tbsActivitySlottingFeeService.list(lqw); + return R.ok(list); + } + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + public R> getPage(TbsActivitySlottingFee param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + PageUtil.startPage(); + List list = tbsActivitySlottingFeeService.list(lqw); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + public R getById(@PathVariable("id") String id){ + TbsActivitySlottingFee tbsActivitySlottingFee = tbsActivitySlottingFeeService.getById(id); + return R.ok(tbsActivitySlottingFee); + } + + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySlottingFee.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySlottingFee.java new file mode 100644 index 00000000..d28f79ba --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySlottingFee.java @@ -0,0 +1,181 @@ +package com.qs.serve.modules.tbs.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 活动进场费 实体类 + * @author YenHex + * @since 2023-06-26 + */ +@Data +@TableName("tbs_activity_slotting_fee") +public class TbsActivitySlottingFee implements Serializable { + + private static final long serialVersionUID = 1L; + + /** */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 费用申请id */ + @NotNull(message = "费用申请id不能为空") + private Long costApplyId; + + /** 活动id */ + @NotNull(message = "活动id不能为空") + private Long activityId; + + /** 目标类型(brand、category、series、spu、sku) */ + @NotBlank(message = "目标类型(brand、category、series、spu、sku)不能为空") + @Length(max = 30,message = "目标类型(brand、category、series、spu、sku)长度不能超过30字") + private String targetType; + + /** 目标id */ + @NotNull(message = "目标id不能为空") + private Long targetId; + + /** 目标编码 */ + @NotBlank(message = "目标编码不能为空") + @Length(max = 30,message = "目标编码长度不能超过30字") + private String targetCode; + + /** 目标名称 */ + @NotBlank(message = "目标名称不能为空") + @Length(max = 200,message = "目标名称长度不能超过200字") + private String targetName; + + /** 目标等级路径 */ + @Length(max = 600,message = "目标等级路径长度不能超过600字") + private String targetLevelPathIds; + + /** 目标等级路径 */ + @Length(max = 800,message = "目标等级路径长度不能超过800字") + private String targetLevelPathNames; + + /** 渠道id */ + @NotNull(message = "渠道id不能为空") + private Long channelId; + + /** 渠道编码 */ + @NotBlank(message = "渠道编码不能为空") + @Length(max = 50,message = "渠道编码长度不能超过50字") + private String channelCode; + + /** 渠道名称 */ + @NotBlank(message = "渠道名称不能为空") + @Length(max = 50,message = "渠道名称长度不能超过50字") + private String channelName; + + /** 网点id */ + @NotNull(message = "网点id不能为空") + private Long pointId; + + /** 网点编码 */ + @NotBlank(message = "网点编码不能为空") + @Length(max = 50,message = "网点编码长度不能超过50字") + private String pointCode; + + /** 网点名称 */ + @NotBlank(message = "网点名称不能为空") + @Length(max = 50,message = "网点名称长度不能超过50字") + private String pointName; + + /** 科目id */ + @NotNull(message = "科目id不能为空") + private Long subjectId; + + /** 科目编码 */ + @NotBlank(message = "科目编码不能为空") + @Length(max = 50,message = "科目编码长度不能超过50字") + private String subjectCode; + + /** 科目名称 */ + @NotBlank(message = "科目名称不能为空") + @Length(max = 50,message = "科目名称长度不能超过50字") + private String subjectName; + + /** + * 通过标识 + */ + private Integer passFlag; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + public static TbsActivitySlottingFee toNewObject(TbsActivitySlottingFee source){ + TbsActivitySlottingFee activitySlottingFee = new TbsActivitySlottingFee(); + activitySlottingFee.setId(source.getId()); + activitySlottingFee.setCostApplyId(source.getCostApplyId()); + activitySlottingFee.setActivityId(source.getActivityId()); + activitySlottingFee.setTargetType(source.getTargetType()); + activitySlottingFee.setTargetId(source.getTargetId()); + activitySlottingFee.setTargetCode(source.getTargetCode()); + activitySlottingFee.setTargetName(source.getTargetName()); + activitySlottingFee.setTargetLevelPathIds(source.getTargetLevelPathIds()); + activitySlottingFee.setTargetLevelPathNames(source.getTargetLevelPathNames()); + activitySlottingFee.setChannelId(source.getChannelId()); + activitySlottingFee.setChannelCode(source.getChannelCode()); + activitySlottingFee.setChannelName(source.getChannelName()); + activitySlottingFee.setPointId(source.getPointId()); + activitySlottingFee.setPointCode(source.getPointCode()); + activitySlottingFee.setPointName(source.getPointName()); + activitySlottingFee.setCreateTime(source.getCreateTime()); + activitySlottingFee.setTenantId(source.getTenantId()); + activitySlottingFee.setUpdateBy(source.getUpdateBy()); + activitySlottingFee.setCreateBy(source.getCreateBy()); + activitySlottingFee.setRemark(source.getRemark()); + activitySlottingFee.setUpdateTime(source.getUpdateTime()); + activitySlottingFee.setDelFlag(source.getDelFlag()); + activitySlottingFee.setSubjectId(source.getSubjectId()); + activitySlottingFee.setSubjectCode(source.getSubjectCode()); + activitySlottingFee.setSubjectName(source.getSubjectName()); + return activitySlottingFee; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java index 1792f19e..6a1e51d3 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java @@ -76,6 +76,9 @@ public class TbsActivitySubject implements Serializable { /** 科目表单id */ private Long subjectFormId; + /** 科目表单标题 */ + private String subjectFormTitle; + /** 科目表单内容 */ private String subjectFormContext; @@ -121,5 +124,7 @@ public class TbsActivitySubject implements Serializable { @TableField(exist = false) List activityCenterList; + @TableField(exist = false) + private Integer slottingFlag; } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java index e65a2959..60a075a0 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java @@ -49,9 +49,18 @@ public class TbsActivitySubjectBo implements Serializable { /** 成本中心列表 */ private List centerList; + /** 科目表单值 */ + private Long subjectFormId; + + /** 标题 */ + private String subjectFormTitle; + /** 科目表单值 */ private String subjectFormValue; + /** 科目表单内容 */ + private String subjectFormContext; + @Data public static class ActivityCenterBo{ diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySlottingFeeMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySlottingFeeMapper.java new file mode 100644 index 00000000..9c1bd992 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySlottingFeeMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.tbs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.tbs.entity.TbsActivitySlottingFee; + +/** + * 活动进场费 Mapper + * @author YenHex + * @date 2023-06-26 + */ +public interface TbsActivitySlottingFeeMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySlottingFeeService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySlottingFeeService.java new file mode 100644 index 00000000..7216ef3c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySlottingFeeService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.tbs.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.tbs.entity.TbsActivitySlottingFee; + +/** + * 活动进场费 服务接口 + * @author YenHex + * @date 2023-06-26 + */ +public interface TbsActivitySlottingFeeService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java index b0d196be..fc1176f8 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -57,6 +58,7 @@ public class TbsActivityServiceImpl extends ServiceImpl activityGoodsList = this.buildActGoodsList(activityBo,costApply.getId(),activity.getId()); @@ -195,7 +198,23 @@ public class TbsActivityServiceImpl extends ServiceImpl activityChannelPointList = new ArrayList<>(); + List activityChannelList = new ArrayList<>(); + this.initChannelsAndSave(activityBo,costApply,activity,activityChannelList,activityChannelPointList); + //设置进程费 + List slottingFeeList = new ArrayList<>(); + this.buildSlottingFeeList(costApply, activity, activityGoodsList, activitySubjects, activityChannelPointList, activityChannelList, slottingFeeList); + List> slottingFeeSplitList = CollUtil.split(slottingFeeList,500); + for (List activitySlottingFeeList : slottingFeeSplitList) { + activitySlottingFeeService.saveBatch(activitySlottingFeeList); + } + //渠道网点 + if(activityChannelList.size()>0){ + activityChannelService.saveBatch(activityChannelList); + } + if(activityChannelPointList.size()>0){ + activityChannelPointService.saveBatch(activityChannelPointList); + } //保存 activityGoodsService.saveBatch(activityGoodsList); activitySubjectService.saveBatch(activitySubjects); @@ -203,6 +222,68 @@ public class TbsActivityServiceImpl extends ServiceImpl activityGoodsList, List activitySubjects, List activityChannelPointList, List activityChannelList, List slottingFeeList) { + for (TbsActivitySubject activitySubject : activitySubjects) { + //判断是否进场费科目 + if(activitySubject.getSlottingFlag().equals(1)){ + if(activityChannelList.size()>0){ + List channelIds = activityChannelList.stream().map(TbsActivityChannel::getChannelId).collect(Collectors.toList()); + LambdaQueryWrapper pointLqw = new LambdaQueryWrapper<>(); + pointLqw.in(BmsChannelPoint::getChannelId,channelIds); + List pointList = channelPointService.list(pointLqw); + for (BmsChannelPoint channelPoint : pointList) { + for (TbsActivityGoods activityGoods : activityGoodsList) { + TbsActivitySlottingFee slottingFee = new TbsActivitySlottingFee(); + slottingFee.setCostApplyId(costApply.getId()); + slottingFee.setActivityId(activity.getId()); + slottingFee.setTargetType(activityGoods.getTargetType()); + slottingFee.setTargetId(activityGoods.getTargetId()); + slottingFee.setTargetCode(activityGoods.getTargetCode()); + slottingFee.setTargetName(activityGoods.getTargetName()); + slottingFee.setTargetLevelPathIds(activityGoods.getTargetLevelPathIds()); + slottingFee.setTargetLevelPathNames(activityGoods.getTargetLevelPathNames()); + slottingFee.setChannelId(channelPoint.getChannelId()); + slottingFee.setChannelCode(channelPoint.getChannelCode()); + slottingFee.setChannelName(channelPoint.getChannelName()); + slottingFee.setPointId(channelPoint.getId()); + slottingFee.setPointCode(channelPoint.getPointCode()); + slottingFee.setPointName(channelPoint.getPointName()); + slottingFee.setSubjectId(activitySubject.getSubjectId()); + slottingFee.setSubjectCode(activitySubject.getSubjectCode()); + slottingFee.setSubjectName(activitySubject.getSubjectName()); + slottingFeeList.add(slottingFee); + } + } + } + } + if(activityChannelPointList.size() > 0){ + for (TbsActivityChannelPoint channelPoint : activityChannelPointList) { + for (TbsActivityGoods activityGoods : activityGoodsList) { + TbsActivitySlottingFee slottingFee = new TbsActivitySlottingFee(); + slottingFee.setCostApplyId(costApply.getId()); + slottingFee.setActivityId(activity.getId()); + slottingFee.setTargetType(activityGoods.getTargetType()); + slottingFee.setTargetId(activityGoods.getTargetId()); + slottingFee.setTargetCode(activityGoods.getTargetCode()); + slottingFee.setTargetName(activityGoods.getTargetName()); + slottingFee.setTargetLevelPathIds(activityGoods.getTargetLevelPathIds()); + slottingFee.setTargetLevelPathNames(activityGoods.getTargetLevelPathNames()); + slottingFee.setChannelId(channelPoint.getChannelId()); + slottingFee.setChannelCode(channelPoint.getChannelCode()); + slottingFee.setChannelName(channelPoint.getChannelName()); + slottingFee.setPointId(channelPoint.getId()); + slottingFee.setPointCode(channelPoint.getPointCode()); + slottingFee.setPointName(channelPoint.getPointName()); + slottingFee.setSubjectId(activitySubject.getSubjectId()); + slottingFee.setSubjectCode(activitySubject.getSubjectCode()); + slottingFee.setSubjectName(activitySubject.getSubjectName()); + slottingFeeList.add(slottingFee); + } + } + } + } + } + /** * 更新活动数量、总金额到费用申请 * @param costApplyId @@ -223,9 +304,18 @@ public class TbsActivityServiceImpl extends ServiceImpl activityChannelList, + List activityChannelPointList){ if(CollectionUtil.isNotEmpty(activityBo.getActivityChannelList())){ - List activityChannelList = new ArrayList<>(); for (TbsActivityChannelBo activityChannelBo : activityBo.getActivityChannelList()) { BmsChannel channel = channelService.getById(activityChannelBo.getChannelId()); TbsActivityChannel activityChannel = new TbsActivityChannel(); @@ -240,9 +330,7 @@ public class TbsActivityServiceImpl extends ServiceImpl activityChannelPointList = new ArrayList<>(); for (TbsActivityChannelPointBo activityChannelPointBo : activityBo.getActivityPointList()) { BmsChannelPoint channelPoint = channelPointService.getById(activityChannelPointBo.getPointId()); BmsChannel channel = channelService.getById(channelPoint.getChannelId()); @@ -260,7 +348,6 @@ public class TbsActivityServiceImpl extends ServiceImpl implements TbsActivitySlottingFeeService { + +} +