供应商-SQE 关联管理修改

This commit is contained in:
funny 2026-04-09 18:39:27 +08:00
parent e01ab6e094
commit dc6ad7250c
22 changed files with 71 additions and 827 deletions

View File

@ -1,69 +0,0 @@
package com.nflg.qms.admin.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.qms.admin.service.QmsSqeControllerService;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.QmsSqeVO;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import org.springframework.web.bind.annotation.*;
/**
* SQE 管理
*/
@RestController
@RequestMapping("/sqe")
public class QmsSqeController extends BaseController {
@Resource
private QmsSqeControllerService qmsSqeControllerService;
/**
* 新增SQE
*/
@PostMapping("add")
public ApiResult<Void> add(@Valid @RequestBody QmsSqeAddQO request) {
qmsSqeControllerService.addSqe(request);
return ApiResult.success();
}
/**
* 更新SQE
*/
@PostMapping("update")
public ApiResult<Void> update(@Valid @RequestBody QmsSqeUpdateQO request) {
qmsSqeControllerService.updateSqe(request);
return ApiResult.success();
}
/**
* 删除SQE
*/
@PostMapping("delete")
public ApiResult<Void> delete(@NotNull Long id) {
qmsSqeControllerService.deleteSqe(id);
return ApiResult.success();
}
/**
* 启用/禁用SQE
*/
@PostMapping("enable")
public ApiResult<Void> enable(@Valid @RequestBody EnableQO request) {
qmsSqeControllerService.enableSqe(request);
return ApiResult.success();
}
/**
* 分页查询SQE列表
*/
@PostMapping("search")
public ApiResult<PageData<QmsSqeVO>> search(@Valid @RequestBody QmsSqeSearchQO request) {
IPage<QmsSqeVO> page = qmsSqeControllerService.searchSqe(request);
return ApiResult.success(page);
}
}

View File

@ -22,7 +22,7 @@ import java.util.Arrays;
import java.util.List;
/**
* 标准缺陷库 接口
* 标准缺陷库管理
*/
@RestController
@RequestMapping("/standardDefect")

View File

@ -1,21 +1,20 @@
package com.nflg.qms.admin.controller;
import com.nflg.qms.admin.service.QmsSqeControllerService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.EnableQO;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
import com.nflg.wms.common.pojo.qo.SetSupplierQO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO;
import com.nflg.wms.repository.service.IQmsSupplierSqeMapService;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 供应商-SQE 关联管理
*/
@ -24,31 +23,33 @@ import java.util.List;
public class QmsSupplierSqeController extends BaseController {
@Resource
private QmsSqeControllerService qmsSqeControllerService;
private IQmsSupplierSqeMapService supplierSqeMapService;
/**
* 分页查询供应商-SQE关联列表直接查关联表支持动态过滤
*/
@PostMapping("search")
public ApiResult<PageData<QmsSupplierSqeMapVO>> search(@Valid @RequestBody QmsSupplierSqeSearchQO request) {
return ApiResult.success(qmsSqeControllerService.searchSupplierSqe(request));
return ApiResult.success(supplierSqeMapService.searchMap(request));
}
/**
* 设置供应商为选中SQE绑定供应商多对多覆盖式更新以SQE为主体
* 设置供应商为选中用户绑定供应商多对多覆盖式更新以用户为主体
*/
@Transactional
@PostMapping("setSupplier")
public ApiResult<Void> setSupplier(@Valid @RequestBody SetSupplierQO request) {
qmsSqeControllerService.setSupplier(request);
supplierSqeMapService.setSupplier(request.getUserId(), request.getSupplierIds());
return ApiResult.success();
}
/**
* 启用/禁用供应商-SQE关联关系
*/
@Transactional
@PostMapping("enable")
public ApiResult<Void> enable(@Valid @RequestBody EnableQO request) {
qmsSqeControllerService.enableSupplierSqeMap(request);
supplierSqeMapService.enable(request.getId(), request.getEnable());
return ApiResult.success();
}
@ -57,9 +58,10 @@ public class QmsSupplierSqeController extends BaseController {
*
* @param id 关联记录ID
*/
@Transactional
@PostMapping("delete")
public ApiResult<Void> delete(@NotNull Long id) {
qmsSqeControllerService.deleteSupplierSqeMap(id);
supplierSqeMapService.deleteById(id);
return ApiResult.success();
}
}

View File

@ -1,183 +0,0 @@
package com.nflg.qms.admin.service;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.QmsSqeVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.QmsSqe;
import com.nflg.wms.repository.entity.QmsSupplierSqeMap;
import com.nflg.wms.repository.entity.UserSupplier;
import com.nflg.wms.repository.entity.User;
import com.nflg.wms.repository.service.IQmsSqeService;
import com.nflg.wms.repository.service.IQmsSupplierSqeMapService;
import com.nflg.wms.repository.service.IUserService;
import com.nflg.wms.repository.service.IUserSupplierService;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* SQE 与供应商管理业务逻辑
*/
@Slf4j
@Component
public class QmsSqeControllerService {
@Resource
private IQmsSqeService qmsSqeService;
@Resource
private IQmsSupplierSqeMapService supplierSqeMapService;
@Resource
private IUserSupplierService userSupplierService;
@Resource
private IUserService userService;
// ========================= SQE 基础管理 =========================
/**
* 新增SQE
* sqeName 强制从 user 表读取 userName防止前端与 userId 不一致
*/
@Transactional
public void addSqe(@Valid QmsSqeAddQO request) {
VUtil.trueThrowBusinessError(qmsSqeService.lambdaQuery()
.eq(QmsSqe::getUserId, request.getUserId()).exists())
.throwMessage("该用户已存在SQE记录");
// user 表取真实用户名确保与 userId 强绑定
User user = userService.getById(request.getUserId());
VUtil.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
QmsSqe entity = new QmsSqe()
.setUserId(request.getUserId())
.setSqeName(user.getUserName()) // 强制使用 user 表中的真实姓名
.setSqeCode(request.getSqeCode())
.setEmail(user.getEmail()) // user 表自动赋值
.setPhone(user.getPhone()) // user 表自动赋值
.setState(1)
.setRemark(request.getRemark())
.setCreateBy(operator)
.setCreateTime(now)
.setUpdateBy(operator)
.setUpdateTime(now);
qmsSqeService.save(entity);
}
/**
* 更新SQE信息
*/
@Transactional
public void updateSqe(@Valid QmsSqeUpdateQO request) {
QmsSqe exist = qmsSqeService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(exist)).throwMessage("SQE不存在");
qmsSqeService.lambdaUpdate()
.eq(QmsSqe::getId, request.getId())
.set(StrUtil.isNotBlank(request.getSqeName()), QmsSqe::getSqeName, request.getSqeName())
.set(StrUtil.isNotBlank(request.getSqeCode()), QmsSqe::getSqeCode, request.getSqeCode())
.set(StrUtil.isNotBlank(request.getEmail()), QmsSqe::getEmail, request.getEmail())
.set(StrUtil.isNotBlank(request.getPhone()), QmsSqe::getPhone, request.getPhone())
.set(StrUtil.isNotBlank(request.getRemark()), QmsSqe::getRemark, request.getRemark())
.set(QmsSqe::getUpdateBy, UserUtil.getUserName())
.set(QmsSqe::getUpdateTime, LocalDateTime.now())
.update();
}
/**
* 删除SQE
*/
@Transactional
public void deleteSqe(Long id) {
VUtil.trueThrowBusinessError(Objects.isNull(qmsSqeService.getById(id))).throwMessage("SQE不存在");
qmsSqeService.removeById(id);
// 同步删除所有关联关系
supplierSqeMapService.lambdaUpdate()
.eq(QmsSupplierSqeMap::getSqeId, id)
.remove();
}
/**
* 启用/禁用SQE
*/
@Transactional
public void enableSqe(@Valid EnableQO request) {
VUtil.trueThrowBusinessError(Objects.isNull(qmsSqeService.getById(request.getId()))).throwMessage("SQE不存在");
qmsSqeService.lambdaUpdate()
.eq(QmsSqe::getId, request.getId())
.set(QmsSqe::getState, request.getEnable() ? 1 : 2)
.set(QmsSqe::getUpdateBy, UserUtil.getUserName())
.set(QmsSqe::getUpdateTime, LocalDateTime.now())
.update();
}
/**
* 分页查询SQE列表
*/
public IPage<QmsSqeVO> searchSqe(@Valid QmsSqeSearchQO request) {
return qmsSqeService.search(request);
}
// ===================== 供应商-SQE 关联管理 ======================
/**
* 分页查询供应商-SQE关联列表直接查关联表动态过滤 supplierCode/supplierName/sqeName
*/
public IPage<QmsSupplierSqeMapVO> searchSupplierSqe(@Valid QmsSupplierSqeSearchQO request) {
return supplierSqeMapService.searchMap(request);
}
/**
* 为供应商设置SQE多对多先清后存以供应商为主体
*/
@Transactional
public void setSqe(@Valid SetSqeQO request) {
UserSupplier supplier = userSupplierService.getById(request.getSupplierId());
VUtil.trueThrowBusinessError(Objects.isNull(supplier)).throwMessage("供应商不存在");
supplierSqeMapService.setSqe(request.getSupplierId(), request.getSqeIds());
}
/**
* 为SQE设置供应商多对多先清后存以SQE为主体
*/
@Transactional
public void setSupplier(@Valid SetSupplierQO request) {
VUtil.trueThrowBusinessError(Objects.isNull(qmsSqeService.getById(request.getSqeId()))).throwMessage("SQE不存在");
supplierSqeMapService.setSupplier(request.getSqeId(), request.getSupplierIds());
}
/**
* 查询某供应商已绑定的SQE列表
*/
public List<QmsSupplierSqeVO.SqeSimpleVO> getSqeListBySupplierId(Long supplierId) {
VUtil.trueThrowBusinessError(Objects.isNull(userSupplierService.getById(supplierId))).throwMessage("供应商不存在");
return supplierSqeMapService.listBySupplierId(supplierId);
}
/**
* 启用/禁用供应商-SQE关联关系
*/
@Transactional
public void enableSupplierSqeMap(@Valid EnableQO request) {
supplierSqeMapService.enable(request.getId(), request.getEnable());
}
/**
* 删除供应商-SQE关联关系启用状态下禁止删除
*/
@Transactional
public void deleteSupplierSqeMap(Long id) {
supplierSqeMapService.deleteById(id);
}
}

View File

@ -1,28 +0,0 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 新增 SQE 参数
* sqeNameemailphone 均由后端从 user 表自动读取前端无需传入
*/
@Data
public class QmsSqeAddQO {
/**
* 关联用户IDuser.id后端据此自动取用户名邮箱手机号
*/
@NotNull(message = "用户ID不能为空")
private Long userId;
/**
* SQE工号
*/
private String sqeCode;
/**
* 备注
*/
private String remark;
}

View File

@ -1,20 +0,0 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
/**
* SQE 列表查询参数
*/
@Data
public class QmsSqeSearchQO extends SearchBaseQO {
/**
* SQE姓名
*/
private String sqeName;
/**
* SQE工号
*/
private String sqeCode;
}

View File

@ -1,42 +0,0 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 更新 SQE 参数
*/
@Data
public class QmsSqeUpdateQO {
/**
* SQE主键ID
*/
@NotNull(message = "ID不能为空")
private Long id;
/**
* SQE姓名
*/
private String sqeName;
/**
* SQE工号
*/
private String sqeCode;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String phone;
/**
* 备注
*/
private String remark;
}

View File

@ -3,10 +3,10 @@ package com.nflg.wms.common.pojo.qo;
import lombok.Data;
/**
* 供应商-SQE 列表查询参数对应页面搜索条件
* 供应商-用户 列表查询参数对应页面搜索条件
*/
@Data
public class QmsSupplierSqeSearchQO extends SearchBaseQO {
public class QmsSupplierSqeSearchQO extends PageQO {
/**
* 供应商编号
@ -19,7 +19,7 @@ public class QmsSupplierSqeSearchQO extends SearchBaseQO {
private String supplierName;
/**
* SQE名称
* 用户名称
*/
private String sqeName;
private String userName;
}

View File

@ -7,16 +7,16 @@ import lombok.Data;
import java.util.List;
/**
* SQE设置供应商参数多对多
* 用户设置供应商参数多对多
*/
@Data
public class SetSupplierQO {
/**
* SQE IDqms_sqe.id
* 用户IDuser.id
*/
@NotNull(message = "SQE ID不能为空")
private Long sqeId;
@NotNull(message = "用户ID不能为空")
private Long userId;
/**
* 供应商ID列表user_supplier.id

View File

@ -1,69 +0,0 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
/**
* SQE 信息VO
*/
@Data
public class QmsSqeVO {
private Long id;
/**
* 关联用户ID
*/
private Long userId;
/**
* SQE姓名
*/
private String sqeName;
/**
* SQE工号
*/
private String sqeCode;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String phone;
/**
* 状态1=启用2=禁用
*/
private Integer state;
/**
* 备注
*/
private String remark;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
}

View File

@ -5,7 +5,7 @@ import lombok.Data;
import java.time.LocalDateTime;
/**
* 供应商-SQE 关联记录 VO以关联表为主体每行一条关联记录
* 供应商-用户 关联记录 VO以关联表为主体每行一条关联记录
*/
@Data
public class QmsSupplierSqeMapVO {
@ -31,19 +31,24 @@ public class QmsSupplierSqeMapVO {
private String supplierName;
/**
* SQE ID
* 用户ID
*/
private Long sqeId;
private Long userId;
/**
* SQE 名称
* 用户名称
*/
private String sqeName;
private String userName;
/**
* SQE 工号
* 用户工号
*/
private String sqeCode;
private String userCode;
/**
* 职位名称
*/
private String positionName;
/**
* 状态1=启用2=禁用

View File

@ -1,65 +0,0 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 供应商信息含所属SQEVO对应页面列表行
*/
@Data
public class QmsSupplierSqeVO {
private Long id;
/**
* 供应商编号
*/
private String supplierCode;
/**
* 供应商名称
*/
private String supplierName;
/**
* 所属SQE列表
*/
private List<SqeSimpleVO> sqeList;
/**
* 状态1=启用2=禁用
*/
private Integer state;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 创建人
*/
private String createBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* SQE简要信息用于列表展示
*/
@Data
public static class SqeSimpleVO {
private Long sqeId;
private String sqeName;
private String sqeCode;
}
}

View File

@ -1,88 +0,0 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* SQE信息表
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("qms_sqe")
public class QmsSqe implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 关联用户ID (user.id)
*/
private Long userId;
/**
* SQE姓名
*/
private String sqeName;
/**
* SQE工号
*/
private String sqeCode;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String phone;
/**
* 状态1=启用2=禁用
*/
private Integer state;
/**
* 备注
*/
private String remark;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
}

View File

@ -13,7 +13,7 @@ import java.time.LocalDateTime;
/**
* <p>
* 供应商与SQE关联表多对多
* 供应商与用户关联表多对多
* </p>
*
* @author 代码生成器生成
@ -37,9 +37,9 @@ public class QmsSupplierSqeMap implements Serializable {
private Long supplierId;
/**
* SQE ID (qms_sqe.id)
* 用户ID (user.id)
*/
private Long sqeId;
private Long userId;
/**
* 状态1=启用2=禁用

View File

@ -1,21 +0,0 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.wms.common.pojo.qo.QmsSqeSearchQO;
import com.nflg.wms.common.pojo.vo.QmsSqeVO;
import com.nflg.wms.repository.entity.QmsSqe;
/**
* <p>
* SQE Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface QmsSqeMapper extends BaseMapper<QmsSqe> {
IPage<QmsSqeVO> search(QmsSqeSearchQO request, Page<Object> page);
}

View File

@ -5,15 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO;
import com.nflg.wms.repository.entity.QmsSupplierSqeMap;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 供应商-SQE关联 Mapper 接口
* 供应商-用户关联 Mapper 接口
* </p>
*
* @author 代码生成器生成
@ -22,17 +19,7 @@ import java.util.List;
public interface QmsSupplierSqeMapMapper extends BaseMapper<QmsSupplierSqeMap> {
/**
* 分页查询供应商-SQE列表含SQE名称聚合
*/
IPage<QmsSupplierSqeVO> search(QmsSupplierSqeSearchQO request, Page<Object> page);
/**
* 分页查询关联表直接查 qms_supplier_sqe_mapJOIN 供应商和SQE支持动态过滤
* 分页查询关联表JOIN 供应商/user/user_interior/position支持动态过滤
*/
IPage<QmsSupplierSqeMapVO> searchMap(@Param("request") QmsSupplierSqeSearchQO request, Page<QmsSupplierSqeMapVO> page);
/**
* 查询某供应商已绑定的SQE简要信息列表
*/
List<QmsSupplierSqeVO.SqeSimpleVO> listBySupplierId(@Param("supplierId") Long supplierId);
}

View File

@ -1,23 +0,0 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.QmsSqeSearchQO;
import com.nflg.wms.common.pojo.vo.QmsSqeVO;
import com.nflg.wms.repository.entity.QmsSqe;
/**
* <p>
* SQE 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IQmsSqeService extends IService<QmsSqe> {
/**
* 分页查询SQE列表
*/
IPage<QmsSqeVO> search(QmsSqeSearchQO request);
}

View File

@ -4,14 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO;
import com.nflg.wms.repository.entity.QmsSupplierSqeMap;
import java.util.List;
/**
* <p>
* 供应商-SQE关联 服务类
* 供应商-用户关联 服务类
* </p>
*
* @author 代码生成器生成
@ -20,37 +19,22 @@ import java.util.List;
public interface IQmsSupplierSqeMapService extends IService<QmsSupplierSqeMap> {
/**
* 分页查询供应商-SQE列表
*/
IPage<QmsSupplierSqeVO> search(QmsSupplierSqeSearchQO request);
/**
* 直接查关联表分页动态过滤 supplierCode/supplierName/sqeName
* 直接查关联表分页动态过滤 supplierCode/supplierName/userName
*/
IPage<QmsSupplierSqeMapVO> searchMap(QmsSupplierSqeSearchQO request);
/**
* 查询某供应商绑定的SQE简要列表
* 为用户重新设置供应商先清后存以用户为主体
*/
List<QmsSupplierSqeVO.SqeSimpleVO> listBySupplierId(Long supplierId);
void setSupplier(Long userId, List<Long> supplierIds);
/**
* 为供应商重新设置SQE先清后存以供应商为主体
*/
void setSqe(Long supplierId, List<Long> sqeIds);
/**
* 为SQE重新设置供应商先清后存以SQE为主体
*/
void setSupplier(Long sqeId, List<Long> supplierIds);
/**
* 启用/禁用单条供应商-SQE关联
* 启用/禁用单条供应商-用户关联
*/
void enable(Long id, Boolean enable);
/**
* 删除单条供应商-SQE关联启用状态下不允许删除
* 删除单条供应商-用户关联启用状态下不允许删除
*/
void deleteById(Long id);
}

View File

@ -1,28 +0,0 @@
package com.nflg.wms.repository.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.QmsSqeSearchQO;
import com.nflg.wms.common.pojo.vo.QmsSqeVO;
import com.nflg.wms.repository.entity.QmsSqe;
import com.nflg.wms.repository.mapper.QmsSqeMapper;
import com.nflg.wms.repository.service.IQmsSqeService;
import org.springframework.stereotype.Service;
/**
* <p>
* SQE 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class QmsSqeServiceImpl extends ServiceImpl<QmsSqeMapper, QmsSqe> implements IQmsSqeService {
@Override
public IPage<QmsSqeVO> search(QmsSqeSearchQO request) {
return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -1,6 +1,5 @@
package com.nflg.wms.repository.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -8,7 +7,6 @@ import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.QmsSupplierSqeMap;
import com.nflg.wms.repository.mapper.QmsSupplierSqeMapMapper;
@ -19,11 +17,12 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
* 供应商-SQE关联 服务实现类
* 供应商-用户关联 服务实现类
* </p>
*
* @author 代码生成器生成
@ -33,63 +32,38 @@ import java.util.stream.Collectors;
public class QmsSupplierSqeMapServiceImpl extends ServiceImpl<QmsSupplierSqeMapMapper, QmsSupplierSqeMap>
implements IQmsSupplierSqeMapService {
@Override
public IPage<QmsSupplierSqeVO> search(QmsSupplierSqeSearchQO request) {
return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize()));
}
@Override
public IPage<QmsSupplierSqeMapVO> searchMap(QmsSupplierSqeSearchQO request) {
return baseMapper.searchMap(request, new Page<>(request.getPage(), request.getPageSize()));
}
@Override
public List<QmsSupplierSqeVO.SqeSimpleVO> listBySupplierId(Long supplierId) {
return baseMapper.listBySupplierId(supplierId);
}
@Transactional
@Override
public void setSqe(Long supplierId, List<Long> sqeIds) {
// 删除该供应商原有的所有关联
remove(new LambdaQueryWrapper<QmsSupplierSqeMap>()
.eq(QmsSupplierSqeMap::getSupplierId, supplierId));
// 批量保存新关联
public void setSupplier(Long userId, List<Long> supplierIds) {
// 查询该用户已存在的供应商ID集合
Set<Long> existSupplierIds = lambdaQuery()
.eq(QmsSupplierSqeMap::getUserId, userId)
.list()
.stream()
.map(QmsSupplierSqeMap::getSupplierId)
.collect(Collectors.toSet());
// 只插入不存在的记录跳过重复的
String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
List<QmsSupplierSqeMap> list = sqeIds.stream()
.map(sqeId -> new QmsSupplierSqeMap()
.setSupplierId(supplierId)
.setSqeId(sqeId)
.setState(1)
.setCreateBy(operator)
.setCreateTime(now)
.setUpdateBy(operator)
.setUpdateTime(now))
.collect(Collectors.toList());
saveBatch(list);
}
@Transactional
@Override
public void setSupplier(Long sqeId, List<Long> supplierIds) {
// 删除该SQE原有的所有关联
remove(new LambdaQueryWrapper<QmsSupplierSqeMap>()
.eq(QmsSupplierSqeMap::getSqeId, sqeId));
// 批量保存新关联
String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
List<QmsSupplierSqeMap> list = supplierIds.stream()
List<QmsSupplierSqeMap> toAdd = supplierIds.stream()
.filter(supplierId -> !existSupplierIds.contains(supplierId))
.map(supplierId -> new QmsSupplierSqeMap()
.setSupplierId(supplierId)
.setSqeId(sqeId)
.setUserId(userId)
.setState(1)
.setCreateBy(operator)
.setCreateTime(now)
.setUpdateBy(operator)
.setUpdateTime(now))
.collect(Collectors.toList());
saveBatch(list);
if (!toAdd.isEmpty()) {
saveBatch(toAdd);
}
}
@Transactional

View File

@ -1,26 +0,0 @@
<?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.wms.repository.mapper.QmsSqeMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.QmsSqeVO">
SELECT id, user_id, sqe_name, sqe_code, email, phone, state, remark,
create_by, create_time, update_by, update_time
FROM qms_sqe
<where>
<if test="request.sqeName != null and request.sqeName != ''">
AND sqe_name ilike concat('%', #{request.sqeName}, '%')
</if>
<if test="request.sqeCode != null and request.sqeCode != ''">
AND sqe_code ilike concat('%', #{request.sqeCode}, '%')
</if>
<if test="request.startDate != null">
AND create_time &gt;= #{request.startDate}
</if>
<if test="request.endDate != null">
AND create_time &lt;= #{request.endDate}
</if>
</where>
ORDER BY id DESC
</select>
</mapper>

View File

@ -2,52 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.QmsSupplierSqeMapMapper">
<!-- 分页查询供应商列表每行包含聚合后的SQE名称用于展示 -->
<select id="search" resultType="com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO">
SELECT
us.id,
us.supplier_code,
us.supplier_name,
us.state,
us.create_time,
us.create_by,
us.update_time,
us.update_by
FROM user_supplier us
<if test="request.sqeName != null and request.sqeName != ''">
INNER JOIN qms_supplier_sqe_map qssm ON qssm.supplier_id = us.id AND qssm.state = 1
INNER JOIN qms_sqe qs ON qs.id = qssm.sqe_id
AND qs.sqe_name ilike concat('%', #{request.sqeName}, '%')
</if>
<where>
<if test="request.supplierCode != null and request.supplierCode != ''">
AND us.supplier_code ilike concat('%', #{request.supplierCode}, '%')
</if>
<if test="request.supplierName != null and request.supplierName != ''">
AND us.supplier_name ilike concat('%', #{request.supplierName}, '%')
</if>
<if test="request.startDate != null">
AND us.create_time &gt;= #{request.startDate}
</if>
<if test="request.endDate != null">
AND us.create_time &lt;= #{request.endDate}
</if>
</where>
GROUP BY us.id, us.supplier_code, us.supplier_name,
us.state, us.create_time, us.create_by, us.update_time, us.update_by
ORDER BY us.id DESC
</select>
<!-- 直接查关联表JOIN 供应商和SQE动态过滤分页 -->
<!-- 分页查询关联表JOIN 供应商/user/user_interior/position动态过滤 -->
<select id="searchMap" resultType="com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO">
SELECT
qssm.id,
qssm.supplier_id,
us.supplier_code,
us.supplier_name,
qssm.sqe_id,
qs.sqe_name,
qs.sqe_code,
qssm.user_id,
u.user_name,
u.user_code,
p.name AS position_name,
qssm.state,
qssm.create_by,
qssm.create_time,
@ -55,7 +20,9 @@
qssm.update_time
FROM qms_supplier_sqe_map qssm
LEFT JOIN user_supplier us ON us.id = qssm.supplier_id
LEFT JOIN qms_sqe qs ON qs.id = qssm.sqe_id
LEFT JOIN "user" u ON u.id = qssm.user_id
LEFT JOIN user_interior ui ON ui.user_id = qssm.user_id
LEFT JOIN position p ON p.id = ui.position_id
<where>
<if test="request.supplierCode != null and request.supplierCode != ''">
AND us.supplier_code ilike concat('%', #{request.supplierCode}, '%')
@ -63,24 +30,11 @@
<if test="request.supplierName != null and request.supplierName != ''">
AND us.supplier_name ilike concat('%', #{request.supplierName}, '%')
</if>
<if test="request.sqeName != null and request.sqeName != ''">
AND qs.sqe_name ilike concat('%', #{request.sqeName}, '%')
<if test="request.userName != null and request.userName != ''">
AND u.user_name ilike concat('%', #{request.userName}, '%')
</if>
</where>
ORDER BY qssm.id DESC
</select>
<!-- 查询某供应商绑定的所有SQE简要信息 -->
<select id="listBySupplierId" resultType="com.nflg.wms.common.pojo.vo.QmsSupplierSqeVO$SqeSimpleVO">
SELECT
qs.id AS sqe_id,
qs.sqe_name,
qs.sqe_code
FROM qms_supplier_sqe_map qssm
INNER JOIN qms_sqe qs ON qs.id = qssm.sqe_id
WHERE qssm.supplier_id = #{supplierId}
AND qssm.state = 1
ORDER BY qs.sqe_name
</select>
</mapper>