diff --git a/src/main/java/com/qs/serve/common/util/StringUtils.java b/src/main/java/com/qs/serve/common/util/StringUtils.java index 4f5572fa..4e4552d1 100644 --- a/src/main/java/com/qs/serve/common/util/StringUtils.java +++ b/src/main/java/com/qs/serve/common/util/StringUtils.java @@ -2,6 +2,7 @@ package com.qs.serve.common.util; import lombok.experimental.UtilityClass; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -21,8 +22,10 @@ public class StringUtils extends org.springframework.util.StringUtils { /** 订单号生成(NEW) **/ private static final AtomicInteger SEQ = new AtomicInteger(1000); + private static final AtomicInteger SEQ2 = new AtomicInteger(10001); private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS"); private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai"); + public static String generateOrderNo(){ LocalDateTime dataTime = LocalDateTime.now(ZONE_ID); if(SEQ.intValue()>9990){ @@ -31,6 +34,37 @@ public class StringUtils extends org.springframework.util.StringUtils { return dataTime.format(DF_FMT_PREFIX)+SEQ.getAndIncrement(); } + public static String genShortId() { + // 2 位 年份的后两位 22001 后五位走随机 每天清一次缓存 99999 10 + StringBuilder idSb = new StringBuilder(); + /// 年份后两位 和 一年中的第几天 + LocalDate now = LocalDate.now(); + String year = now.getYear() + ""; + year = year.substring(2); + String day = now.getDayOfYear() + ""; + /// 补0 + if (day.length() < 3) { + StringBuilder sb = new StringBuilder(); + for (int i = day.length(); i < 3; i++) { + sb.append("0"); + } + day = sb.append(day).toString(); + } + idSb.append(year).append(day); + /// 后五位补随机数 + if(SEQ2.intValue()>99990){ + SEQ2.getAndSet(10000); + } + idSb.append(SEQ2.getAndIncrement()); + return idSb.toString(); + } + + public static void main(String[] args) { + for (int i = 0; i < 100; i++) { + System.out.println(genShortId()); + } + } + /** 非空 */ public static boolean isNotEmpty(String str){ return !isEmpty(str); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsCostCenterController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsCostCenterController.java index a6101e4f..5d82ed61 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsCostCenterController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsCostCenterController.java @@ -6,7 +6,12 @@ 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.CopierUtil; import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.TreeUtil; +import com.qs.serve.modules.bms.entity.bo.BmsCostCenterBo; +import com.qs.serve.modules.bms.entity.vo.BmsCostCenterTreeVo; +import com.qs.serve.modules.bms.entity.vo.BmsSubjectTreeVo; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -17,6 +22,7 @@ import com.qs.serve.modules.bms.service.BmsCostCenterService; import javax.validation.Valid; import java.util.List; +import java.util.stream.Collectors; /** * 基础档案 成本中心 @@ -24,25 +30,30 @@ import java.util.List; * @since 2022-10-13 */ @Slf4j -//@AllArgsConstructor -//@RestController -//@RequestMapping("bms/costCenter") +@AllArgsConstructor +@RestController +@RequestMapping("bms/costCenter") public class BmsCostCenterController { private BmsCostCenterService bmsCostCenterService; + /** - * 翻页查询 - * @param param + * 树查询 * @return */ - @GetMapping("/page") + @GetMapping("/tree") @PreAuthorize("hasRole('bms:costCenter:query')") - public R> getPage(BmsCostCenter param){ - PageUtil.startPage(); - LambdaQueryWrapper costCenterWrapper = new LambdaQueryWrapper<>(param); - List list = bmsCostCenterService.list(costCenterWrapper); - return R.byPageHelperList(list); + public R> getTree(){ + List list = bmsCostCenterService.list(); + List treeVoList = list.stream().map(obj->{ + BmsCostCenterTreeVo treeNode = CopierUtil.copy(obj,new BmsCostCenterTreeVo()); + treeNode.setId(obj.getId().toString()); + treeNode.setParentId(obj.getPid().toString()); + treeNode.setSort(0); + return treeNode; + }).collect(Collectors.toList()); + return R.ok(TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING)); } /** @@ -68,9 +79,21 @@ public class BmsCostCenterController { @PostMapping("/updateById") @SysLog(module = SystemModule.BASE, title = "成本中心", biz = BizType.UPDATE) @PreAuthorize("hasRole('bms:costCenter:update')") - public R updateById(@RequestBody @Valid BmsCostCenter param){ - boolean result = bmsCostCenterService.updateById(param); - return R.isTrue(result); + public R updateById(@RequestBody @Valid BmsCostCenterBo param){ + commonEdit(param); + return R.ok(); + } + + private void commonEdit(BmsCostCenterBo param){ + BmsCostCenter costCenter = CopierUtil.copy(param,new BmsCostCenter()); + if(costCenter.getPid()==null||costCenter.getPid().equals(0L)){ + costCenter.setPid(0L); + costCenter.setLevel(1); + }else { + BmsCostCenter parent = bmsCostCenterService.getById(costCenter.getPid()); + costCenter.setLevel(parent.getLevel()+1); + } + bmsCostCenterService.saveOrUpdate(costCenter); } /** @@ -81,9 +104,9 @@ public class BmsCostCenterController { @PostMapping("/save") @SysLog(module = SystemModule.BASE, title = "成本中心", biz = BizType.INSERT) @PreAuthorize("hasRole('bms:costCenter:insert')") - public R save(@RequestBody @Valid BmsCostCenter param){ - boolean result = bmsCostCenterService.save(param); - return R.isTrue(result); + public R save(@RequestBody @Valid BmsCostCenterBo param){ + commonEdit(param); + return R.ok(); } /** diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java index 13dd24cc..3679af54 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java @@ -9,6 +9,8 @@ import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.TreeUtil; +import com.qs.serve.modules.bms.entity.BmsCostCenter; +import com.qs.serve.modules.bms.entity.bo.BmsCostCenterBo; import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo; import com.qs.serve.modules.bms.entity.vo.BmsSubjectTreeVo; import lombok.AllArgsConstructor; @@ -37,7 +39,7 @@ public class BmsSubjectController { private BmsSubjectService bmsSubjectService; /** - * 翻页 + * 树查询 * @param param * @return */ @@ -78,8 +80,8 @@ public class BmsSubjectController { @SysLog(module = SystemModule.BASE, title = "科目", biz = BizType.UPDATE) @PreAuthorize("hasRole('bms:subject:update')") public R updateById(@RequestBody @Valid BmsSubject param){ - boolean result = bmsSubjectService.updateById(param); - return R.isTrue(result); + commonEdit(param); + return R.ok(); } /** @@ -91,8 +93,19 @@ public class BmsSubjectController { @SysLog(module = SystemModule.BASE, title = "科目", biz = BizType.INSERT) @PreAuthorize("hasRole('bms:subject:insert')") public R save(@RequestBody @Valid BmsSubject param){ - boolean result = bmsSubjectService.save(param); - return R.isTrue(result); + commonEdit(param); + return R.ok(); + } + + private void commonEdit(BmsSubject subject){ + if(subject.getPid()==null||subject.getPid().equals(0L)){ + subject.setPid(0L); + subject.setLevel(1); + }else { + BmsSubject parent = bmsSubjectService.getById(subject.getPid()); + subject.setLevel(parent.getLevel()+1); + } + bmsSubjectService.saveOrUpdate(subject); } /** diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java index 2e108f98..e6a3732c 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsCostCenter.java @@ -1,7 +1,9 @@ package com.qs.serve.modules.bms.entity; -import java.time.LocalDateTime; +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; @@ -17,7 +19,7 @@ import javax.validation.constraints.NotBlank; /** * 成本中心 实体类 * @author YenHex - * @since 2022-10-13 + * @since 2022-11-11 */ @Data @TableName("bms_cost_center") @@ -39,6 +41,14 @@ public class BmsCostCenter implements Serializable { @Length(max = 20,message = "名称长度不能超过20字") private String name; + /** 层级 */ + @NotNull(message = "层级不能为空") + private Integer level; + + /** 父级节点 */ + @NotNull(message = "父级节点不能为空") + private Long pid; + /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; 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 455ef21b..606b11b9 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 @@ -43,6 +43,8 @@ public class BmsSubject implements Serializable { @NotNull(message = "父级id不能为空") private Long pid; + private Integer level; + /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java new file mode 100644 index 00000000..51162773 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsCostCenterBo.java @@ -0,0 +1,44 @@ +package com.qs.serve.modules.bms.entity.bo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author YenHex + * @since 2022/11/11 + */ +@Data +public class BmsCostCenterBo { + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 编码 */ + @NotBlank(message = "编码不能为空") + @Length(max = 20,message = "编码长度不能超过20字") + private String code; + + /** 名称 */ + @NotBlank(message = "名称不能为空") + @Length(max = 20,message = "名称长度不能超过20字") + private String name; + + /** 层级 */ + @NotNull(message = "层级不能为空") + private Integer level; + + /** 父级节点 */ + @NotNull(message = "父级节点不能为空") + private Long pid; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + +} diff --git a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java new file mode 100644 index 00000000..896bfdd2 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCostCenterTreeVo.java @@ -0,0 +1,37 @@ +package com.qs.serve.modules.bms.entity.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.qs.serve.common.model.dto.TreeNode; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author YenHex + * @since 2022/11/11 + */ +@Data +public class BmsCostCenterTreeVo extends TreeNode { + + /** 科目名称 */ + @NotBlank(message = "科目名称不能为空") + @Length(max = 50,message = "科目名称长度不能超过50字") + private String subjectName; + + /** 科目编码 */ + @NotBlank(message = "科目编码不能为空") + @Length(max = 50,message = "科目编码长度不能超过50字") + private String subjectCode; + + /** 父级id */ + @NotNull(message = "父级id不能为空") + private Long pid; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index 26bc0c8b..822f8d11 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java @@ -100,20 +100,13 @@ public class TbsActivityCenterGoods implements Serializable { @Length(max = 30,message = "目标名称长度不能超过30字") private String targetName; - /** 目标父级id */ - private Long targetParentId; - - /** 目标父级编码 */ - @Length(max = 30,message = "目标父级编码长度不能超过30字") - private String targetParentCode; - - /** 目标父级名称 */ - @Length(max = 20,message = "目标父级名称长度不能超过20字") - private String targetParentName; + /** 目标等级id路径 */ + @Length(max = 600,message = "目标等级路径长度不能超过600字") + private String targetLevelPathIds; - /** 目标等级路径 */ + /** 目标等级名称路径 */ @Length(max = 600,message = "目标等级路径长度不能超过600字") - private String targetLevelPath; + private String targetLevelPathNames; /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") 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 45be3184..b1fed742 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 @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.bms.entity.*; import com.qs.serve.modules.bms.service.*; import com.qs.serve.modules.goods.entity.GoodsCategory; @@ -79,6 +80,7 @@ public class TbsActivityServiceImpl extends ServiceImpl subjectMap = new HashMap<>(); List activitySubjects = new ArrayList<>(); List activityCenterList = new ArrayList<>(); + Map centerDtoMap = new HashMap<>(); for (TbsActivitySubjectBo subjectBo : activityBo.getActivitySubjectList()) { BmsSubject subject = subjectService.getById(subjectBo.getSubjectId()); subjectMap.put(subject.getId(),subject); @@ -111,7 +114,12 @@ public class TbsActivityServiceImpl extends ServiceImpl