Merge branch 'feature/quotation-zhangke' into feature/quotation
# Conflicts: # nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java # nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java # nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/BaseAreaEditDTO.java # nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java # nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/ControllerBase.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUser.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelDiscount.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationModelForbid.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseArea.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationModelDiscountMapper.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationModelForbidMapper.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationModelDiscountService.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationModelForbidService.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationModelDiscountServiceImpl.java # nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationModelForbidServiceImpl.java # nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelDiscountMapper.xml # nflg-mobilebroken-repository/src/main/resources/mapper/QuotationModelForbidMapper.xml # nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGeneratorTest.java
This commit is contained in:
commit
f36520de03
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,4 +24,7 @@ public class BaseAreaEditDTO {
|
|||
*/
|
||||
@NotNull(message = "类别不能为空")
|
||||
private Long categoryId;
|
||||
|
||||
@NotBlank(message = "区域报价编码不能为空")
|
||||
private String areaQuoteCode;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 + "-中文")
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -67,6 +67,8 @@ public class AdminUserVO {
|
|||
//微信openid
|
||||
private String openId;
|
||||
|
||||
//报价代码
|
||||
private String quotationCode;
|
||||
/**
|
||||
* 产品线,多个用逗号分隔
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -94,6 +94,10 @@ public class TBaseAreaVO implements Serializable {
|
|||
*/
|
||||
private List<TBaseAreaVO> children;
|
||||
|
||||
/**
|
||||
* 报价区域代码
|
||||
*/
|
||||
private String areaQuoteCode;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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<Void> getSimpleDepartments(List<EditQuotationDiscountRequest> requests) {
|
||||
List<QuotationModelDiscount> 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<QuotationModelDiscount> 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<QuotationModelDiscount> 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());
|
||||
}
|
||||
//分页
|
||||
//保存
|
||||
//导入
|
||||
//导出
|
||||
//设置折扣人信息
|
||||
//查询折扣人信息
|
||||
}
|
||||
|
|
@ -25,6 +25,10 @@
|
|||
<artifactId>freemarker</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.retry</groupId>
|
||||
<artifactId>spring-retry</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @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;
|
||||
}
|
||||
|
|
@ -137,4 +137,10 @@ public class AdminUser implements Serializable {
|
|||
* 直销类别(国内、国外),字典id
|
||||
*/
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 报价人代码
|
||||
*/
|
||||
private String quotationCode;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,6 +157,11 @@ public class AppUser implements Serializable {
|
|||
// @TableField("region_type_id")
|
||||
// private Integer regionTypeId;
|
||||
|
||||
/**
|
||||
* 报价人代码
|
||||
*/
|
||||
private String quotationCode;
|
||||
|
||||
/**
|
||||
* 部门id
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.nflg.mobilebroken.repository.mapper;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.AdminBaseSerialNumber;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 代码生成器生成
|
||||
* @since 2026
|
||||
*/
|
||||
public interface AdminBaseSerialNumberMapper extends BaseMapper<AdminBaseSerialNumber> {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.nflg.mobilebroken.repository.mapper;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.QuotationModelDiscountItem;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 代码生成器生成
|
||||
* @since 2026
|
||||
*/
|
||||
public interface QuotationModelDiscountItemMapper extends BaseMapper<QuotationModelDiscountItem> {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.AdminBaseSerialNumber;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 代码生成器生成
|
||||
* @since 2026
|
||||
*/
|
||||
public interface IAdminBaseSerialNumberService extends IService<AdminBaseSerialNumber> {
|
||||
|
||||
/**
|
||||
* 生成流水号
|
||||
* @param businessType 业务类型
|
||||
* @param prefixNumber 前缀
|
||||
* @param specialNumber 特殊编号
|
||||
* @param hasTimeStr 是否包含时间
|
||||
* @param serialLength 流水号长度
|
||||
* @return 流水号
|
||||
*/
|
||||
String generateSerialNumber(Integer businessType, String prefixNumber, String specialNumber,
|
||||
boolean hasTimeStr, Integer serialLength);
|
||||
}
|
||||
|
|
@ -22,6 +22,14 @@ import java.util.List;
|
|||
*/
|
||||
public interface IAppUserService extends IService<AppUser> {
|
||||
|
||||
/**
|
||||
* 获取用户报价码
|
||||
*
|
||||
* @param companyId 公司id
|
||||
* @return 报价码
|
||||
*/
|
||||
String getAppUserQuotationCode(List<Integer> companyId);
|
||||
|
||||
AppUser getUser(String userName, String password);
|
||||
|
||||
void disable(Integer id);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.QuotationModelDiscountItem;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 代码生成器生成
|
||||
* @since 2026
|
||||
*/
|
||||
public interface IQuotationModelDiscountItemService extends IService<QuotationModelDiscountItem> {
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 代码生成器生成
|
||||
* @since 2026
|
||||
*/
|
||||
@Service
|
||||
public class AdminBaseSerialNumberServiceImpl extends ServiceImpl<AdminBaseSerialNumberMapper, AdminBaseSerialNumber> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -70,6 +70,10 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
@Resource
|
||||
private IDictionaryItemService dictionaryItemService;
|
||||
|
||||
@Resource
|
||||
private IAdminBaseSerialNumberService serialNumberService;
|
||||
|
||||
|
||||
@Override
|
||||
public AdminUser getUser(String userName, String password) {
|
||||
AdminUser user = lambdaQuery()
|
||||
|
|
@ -113,6 +117,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.setUpdateTime(LocalDateTime.now());
|
||||
updateById(user);
|
||||
} else {
|
||||
String quotationCode = serialNumberService.generateSerialNumber(0, "NF", "", false, 6);
|
||||
user = new AdminUser()
|
||||
.setUserCode(request.getUserCode())
|
||||
.setUserName(request.getUserName())
|
||||
|
|
@ -127,6 +132,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.setGongfu(StrUtil.contains(request.getProductLine(), Constant.MOBILE_BROKEN))
|
||||
.setCategoryId(request.getCategoryId())
|
||||
.setTitleId(request.getTitleId())
|
||||
.setQuotationCode(quotationCode)
|
||||
.setCreateBy(AdminUserUtil.getUserId())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
save(user);
|
||||
|
|
@ -233,6 +239,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.setGongfu(u.isGongfu())
|
||||
.setCategoryId(u.getCategoryId())
|
||||
.setCategoryName(Objects.isNull(category) ? "" : category.getName())
|
||||
.setQuotationCode(u.getQuotationCode())
|
||||
.setRoles(
|
||||
roles.stream()
|
||||
.filter(r -> rmaps.contains(r.getId()))
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
|
@ -205,6 +203,9 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
|
|||
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
|
||||
//新增账号
|
||||
AppUser appUser = appUserService.getById(applyfor.getCreateBy());
|
||||
List<Integer> 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<AppUserApplyforMappe
|
|||
.setCreateTime(LocalDateTime.now())
|
||||
.setExpireTime(appUser.getExpireTime())
|
||||
.setSalesUserName(appUser.getSalesUserName())
|
||||
.setQuotationCode(quoationCode)
|
||||
.setIsPrimary(false);
|
||||
appUserService.save(user);
|
||||
departmentService.lambdaUpdate()
|
||||
|
|
@ -236,6 +238,14 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
|
|||
//账号启用
|
||||
AppUser appUser = appUserService.getById(applyfor.getUserId());
|
||||
AppUser applyUser = appUserService.getById(applyfor.getCreateBy());
|
||||
|
||||
if(StringUtil.isNotBlank(appUser.getCompanyId())) {
|
||||
Set<Integer> 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());
|
||||
|
|
|
|||
|
|
@ -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<AppUserMapper, AppUser> impl
|
|||
@Resource
|
||||
private IDictionaryItemService dictionaryItemService;
|
||||
|
||||
@Resource
|
||||
private IAdminBaseSerialNumberService adminBaseSerialNumberService;
|
||||
|
||||
@Override
|
||||
public String getAppUserQuotationCode(List<Integer> companyId) {
|
||||
if (CollectionUtil.isEmpty(companyId))
|
||||
return "";
|
||||
// 根据公司ID查询公司的区域信息
|
||||
List<TBaseCustomer> customers = customerService.lambdaQuery()
|
||||
.in(TBaseCustomer::getId, companyId)
|
||||
.eq(TBaseCustomer::getQuotationUse, true)
|
||||
.list();
|
||||
if (CollectionUtil.isEmpty(customers)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// 获取到公司的区域代码
|
||||
List<String> areaCodes = customers.stream()
|
||||
.map(TBaseCustomer::getAreaCode)
|
||||
.collect(Collectors.toList());
|
||||
Set<String> 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<TBaseArea> 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<Integer> parentIds = areas.stream()
|
||||
.map(TBaseArea::getParentAreaRowId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
List<TBaseArea> 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<Integer, Long> parentCountMap = areas.stream()
|
||||
.map(TBaseArea::getParentAreaRowId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.groupingBy(
|
||||
Function.identity(),
|
||||
Collectors.counting()
|
||||
));
|
||||
Set<Integer> 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<Integer> parentIds1 = parentCountMap.entrySet().stream()
|
||||
.filter(entry -> entry.getValue() == 1) // 出现次数=1
|
||||
.map(Map.Entry::getKey)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
List<TBaseArea> 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<AppUserMapper, AppUser> 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<AppUserMapper, AppUser> 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<AppUserMapper, AppUser> 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,17 +547,33 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
public void migrate(MigrateAppUserRequest request) {
|
||||
AppUser appUser = getPrimaryByCompanyId(request.getCompanyId().toString());
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("该公司还未设置主账号");
|
||||
List<Integer> 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::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())
|
||||
.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
|
||||
public PageData<AppUserForAdminVO> searchAppUserForAdmin(SearchAppUserForAdminRequest request) {
|
||||
|
|
@ -627,13 +745,27 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
@Override
|
||||
public void enable(EnableAppUserRequest request) {
|
||||
if (request.getEnable()) {
|
||||
for (Integer id : request.getIds()) {
|
||||
AppUser appUser = getById(id);
|
||||
List<Integer> 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.getUserName())
|
||||
.set(AppUser::getUpdateBy, AdminUserUtil.getUserId())
|
||||
.set(AppUser::getUpdateTime, LocalDateTime.now())
|
||||
.eq(AppUser::getIsDel, false)
|
||||
.in(AppUser::getId, request.getIds())
|
||||
.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())
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 代码生成器生成
|
||||
* @since 2026
|
||||
*/
|
||||
@Service
|
||||
public class QuotationModelDiscountItemServiceImpl extends ServiceImpl<QuotationModelDiscountItemMapper, QuotationModelDiscountItem> implements IQuotationModelDiscountItemService {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.AdminBaseSerialNumberMapper">
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.QuotationModelDiscountItemMapper">
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue