diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java index 983828ed..4a8bc35b 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java @@ -246,6 +246,8 @@ public class AppUserController extends ControllerBase { if (!Objects.equals(user.getState(), UserState.ToBeActivated.getState()) && Objects.nonNull(request.getEnable())) { user.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState()); } + String quotationCode = appUserService.getAppUserQuotationCode(request.getCompanyIds()); + user.setQuotationCode(quotationCode); appUserService.updateById(user); } @@ -302,6 +304,9 @@ public class AppUserController extends ControllerBase { // .in(AppUser::getId, children.stream().map(AppUser::getId).collect(Collectors.toList())) // .update(); // } + //更新报价人代码g + String quotationCode = appUserService.getAppUserQuotationCode(request.getCompanyIds()); + user.setQuotationCode(quotationCode); appUserService.updateById(user); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java index 5b8ee538..9bb4e8b7 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java @@ -47,7 +47,7 @@ public class BaseAreaController extends ControllerBase { * @return */ @PostMapping("getList") - public ApiResult> getList(@RequestBody BaseAreaQuery query){ + public ApiResult> getList(@RequestBody BaseAreaQuery query) { // return adminBaseAreaService.getList(query); } @@ -59,7 +59,7 @@ public class BaseAreaController extends ControllerBase { */ @GetMapping("getChild") @ApiMark(moduleName = "区域管理", apiName = "获取子级") - public ApiResult> getChild(@RequestParam("parentId") Integer parentId ){ + public ApiResult> getChild(@RequestParam("parentId") Integer parentId) { List result = baseAreaService.lambdaQuery().eq(TBaseArea::getParentAreaRowId, parentId).list(); return ApiResult.success(Convert.toList(TBaseAreaVO.class, result)); } @@ -70,13 +70,13 @@ public class BaseAreaController extends ControllerBase { * @return */ @PostMapping("add") - @MethodInfoMark(value = "新增" ,menuName = "区域管理") + @MethodInfoMark(value = "新增", menuName = "区域管理") @ApiMark(moduleName = "区域管理", apiName = "新增") - public ApiResult add(@Valid @RequestBody BaseAreaEditDTO baseAreaEditDTO){ + public ApiResult add(@Valid @RequestBody BaseAreaEditDTO baseAreaEditDTO) { List checkCode = baseAreaService.lambdaQuery().eq(TBaseArea::getAreaName, baseAreaEditDTO.getAreaName()).list(); VUtils.trueThrowBusinessError(CollUtil.isNotEmpty(checkCode)).throwMessage("区域名称已存在"); - Integer count = baseAreaService.getCount()+1; + Integer count = baseAreaService.getCount() + 1; TBaseArea ent = Convert.convert(TBaseArea.class, baseAreaEditDTO); ent.setId(null); ent.setDataCreateUserNo(AdminUserUtil.getUserNo()); @@ -86,6 +86,7 @@ public class BaseAreaController extends ControllerBase { // ent.setDataModifyUserName(AdminUserUtil.getUserName()); // ent.setDataModifyTime(LocalDateTime.now()); ent.setAreaCode(UniqueSequenceGenerator.generateCode(Constant.AreaCodePrefix)); + ent.setAreaQuoteCode(baseAreaEditDTO.getAreaQuoteCode()); baseAreaService.save(ent); return ApiResult.success(true); } @@ -98,8 +99,8 @@ public class BaseAreaController extends ControllerBase { @PostMapping("update") @MethodInfoMark(value = "编辑", menuName = "区域管理") @ApiMark(moduleName = "区域管理", apiName = "编辑") - public ApiResult update(@Valid @RequestBody BaseAreaEditDTO baseAreaEditDTO){ - VUtils.trueThrow(baseAreaEditDTO.getId()<=0).throwMessage(STATE.ParamErr,"编辑时ID参数不能为空"); + public ApiResult update(@Valid @RequestBody BaseAreaEditDTO baseAreaEditDTO) { + VUtils.trueThrow(baseAreaEditDTO.getId() <= 0).throwMessage(STATE.ParamErr, "编辑时ID参数不能为空"); TBaseArea oldEnt = baseAreaService.getById(baseAreaEditDTO.getId()); VUtils.trueThrowBusinessError(Objects.isNull(oldEnt)).throwMessage("区域不存在"); oldEnt.setParentAreaRowId(baseAreaEditDTO.getParentAreaRowId()); @@ -108,6 +109,7 @@ public class BaseAreaController extends ControllerBase { oldEnt.setDataModifyUserName(AdminUserUtil.getUserName()); oldEnt.setDataModifyTime(LocalDateTime.now()); oldEnt.setCategoryId(baseAreaEditDTO.getCategoryId()); + oldEnt.setAreaQuoteCode(baseAreaEditDTO.getAreaQuoteCode()); baseAreaService.updateById(oldEnt); return ApiResult.success(true); @@ -119,24 +121,24 @@ public class BaseAreaController extends ControllerBase { * @return */ @PostMapping("del") - @MethodInfoMark(value = "删除" ,menuName = "区域管理") + @MethodInfoMark(value = "删除", menuName = "区域管理") @ApiMark(moduleName = "区域管理", apiName = "删除") - public ApiResult del(@RequestBody List ids){ - VUtils.trueThrow(CollUtil.isEmpty(ids)).throwMessage(STATE.ParamErr,"请选择要删除的行"); + public ApiResult del(@RequestBody List ids) { + VUtils.trueThrow(CollUtil.isEmpty(ids)).throwMessage(STATE.ParamErr, "请选择要删除的行"); //检查下面是否有 List delNodes = baseAreaService.getBaseMapper().selectByIds(ids); - List hasChildNodes=new ArrayList<>(); - List childIds=new ArrayList<>(); - for ( TBaseArea delNode: delNodes) { + List hasChildNodes = new ArrayList<>(); + List childIds = new ArrayList<>(); + for (TBaseArea delNode : delNodes) { childIds.clear(); - adminBaseAreaService.getAllChildIds( Convert.convert(TBaseAreaVO.class,delNode) ,childIds); - if(CollUtil.isNotEmpty(childIds)){ + adminBaseAreaService.getAllChildIds(Convert.convert(TBaseAreaVO.class, delNode), childIds); + if (CollUtil.isNotEmpty(childIds)) { hasChildNodes.add(delNode.getAreaName()); } } - if(CollUtil.isNotEmpty(hasChildNodes)){ - throw new NflgException(STATE.ParamErr,StrUtil.join(",", hasChildNodes)+" 存在子级区域,请先删除子级"); + if (CollUtil.isNotEmpty(hasChildNodes)) { + throw new NflgException(STATE.ParamErr, StrUtil.join(",", hasChildNodes) + " 存在子级区域,请先删除子级"); } baseAreaService.getBaseMapper().deleteByIds(ids); @@ -152,10 +154,10 @@ public class BaseAreaController extends ControllerBase { * @return */ @PostMapping("enable") - @MethodInfoMark(value = "启用" ,menuName = "区域管理") + @MethodInfoMark(value = "启用", menuName = "区域管理") @ApiMark(moduleName = "区域管理", apiName = "启用") - public ApiResult enable(@RequestBody List ids){ - VUtils.trueThrow(CollUtil.isEmpty(ids)).throwMessage(STATE.ParamErr,"请选择要启用的行"); + public ApiResult enable(@RequestBody List ids) { + VUtils.trueThrow(CollUtil.isEmpty(ids)).throwMessage(STATE.ParamErr, "请选择要启用的行"); baseAreaService.upState(1, ids, AdminUserUtil.getUserNo(), AdminUserUtil.getUserName()); return ApiResult.success(true); @@ -168,15 +170,15 @@ public class BaseAreaController extends ControllerBase { * @return */ @PostMapping("disable") - @MethodInfoMark(value = "禁用" ,menuName = "区域管理") + @MethodInfoMark(value = "禁用", menuName = "区域管理") @ApiMark(moduleName = "区域管理", apiName = "禁用") - public ApiResult disable(@RequestBody List ids){ - VUtils.trueThrow(CollUtil.isEmpty(ids)).throwMessage(STATE.ParamErr,"请选择要禁用的行"); + public ApiResult disable(@RequestBody List ids) { + VUtils.trueThrow(CollUtil.isEmpty(ids)).throwMessage(STATE.ParamErr, "请选择要禁用的行"); List tBaseAreas = baseAreaService.getBaseMapper().selectByIds(ids); - List allIds=new ArrayList<>(); + List allIds = new ArrayList<>(); allIds.addAll(ids); - for (TBaseArea baseArea :tBaseAreas) { - adminBaseAreaService.getAllChildIds(Convert.convert(TBaseAreaVO.class,baseArea) , allIds); + for (TBaseArea baseArea : tBaseAreas) { + adminBaseAreaService.getAllChildIds(Convert.convert(TBaseAreaVO.class, baseArea), allIds); } baseAreaService.upState(0, allIds, AdminUserUtil.getUserNo(), AdminUserUtil.getUserName()); diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/BaseAreaEditDTO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/BaseAreaEditDTO.java index adbf6938..04f4d1e7 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/BaseAreaEditDTO.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/BaseAreaEditDTO.java @@ -11,10 +11,10 @@ import javax.validation.constraints.NotNull; @Data public class BaseAreaEditDTO { - private Integer id=0; + private Integer id = 0; - private Integer parentAreaRowId=0; + private Integer parentAreaRowId = 0; @NotBlank(message = "区域名称不能为空") private String areaName; @@ -24,4 +24,7 @@ public class BaseAreaEditDTO { */ @NotNull(message = "类别不能为空") private Long categoryId; + + @NotBlank(message = "区域报价编码不能为空") + private String areaQuoteCode; } diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java index d47c2afb..c4b3206a 100644 --- a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java +++ b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java @@ -74,6 +74,7 @@ public class AdminController extends ControllerBase { .setExtra("departmentName", Objects.isNull(department) ? null : department.getDeptName()) .setExtra("categoryId", user.getCategoryId()) .setExtra("categoryName", Objects.isNull(user.getCategoryId()) ? "" : dictionaryItemService.getById(user.getCategoryId()).getName()) + .setExtra("quotationCode", user.getQuotationCode()) .setExtra("roles", roleCodes.stream().map(RoleVO::getCode).collect(Collectors.toList())) .setExtra("language", Constant.DEFAULT_LANGUAGE_CODE + "-中文") ); diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/EditQuotationDiscountRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/EditQuotationDiscountRequest.java new file mode 100644 index 00000000..9d2921eb --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/EditQuotationDiscountRequest.java @@ -0,0 +1,55 @@ +package com.nflg.mobilebroken.common.pojo.request; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Accessors(chain = true) +public class EditQuotationDiscountRequest { + + /** + * 流水号 + */ + private Integer id; + + /** + * 机型编号 + */ + private Integer modelId; + + /** + * 国内折扣 + */ + private BigDecimal domesticDiscountRate; + + /** + * 国内折扣开始时间 + */ + private LocalDateTime domesticBeginTime; + + /** + * 国内折扣结束时间 + */ + private LocalDateTime domesticEndTime; + + /** + * 国内折扣率 + */ + private BigDecimal overseasDiscountRate; + + /** + * 国外折扣开始时间 + */ + private LocalDateTime overseasBeginTime; + + /** + * 国外折扣结束时间 + */ + private LocalDateTime overseasEndTime; + +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java index 1dedc6ef..fe1e2803 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java @@ -67,6 +67,8 @@ public class AdminUserVO { //微信openid private String openId; + //报价代码 + private String quotationCode; /** * 产品线,多个用逗号分隔 */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/QuotationDiscountVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/QuotationDiscountVO.java new file mode 100644 index 00000000..2328162a --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/QuotationDiscountVO.java @@ -0,0 +1,68 @@ +package com.nflg.mobilebroken.common.pojo.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Accessors(chain = true) +public class QuotationDiscountVO { + + private Integer id; + + /** + * 机型编号 + */ + @NotNull + private Integer modelId; + + /** + * 国内折扣 + */ + @NotNull + private BigDecimal domesticDiscountRate; + + /** + * 国内折扣开始时间 + */ + @NotNull + private LocalDateTime domesticBeginTime; + + /** + * 国内折扣结束时间 + */ + @NotNull + private LocalDateTime domesticEndTime; + + /** + * 折扣天数 + */ + @NotNull + private Integer domesticDiscountDay; + + /** + * 国内折扣率 + */ + @NotNull + private BigDecimal overseasDiscountRate; + + /** + * 国外折扣开始时间 + */ + @NotNull + private LocalDateTime overseasBeginTime; + + /** + * 国外折扣结束时间 + */ + @NotNull + private LocalDateTime overseasEndTime; + + +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java index 51974518..1bbf8803 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java @@ -94,6 +94,10 @@ public class TBaseAreaVO implements Serializable { */ private List children; + /** + * 报价区域代码 + */ + private String areaQuoteCode; @Override public boolean equals(Object o) { diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/annotation/ApiMark.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/annotation/ApiMark.java new file mode 100644 index 00000000..5a78ac07 --- /dev/null +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/annotation/ApiMark.java @@ -0,0 +1,19 @@ +package com.nflg.mobilebroken.quotation.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface ApiMark { + + String apiName() default ""; + + String moduleName() default ""; + + String code() default ""; + + boolean isPublic() default false; +} diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/QuotationModelDiscountController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/QuotationModelDiscountController.java new file mode 100644 index 00000000..59a94a09 --- /dev/null +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/QuotationModelDiscountController.java @@ -0,0 +1,82 @@ +package com.nflg.mobilebroken.quotation.controller; + +import com.nflg.mobilebroken.common.pojo.ApiResult; +import com.nflg.mobilebroken.common.pojo.request.EditQuotationDiscountRequest; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentSimpleVO; +import com.nflg.mobilebroken.common.pojo.vo.QuotationDiscountVO; +import com.nflg.mobilebroken.common.util.AdminUserUtil; +import com.nflg.mobilebroken.quotation.annotation.ApiMark; +import com.nflg.mobilebroken.repository.entity.QuotationModelDiscount; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/discount") +@Slf4j +public class QuotationModelDiscountController extends ControllerBase { + @PostMapping("save") + @ApiMark(moduleName = "折扣管理", apiName = "保存设备的折扣信息") + public ApiResult getSimpleDepartments(List requests) { + List addDatas = requests.stream() + .filter(request -> Objects.isNull(request.getId())) + .map(request -> { + return new QuotationModelDiscount() + .setModelId(request.getModelId()) + .setDomesticDiscountRate(request.getDomesticDiscountRate()) + .setDomesticBeginTime(request.getDomesticBeginTime()) + .setDomesticEndTime(request.getDomesticEndTime()) + .setDomesticDiscountDay(Math.toIntExact(ChronoUnit.DAYS.between(request.getDomesticBeginTime(), request.getDomesticEndTime()))) + .setOverseasBeginTime(request.getOverseasBeginTime()) + .setOverseasEndTime(request.getOverseasEndTime()) + .setOverseasDiscountRate(request.getOverseasDiscountRate()) + .setOverseasDiscountDay(Math.toIntExact(ChronoUnit.DAYS.between(request.getOverseasBeginTime(), request.getOverseasEndTime()))) + .setCreateById(AdminUserUtil.getUserId()) + .setCreateBy(AdminUserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); + }).collect(Collectors.toList()); + + List editDatas = requests.stream() + .filter(request -> Objects.nonNull(request.getId())) + .map(request -> { + return new QuotationModelDiscount() + .setId(request.getId()) + .setModelId(request.getModelId()) + .setDomesticDiscountRate(request.getDomesticDiscountRate()) + .setDomesticBeginTime(request.getDomesticBeginTime()) + .setDomesticEndTime(request.getDomesticEndTime()) + .setDomesticDiscountDay(Math.toIntExact(ChronoUnit.DAYS.between(request.getDomesticBeginTime(), request.getDomesticEndTime()))) + .setOverseasBeginTime(request.getOverseasBeginTime()) + .setOverseasEndTime(request.getOverseasEndTime()) + .setOverseasDiscountRate(request.getOverseasDiscountRate()) + .setOverseasDiscountDay(Math.toIntExact(ChronoUnit.DAYS.between(request.getOverseasBeginTime(), request.getOverseasEndTime()))) + .setUpdateById(AdminUserUtil.getUserId()) + .setUpdateBy(AdminUserUtil.getUserName()) + .setUpdateTime(LocalDateTime.now()); + }).collect(Collectors.toList()); + +// List datas = requests.stream() +// .map(request -> { +// QuotationModelDiscount discount = new QuotationModelDiscount(); +// discount.setModelId(request.getId()); +// discount.setDomesticDiscountRate(request.getDomesticDiscountRate()); +// discount.setDomesticBeginTime(request.getDomesticBeginTime()); +// discount.setDomesticEndTime(request.getDomesticEndTime()); +// discount.setDomesticDiscountDay(request.getDomesticDiscountDay()); +// }) + return ApiResult.success(departmentService.getSimpleDepartments()); + } + //分页 + //保存 + //导入 + //导出 + //设置折扣人信息 + //查询折扣人信息 +} diff --git a/nflg-mobilebroken-repository/pom.xml b/nflg-mobilebroken-repository/pom.xml index a4410904..10160d6b 100644 --- a/nflg-mobilebroken-repository/pom.xml +++ b/nflg-mobilebroken-repository/pom.xml @@ -25,6 +25,10 @@ freemarker test + + org.springframework.retry + spring-retry + com.baomidou mybatis-plus-boot-starter diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminBaseSerialNumber.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminBaseSerialNumber.java new file mode 100644 index 00000000..954e6140 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminBaseSerialNumber.java @@ -0,0 +1,59 @@ +package com.nflg.mobilebroken.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("admin_base_serial_number") +public class AdminBaseSerialNumber implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 0 管理端的报价人编号;1 代理商的报价人单号 + */ + private Integer businessType; + + /** + * 当前时间 YYYYMMDD + */ + private String currentDateStr; + + /** + * 当前最大流水号 + */ + private Integer maxSerial; + + /** + * 乐观锁版本号 + */ + private Integer version; + + /** + * 前缀 + */ + private String businessPrefixNumber; + + /** + * 流水号的长度 + */ + private Integer serialLength; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUser.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUser.java index dd17a917..5e497db9 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUser.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUser.java @@ -137,4 +137,10 @@ public class AdminUser implements Serializable { * 直销类别(国内、国外),字典id */ private Long categoryId; + + /** + * 报价人代码 + */ + private String quotationCode; + } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java index aa0ec664..ca075134 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java @@ -157,6 +157,11 @@ public class AppUser implements Serializable { // @TableField("region_type_id") // private Integer regionTypeId; + /** + * 报价人代码 + */ + private String quotationCode; + /** * 部门id */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscount.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscount.java index 6d75e5f1..cb8140b1 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscount.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscount.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; import lombok.Getter; import lombok.Setter; diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscountItem.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscountItem.java new file mode 100644 index 00000000..aecbd24f --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscountItem.java @@ -0,0 +1,63 @@ +package com.nflg.mobilebroken.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("quotation_model_discount_item") +public class QuotationModelDiscountItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 折扣ID + */ + private Integer discountId; + + /** + * 用户ID + */ + private Integer userId; + + /** + * 用户类型 0 内部用户;1 代理商用户 + */ + private Integer userType; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 新增人编号 + */ + private Integer createById; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseArea.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseArea.java index 84721c8b..1a1961cb 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseArea.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseArea.java @@ -47,7 +47,7 @@ public class TBaseArea implements Serializable { private String areaName; /** - * 状态 + * 状态 0-禁用 1-启用 */ private Byte areaState; @@ -90,4 +90,9 @@ public class TBaseArea implements Serializable { * 类别(国内、国外),字典id */ private Long categoryId; + + /** + * 报价区域代码 + */ + private String areaQuoteCode; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminBaseSerialNumberMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminBaseSerialNumberMapper.java new file mode 100644 index 00000000..93f41782 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminBaseSerialNumberMapper.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.mapper; + +import com.nflg.mobilebroken.repository.entity.AdminBaseSerialNumber; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface AdminBaseSerialNumberMapper extends BaseMapper { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationModelDiscountItemMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationModelDiscountItemMapper.java new file mode 100644 index 00000000..583a0d3f --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationModelDiscountItemMapper.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.mapper; + +import com.nflg.mobilebroken.repository.entity.QuotationModelDiscountItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface QuotationModelDiscountItemMapper extends BaseMapper { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminBaseSerialNumberService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminBaseSerialNumberService.java new file mode 100644 index 00000000..d9fb8758 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminBaseSerialNumberService.java @@ -0,0 +1,27 @@ +package com.nflg.mobilebroken.repository.service; + +import com.nflg.mobilebroken.repository.entity.AdminBaseSerialNumber; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface IAdminBaseSerialNumberService extends IService { + + /** + * 生成流水号 + * @param businessType 业务类型 + * @param prefixNumber 前缀 + * @param specialNumber 特殊编号 + * @param hasTimeStr 是否包含时间 + * @param serialLength 流水号长度 + * @return 流水号 + */ + String generateSerialNumber(Integer businessType, String prefixNumber, String specialNumber, + boolean hasTimeStr, Integer serialLength); +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java index b3ce1c96..95e02825 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java @@ -22,7 +22,15 @@ import java.util.List; */ public interface IAppUserService extends IService { - AppUser getUser(String userName,String password); + /** + * 获取用户报价码 + * + * @param companyId 公司id + * @return 报价码 + */ + String getAppUserQuotationCode(List companyId); + + AppUser getUser(String userName, String password); void disable(Integer id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationModelDiscountItemService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationModelDiscountItemService.java new file mode 100644 index 00000000..89045269 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationModelDiscountItemService.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.service; + +import com.nflg.mobilebroken.repository.entity.QuotationModelDiscountItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface IQuotationModelDiscountItemService extends IService { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminBaseSerialNumberServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminBaseSerialNumberServiceImpl.java new file mode 100644 index 00000000..17da2696 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminBaseSerialNumberServiceImpl.java @@ -0,0 +1,71 @@ +package com.nflg.mobilebroken.repository.service.impl; + +import com.nflg.mobilebroken.repository.entity.AdminBaseSerialNumber; +import com.nflg.mobilebroken.repository.mapper.AdminBaseSerialNumberMapper; +import com.nflg.mobilebroken.repository.service.IAdminBaseSerialNumberService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.retry.annotation.Backoff; +import org.springframework.retry.annotation.Retryable; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Objects; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Service +public class AdminBaseSerialNumberServiceImpl extends ServiceImpl implements IAdminBaseSerialNumberService { + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); + //private static final int MAX_RETRY = 5; // 最大重试次数 + + @Retryable( + maxAttempts = 5, // 最大重试次数(包括第一次调用) + backoff = @Backoff(delay = 1000) // 重试间隔1秒 + ) + + @Override + public String generateSerialNumber(Integer businessType, String prefixNumber, String specialNumber, + boolean hasTimeStr, Integer serialLength) { + String currentDate = ""; + String serialNo ; + AdminBaseSerialNumber serialNumber = this.lambdaQuery() + .eq(AdminBaseSerialNumber::getBusinessType, businessType) + .one(); + if (hasTimeStr) { + currentDate = LocalDate.now().format(DATE_FORMATTER); + } + + if (Objects.isNull(serialNumber)) { + // 插入数据库 + AdminBaseSerialNumber newModel = new AdminBaseSerialNumber() + .setBusinessType(businessType) + .setCurrentDateStr(currentDate) + .setMaxSerial(1) + .setBusinessPrefixNumber(prefixNumber) + .setSerialLength(serialLength); + this.save(newModel); + serialNo = prefixNumber + specialNumber + currentDate + String.format("%0" + serialLength + "d", 1); + } else { +// 判断是否有时间 + int startSerial = 1; + if (hasTimeStr) { + if (serialNumber.getCurrentDateStr().equals(currentDate)) { + startSerial = serialNumber.getMaxSerial() + 1; + } + } + serialNumber.setSerialLength(serialLength); + serialNumber.setMaxSerial(startSerial); + serialNumber.setCurrentDateStr(currentDate); + this.updateById(serialNumber); + serialNo = prefixNumber + specialNumber + currentDate + String.format("%0" + serialLength + "d", startSerial); + } + return serialNo; + } +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index e8b828c0..71c29760 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -70,6 +70,10 @@ public class AdminUserServiceImpl extends ServiceImpl rmaps.contains(r.getId())) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java index 7c4635ec..57786b36 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java @@ -22,13 +22,11 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.ttzero.excel.util.StringUtil; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -114,7 +112,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl areas=customerService.getAreas(Arrays.stream(appUser.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); + Collection areas = customerService.getAreas(Arrays.stream(appUser.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); vo.setUser(new AppUserVO() - .setAreaName(StrUtil.join(",",areas)) + .setAreaName(StrUtil.join(",", areas)) .setSalesUserName(appUser.getSalesUserName()) .setState(1) .setTitle(Objects.isNull(appUser.getTitleId()) ? "" : positionService.getById(appUser.getTitleId()).getPositionName()) @@ -205,6 +203,9 @@ public class AppUserApplyforServiceImpl extends ServiceImpl companyIds = new ArrayList<>(); + companyIds.add(applyfor.getCompanyId()); + String quoationCode = appUserService.getAppUserQuotationCode(companyIds); AppUser user = new AppUser() .setLoginName(applyfor.getUserEmail()) .setName(applyfor.getUserName()) @@ -225,6 +226,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl companyIds = Arrays.stream(appUser.getCompanyId().split(",")) + .map(Integer::parseInt) + .collect(Collectors.toSet()); + String quoationCode = appUserService.getAppUserQuotationCode(new ArrayList<>(companyIds)); + appUser.setQuotationCode(quoationCode); + } appUser.setState(UserState.Activated.getState()) .setUpdateBy(applyUser.getName()) .setUpdateTime(LocalDateTime.now()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java index d472fa5c..197b3b15 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java @@ -1,6 +1,7 @@ package com.nflg.mobilebroken.repository.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -30,6 +31,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.chrono.ChronoLocalDate; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -77,6 +79,101 @@ public class AppUserServiceImpl extends ServiceImpl impl @Resource private IDictionaryItemService dictionaryItemService; + @Resource + private IAdminBaseSerialNumberService adminBaseSerialNumberService; + + @Override + public String getAppUserQuotationCode(List companyId) { + if (CollectionUtil.isEmpty(companyId)) + return ""; + // 根据公司ID查询公司的区域信息 + List customers = customerService.lambdaQuery() + .in(TBaseCustomer::getId, companyId) + .eq(TBaseCustomer::getQuotationUse, true) + .list(); + if (CollectionUtil.isEmpty(customers)) { + return ""; + } + + // 获取到公司的区域代码 + List areaCodes = customers.stream() + .map(TBaseCustomer::getAreaCode) + .collect(Collectors.toList()); + Set uniqueAreaCodes = areaCodes.stream() + .filter(StrUtil::isNotBlank) + .flatMap(code -> Arrays.stream(code.split(","))) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + VUtils.trueThrowBusinessError(CollectionUtil.isEmpty(uniqueAreaCodes)).throwMessage("存在未维护区域信息的代理公司,请先维护区域信息"); + String specialCode = ""; + List areas = adminAreaService.lambdaQuery() + .in(TBaseArea::getAreaCode, uniqueAreaCodes) + .list(); + VUtils.trueThrowBusinessError(CollectionUtil.isEmpty(areas)).throwMessage("代理公司的区域信息维护有误,请先维护区域信息"); +// for (TBaseArea area : areas) { +// VUtils.trueThrowBusinessError(StrUtil.isBlank(area.getAreaQuoteCode())).throwMessage("区域报价代码没有维护,请先维护"); +// specialCode += "-" + area.getAreaQuoteCode(); +// } + // 如果是只有一个公司或区域,就返回区域报价代码 + if (areas.size() == 1) { + VUtils.trueThrowBusinessError(StrUtil.isBlank(areas.get(0).getAreaQuoteCode())).throwMessage("区域报价代码没有维护,请先维护"); + specialCode = areas.get(0).getAreaQuoteCode(); + } + // 如果存在多个公司或区域,需要查询上级 + Set parentIds = areas.stream() + .map(TBaseArea::getParentAreaRowId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + List parentAreas = adminAreaService.lambdaQuery() + .in(TBaseArea::getId, parentIds) + .list(); + // 如果只有一个上级,就返回上级报价代码 + if (parentAreas.size() == 1) { + VUtils.trueThrowBusinessError(StrUtil.isBlank(parentAreas.get(0).getAreaQuoteCode())).throwMessage("区域报价代码没有维护,请先维护"); + specialCode = parentAreas.get(0).getAreaQuoteCode(); + } else { + // 多个上级,区别处理,合并相同上级的,单独列出一个上级的 + Map parentCountMap = areas.stream() + .map(TBaseArea::getParentAreaRowId) + .filter(Objects::nonNull) + .collect(Collectors.groupingBy( + Function.identity(), + Collectors.counting() + )); + Set parentIds2 = parentCountMap.entrySet().stream() + .filter(entry -> entry.getValue() > 2) // 出现次数大于2 + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + + for (Integer parentId : parentIds2) { + TBaseArea parentArea = parentAreas.stream() + .filter(area -> area.getId().equals(parentId)) + .findFirst() + .orElse(null); + VUtils.trueThrowBusinessError(ObjectUtil.isNull(parentArea) || StrUtil.isBlank(parentArea.getAreaQuoteCode())).throwMessage("区域报价代码没有维护,请先维护"); + specialCode += "-" + parentArea.getAreaQuoteCode(); + } + + Set parentIds1 = parentCountMap.entrySet().stream() + .filter(entry -> entry.getValue() == 1) // 出现次数=1 + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + + List parentAreas1 = areas.stream() + .filter(area -> parentIds1.contains(area.getParentAreaRowId())) + .collect(Collectors.toList()); + + for (TBaseArea baseArea : parentAreas1) { + VUtils.trueThrowBusinessError(StrUtil.isBlank(baseArea.getAreaQuoteCode())).throwMessage("区域报价代码没有维护,请先维护"); + specialCode += "-" + baseArea.getAreaQuoteCode(); + } + } + + String code = adminBaseSerialNumberService.generateSerialNumber(1, "", specialCode, false, 6); + return code; + } + + @Override public AppUser getUser(String userName, String password) { AppUser user = lambdaQuery() @@ -163,6 +260,8 @@ public class AppUserServiceImpl extends ServiceImpl impl } String encodePassword = PASSWORDENCODER.encode(request.getPassword()); AppUser user = lambdaQuery().eq(AppUser::getLoginName, request.getLoginName()).one(); + String quotationCode = getAppUserQuotationCode(request.getCompanyIds()); + if (Objects.nonNull(user)) { VUtils.trueThrowBusinessError(!user.getIsDel()).throwMessage("登录名已存在"); user.setIsDel(false) @@ -181,9 +280,11 @@ public class AppUserServiceImpl extends ServiceImpl impl .setDepartmentId(request.getDepartmentId()) // .setRegionTypeId(request.getRegionTypeId()) .setState(UserState.ToBeActivated.getState()) + .setQuotationCode(quotationCode) .setExpireTime(LocalDate.of(LocalDateTime.now().getYear() + 1, 1, 1)); updateById(user); } else { + // String quotationCode = adminBaseSerialNumberService.generateSerialNumber(1, "A", "", false, 6); user = new AppUser() .setLoginName(request.getLoginName()) .setName(request.getUserName()) @@ -200,6 +301,7 @@ public class AppUserServiceImpl extends ServiceImpl impl // .setRegionTypeId(request.getRegionTypeId()) .setCreateBy(AdminUserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) + .setQuotationCode(quotationCode) .setState(UserState.ToBeActivated.getState()) .setExpireTime(LocalDate.of(LocalDateTime.now().getYear() + 1, 1, 1)); save(user); @@ -445,16 +547,32 @@ public class AppUserServiceImpl extends ServiceImpl impl public void migrate(MigrateAppUserRequest request) { AppUser appUser = getPrimaryByCompanyId(request.getCompanyId().toString()); VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("该公司还未设置主账号"); - lambdaUpdate() - .set(AppUser::getCompanyId, request.getCompanyId()) - .set(AppUser::getExpireTime, appUser.getExpireTime()) -// .set(AppUser::getUpdateBy, AdminUserUtil.getUserId()) - .set(AppUser::getAreaId, null) - .set(AppUser::getUpdateTime, LocalDateTime.now()) - .eq(AppUser::getIsDel, false) - .eq(AppUser::getIsPrimary, false) - .in(AppUser::getId, request.getUserIds()) - .update(); + List companyIds = new ArrayList<>(); + companyIds.add(request.getCompanyId()); + + for (Integer userId : request.getUserIds()) { + String quotaionCode = getAppUserQuotationCode(companyIds); + lambdaUpdate() + .set(AppUser::getQuotationCode, quotaionCode) + .set(AppUser::getCompanyId, request.getCompanyId()) + .set(AppUser::getExpireTime, appUser.getExpireTime()) + .set(AppUser::getAreaId, null) + .set(AppUser::getUpdateTime, LocalDateTime.now()) + .eq(AppUser::getIsDel, false) + .eq(AppUser::getIsPrimary, false) + .eq(AppUser::getId, userId) + .update(); + } +// lambdaUpdate() +// .set(AppUser::getCompanyId, request.getCompanyId()) +// .set(AppUser::getExpireTime, appUser.getExpireTime()) +//// .set(AppUser::getUpdateBy, AdminUserUtil.getUserId()) +// .set(AppUser::getAreaId, null) +// .set(AppUser::getUpdateTime, LocalDateTime.now()) +// .eq(AppUser::getIsDel, false) +// .eq(AppUser::getIsPrimary, false) +// .in(AppUser::getId, request.getUserIds()) +// .update(); } @Override @@ -627,13 +745,27 @@ public class AppUserServiceImpl extends ServiceImpl impl @Override public void enable(EnableAppUserRequest request) { if (request.getEnable()) { - lambdaUpdate() - .set(AppUser::getState, UserState.Activated.getState()) - .set(AppUser::getUpdateBy, AdminUserUtil.getUserName()) - .set(AppUser::getUpdateTime, LocalDateTime.now()) - .eq(AppUser::getIsDel, false) - .in(AppUser::getId, request.getIds()) - .update(); + for (Integer id : request.getIds()) { + AppUser appUser = getById(id); + List companyIds = Arrays.stream(appUser.getCompanyId().split(",")).filter(StrUtil::isNotBlank).map(Integer::valueOf).collect(Collectors.toList()); + String quoationCode = getAppUserQuotationCode(companyIds); + lambdaUpdate() + .set(AppUser::getQuotationCode, quoationCode) + .set(AppUser::getState, UserState.Activated.getState()) + .set(AppUser::getUpdateBy, AdminUserUtil.getUserId()) + .set(AppUser::getUpdateTime, LocalDateTime.now()) + .eq(AppUser::getIsDel, false) + .eq(AppUser::getId, id) + .update(); + } + +// lambdaUpdate() +// .set(AppUser::getState, UserState.Activated.getState()) +// .set(AppUser::getUpdateBy, AdminUserUtil.getUserId()) +// .set(AppUser::getUpdateTime, LocalDateTime.now()) +// .eq(AppUser::getIsDel, false) +// .in(AppUser::getId, request.getIds()) +// .update(); } else { lambdaUpdate() .set(AppUser::getState, UserState.Disabled.getState()) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationModelDiscountItemServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationModelDiscountItemServiceImpl.java new file mode 100644 index 00000000..2d76f726 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationModelDiscountItemServiceImpl.java @@ -0,0 +1,20 @@ +package com.nflg.mobilebroken.repository.service.impl; + +import com.nflg.mobilebroken.repository.entity.QuotationModelDiscountItem; +import com.nflg.mobilebroken.repository.mapper.QuotationModelDiscountItemMapper; +import com.nflg.mobilebroken.repository.service.IQuotationModelDiscountItemService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Service +public class QuotationModelDiscountItemServiceImpl extends ServiceImpl implements IQuotationModelDiscountItemService { + +} diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AdminBaseSerialNumberMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AdminBaseSerialNumberMapper.xml new file mode 100644 index 00000000..c4699c1b --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AdminBaseSerialNumberMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelDiscountItemMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelDiscountItemMapper.xml new file mode 100644 index 00000000..e4752d5d --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelDiscountItemMapper.xml @@ -0,0 +1,5 @@ + + + + +