Compare commits

...

4 Commits

8 changed files with 54 additions and 139 deletions

View File

@ -3,7 +3,7 @@ package com.nflg.qms.admin.controller;
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.EnableSupplierQO;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
import com.nflg.wms.common.pojo.qo.QmsSetSupplierQO;
import com.nflg.wms.common.pojo.qo.QmsSetUserQO;
@ -59,24 +59,26 @@ public class QmsSupplierSqeController extends BaseController {
}
/**
* 启用/禁用供应商-用户关联关系
* 启用/禁用供应商所有关联关系
*
* @param request supplierId=供应商IDenable=启用/禁用
*/
@Transactional
@PostMapping("enable")
public ApiResult<Void> enable(@Valid @RequestBody EnableQO request) {
supplierSqeMapService.enable(request.getId(), request.getEnable());
public ApiResult<Void> enable(@Valid @RequestBody EnableSupplierQO request) {
supplierSqeMapService.enableBySupplierId(request.getSupplierId(), request.getEnable());
return ApiResult.success();
}
/**
* 删除供应商-用户关联关系启用状态下不允许删除
* 删除供应商所有关联关系启用状态下不允许删除
*
* @param id 关联记录ID
* @param supplierId 供应商ID
*/
@Transactional
@PostMapping("delete")
public ApiResult<Void> delete(@NotNull Long id) {
supplierSqeMapService.deleteById(id);
public ApiResult<Void> delete(@NotNull Long supplierId) {
supplierSqeMapService.deleteBySupplierId(supplierId);
return ApiResult.success();
}

View File

@ -147,37 +147,6 @@ public class QmsStandardDefectControllerService {
updateChain.set(QmsStandardDefect::getRemark, request.getRemark());
}
// 父级变更仅当 changeParent=true 时处理
boolean parentChanged = false;
Long oldParentId = exist.getParentId();
if (Boolean.TRUE.equals(request.getChangeParent())) {
Long newParentId = null;
String newParentCode = null;
Short newLevel;
if (StrUtil.isBlank(request.getParentName())) {
// 改为顶级
newLevel = 1;
} else {
QmsStandardDefect newParent = getParentByName(request.getParentName());
newParentId = newParent.getId();
newParentCode = newParent.getDefectCode();
newLevel = (short) (newParent.getLevel() + 1);
// 新父级若是叶子节点改为非叶子
if (Boolean.TRUE.equals(newParent.getIsLeaf())) {
defectService.lambdaUpdate()
.eq(QmsStandardDefect::getId, newParent.getId())
.set(QmsStandardDefect::getIsLeaf, false)
.update();
}
}
parentChanged = !Objects.equals(oldParentId, newParentId);
updateChain.set(QmsStandardDefect::getParentId, newParentId)
.set(QmsStandardDefect::getParentCode, newParentCode)
.set(QmsStandardDefect::getLevel, newLevel);
}
updateChain.set(QmsStandardDefect::getUpdateBy, operator)
.set(QmsStandardDefect::getUpdateTime, now)
.update();
@ -186,20 +155,6 @@ public class QmsStandardDefectControllerService {
if (Objects.nonNull(request.getEnable())) {
updateDescendantsEnable(request.getId(), request.getEnable(), operator, now);
}
// 若父级变更检查旧父级是否还有未删除子节点没有则恢复 isLeaf=true
if (parentChanged && Objects.nonNull(oldParentId)) {
boolean hasChildren = defectService.lambdaQuery()
.eq(QmsStandardDefect::getParentId, oldParentId)
.eq(QmsStandardDefect::getDeleted, false)
.exists();
if (!hasChildren) {
defectService.lambdaUpdate()
.eq(QmsStandardDefect::getId, oldParentId)
.set(QmsStandardDefect::getIsLeaf, true)
.update();
}
}
}
// ========================= 删除逻辑删除 =========================

View File

@ -0,0 +1,16 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class EnableSupplierQO {
// 供应商ID
@NotNull
private Long supplierId;
// 是否启用
@NotNull
private Boolean enable;
}

View File

@ -15,17 +15,6 @@ public class QmsStandardDefectUpdateQO {
@NotNull(message = "ID不能为空")
private Long id;
/**
* 父级缺陷名称 null 表示顶级变更父级时自动处理旧父级 isLeaf不传则不修改父级
*/
private String parentName;
/**
* 是否修改父级true=修改父级关系false=不修改
* 用于区分"不传parentName"是顶级还是不修改
*/
private Boolean changeParent;
/**
* 缺陷代码不传则不修改
*/

View File

@ -2,19 +2,12 @@ package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 供应商-用户 关联记录 VO以关联表为主体每行一条关联记录
* 供应商-用户 关联 VO按供应商聚合每行一个供应商
*/
@Data
public class QmsSupplierSqeMapVO {
/**
* 关联记录IDqms_supplier_sqe_map.id
*/
private Long id;
/**
* 供应商ID
*/
@ -31,47 +24,12 @@ public class QmsSupplierSqeMapVO {
private String supplierName;
/**
* 用户ID
*/
private Long userId;
/**
* 用户名称
* SQE用户名称多个用逗号分隔
*/
private String userName;
/**
* 用户工号
*/
private String userCode;
/**
* 职位名称
*/
private String positionName;
/**
* 启用状态true=启用false=禁用
* 统一启用状态所有关联记录均启用时为true否则为false
*/
private Boolean enable;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
}

View File

@ -37,14 +37,14 @@ public interface IQmsSupplierSqeMapService extends IService<QmsSupplierSqeMap> {
void setUser(Long supplierId, List<Long> userIds);
/**
* 启用/禁用单条供应商-用户关联
* 按供应商ID启用/禁用该供应商所有关联记录
*/
void enable(Long id, Boolean enable);
void enableBySupplierId(Long supplierId, Boolean enable);
/**
* 删除单条供应商-用户关联启用状态下不允许删除
* 按供应商ID删除该供应商所有关联记录启用状态下不允许删除
*/
void deleteById(Long id);
void deleteBySupplierId(Long supplierId);
/**
* userId 查询该用户关联的供应商列表支持供应商过滤分页

View File

@ -99,13 +99,15 @@ public class QmsSupplierSqeMapServiceImpl extends ServiceImpl<QmsSupplierSqeMapM
@Transactional
@Override
public void enable(Long id, Boolean enable) {
QmsSupplierSqeMap record = getById(id);
if (Objects.isNull(record)) {
throw new NflgException(STATE.BusinessError, "关联记录不存在");
public void enableBySupplierId(Long supplierId, Boolean enable) {
boolean exists = lambdaQuery()
.eq(QmsSupplierSqeMap::getSupplierId, supplierId)
.exists();
if (!exists) {
throw new NflgException(STATE.BusinessError, "该供应商无关联记录");
}
lambdaUpdate()
.eq(QmsSupplierSqeMap::getId, id)
.eq(QmsSupplierSqeMap::getSupplierId, supplierId)
.set(QmsSupplierSqeMap::getEnable, enable)
.set(QmsSupplierSqeMap::getUpdateBy, UserUtil.getUserName())
.set(QmsSupplierSqeMap::getUpdateTime, LocalDateTime.now())
@ -114,15 +116,17 @@ public class QmsSupplierSqeMapServiceImpl extends ServiceImpl<QmsSupplierSqeMapM
@Transactional
@Override
public void deleteById(Long id) {
QmsSupplierSqeMap record = getById(id);
if (Objects.isNull(record)) {
throw new NflgException(STATE.BusinessError, "关联记录不存在");
public void deleteBySupplierId(Long supplierId) {
boolean hasEnabled = lambdaQuery()
.eq(QmsSupplierSqeMap::getSupplierId, supplierId)
.eq(QmsSupplierSqeMap::getEnable, true)
.exists();
if (hasEnabled) {
throw new NflgException(STATE.BusinessError, "该供应商关联关系处于启用状态,不允许删除,请先禁用后再删除");
}
if (Boolean.TRUE.equals(record.getEnable())) {
throw new NflgException(STATE.BusinessError, "关联关系处于启用状态,不允许删除,请先禁用后再删除");
}
removeById(id);
lambdaUpdate()
.eq(QmsSupplierSqeMap::getSupplierId, supplierId)
.remove();
}
@Override

View File

@ -5,24 +5,14 @@
<!-- 分页查询关联表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.user_id,
u.user_name,
u.user_code,
p.name AS position_name,
qssm.enable,
qssm.create_by,
qssm.create_time,
qssm.update_by,
qssm.update_time
STRING_AGG(DISTINCT u.user_name, ',' ORDER BY u.user_name) AS user_name,
BOOL_AND(qssm.enable) AS enable
FROM qms_supplier_sqe_map qssm
LEFT JOIN user_supplier us ON us.id = qssm.supplier_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}, '%')
@ -34,7 +24,8 @@
AND u.user_name ilike concat('%', #{request.userName}, '%')
</if>
</where>
ORDER BY qssm.id DESC
GROUP BY qssm.supplier_id, us.supplier_code, us.supplier_name
ORDER BY qssm.supplier_id DESC
</select>
<!-- 按 userId 查询关联的供应商列表(支持供应商过滤) -->