Merge remote-tracking branch 'origin/qms/develop' into qms/develop

This commit is contained in:
funny 2026-05-13 11:09:28 +08:00
commit 8c20a832f9
9 changed files with 130 additions and 76 deletions

View File

@ -1,6 +1,7 @@
package com.nflg.qms.admin.controller;
import com.nflg.qms.admin.service.QmsIssueTicketControllerService;
import com.nflg.wms.common.constant.Constant;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.QmsIncomingInspectionTaskNonconformanceSearchQO;
@ -37,7 +38,7 @@ public class QmsIncomingInspectionTaskNonconformanceController extends BaseContr
public ApiResult<PageData<QmsIncomingInspectionTaskNonconformanceVO>> search(@Valid @RequestBody QmsIncomingInspectionTaskNonconformanceSearchQO request) {
User user = userService.getById(UserUtil.getUserId());
request.setPurchaseGroup(user.getPurchasingGroup());
request.setIsWarehouseManager(UserUtil.getRoles().contains("CANGKUGUANLIYUAN"));
request.setIsWarehouseManager(UserUtil.getRoles().contains(Constant.ROLE_CODE_CANGKUGUANLIYUAN));
return ApiResult.success(nonconformanceService.search(request));
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.wms.common.constant.Constant;
import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.PageData;
@ -75,6 +76,9 @@ public class QmsIssueTicketControllerService {
@Resource
private WmsIncomingInspectionTaskCallbackService wmsIncomingInspectionTaskCallbackService;
@Resource
private IRoleService roleService;
/**
* 发起巡检工单
* 1. 校验工单存在且来源类型为巡检sourceType=2
@ -754,8 +758,8 @@ public class QmsIssueTicketControllerService {
.set(QmsIssueTicket::getImageIds, request.getImages() == null
? ""
: StrUtil.join(",", request.getImages().stream()
.map(com.nflg.wms.common.pojo.vo.FileUploadVO::getId)
.toList()))
.map(com.nflg.wms.common.pojo.vo.FileUploadVO::getId)
.toList()))
.set(QmsIssueTicket::getRemark, request.getRemark())
.set(QmsIssueTicket::getUpdateUserId, currentUserId)
.set(QmsIssueTicket::getUpdateUserName, currentUserName)
@ -1054,6 +1058,15 @@ public class QmsIssueTicketControllerService {
issueTicketToDoService.saveBatch(todoItems);
}
}
} else if (detail.getInspectionType() == 1) {
List<User> users = roleService.getUsersByCode(Constant.ROLE_CODE_CANGKUGUANLIYUAN);
List<QmsIssueTicketToDo> todoItems = users.stream().map(user -> new QmsIssueTicketToDo()
.setTicketId(entity.getId())
.setHandlerUserId(user.getId())
).toList();
if (CollectionUtil.isNotEmpty(todoItems)) {
issueTicketToDoService.saveBatch(todoItems);
}
}
}
@ -1095,52 +1108,55 @@ public class QmsIssueTicketControllerService {
}
// 查询关联的来料检测任务详情及检验记录
if (Objects.nonNull(entity.getSourceId())) {
// 来料检测任务详情
QmsIncomingInspectionTaskVO taskDetail = incomingInspectionTaskControllerService.getDetail(entity.getSourceId());
vo.setTaskDetail(taskDetail);
// 来料检测任务详情
QmsIncomingInspectionTaskVO taskDetail = incomingInspectionTaskControllerService.getDetail(entity.getSourceId());
vo.setTaskDetail(taskDetail);
List<QmsIssueTicketInspectionRecordItemVO> datas = incomingInspectionTaskControllerService.getNonconformanceDataGroups(entity.getSourceId());
List<QmsIssueTicketInspectionRecordItemVO> records = new ArrayList<>();
datas.forEach(record -> {
QmsIssueTicketInspectionRecordItemVO r = records.stream()
.filter(item -> item.getId().equals(record.getId()))
.findFirst()
.orElseGet(() -> {
QmsIssueTicketInspectionRecordItemVO r1 = new QmsIssueTicketInspectionRecordItemVO()
.setId(record.getId())
.setName(record.getName())
.setLegend(record.getLegend())
.setUnqualifiedQty(0)
.setImageIds(record.getImageIds());
records.add(r1);
return r1;
});
r.setUnqualifiedQty(r.getUnqualifiedQty() + record.getUnqualifiedQty());
if (StrUtil.isNotBlank(r.getImageIds())) {
r.setImageIds(StrUtil.join(",", r.getImageIds(), record.getImageIds()));
}
});
records.stream()
.filter(record -> StrUtil.isNotBlank(record.getImageIds()))
.forEach(record -> {
if (StrUtil.isNotBlank(record.getImageIds())) {
record.setImages(fileUploadRecordService.lambdaQuery()
.in(FileUploadRecord::getId, Arrays.stream(StrUtil.splitToLong(record.getImageIds(), ",")).boxed().toList())
.list()
.stream()
.map(file -> new FileUploadVO()
.setId(file.getId())
.setFileName(file.getFileName())
.setUrl(file.getUrl())
)
.collect(Collectors.toList())
);
}
List<QmsIssueTicketInspectionRecordItemVO> datas = incomingInspectionTaskControllerService.getNonconformanceDataGroups(entity.getSourceId());
List<QmsIssueTicketInspectionRecordItemVO> records = new ArrayList<>();
datas.forEach(record -> {
QmsIssueTicketInspectionRecordItemVO r = records.stream()
.filter(item -> item.getId().equals(record.getId()))
.findFirst()
.orElseGet(() -> {
QmsIssueTicketInspectionRecordItemVO r1 = new QmsIssueTicketInspectionRecordItemVO()
.setId(record.getId())
.setName(record.getName())
.setLegend(record.getLegend())
.setUnqualifiedQty(0)
.setImageIds(record.getImageIds());
records.add(r1);
return r1;
});
vo.setRecords(records);
}
r.setUnqualifiedQty(r.getUnqualifiedQty() + record.getUnqualifiedQty());
if (StrUtil.isNotBlank(r.getImageIds())) {
r.setImageIds(StrUtil.join(",", r.getImageIds(), record.getImageIds()));
}
});
records.stream()
.filter(record -> StrUtil.isNotBlank(record.getImageIds()))
.forEach(record -> {
if (StrUtil.isNotBlank(record.getImageIds())) {
record.setImages(fileUploadRecordService.lambdaQuery()
.in(FileUploadRecord::getId, Arrays.stream(StrUtil.splitToLong(record.getImageIds(), ",")).boxed().toList())
.list()
.stream()
.map(file -> new FileUploadVO()
.setId(file.getId())
.setFileName(file.getFileName())
.setUrl(file.getUrl())
)
.collect(Collectors.toList())
);
}
});
vo.setRecords(records);
if (taskDetail.getInspectionType() == 0) {
vo.setWithApprovalAuthority(StrUtil.equals(UserUtil.getPurchaseGroup(), taskDetail.getPurchaseGroup()));
} else if (taskDetail.getInspectionType() == 1) {
vo.setWithApprovalAuthority(UserUtil.getRoles().contains(Constant.ROLE_CODE_CANGKUGUANLIYUAN));
}
return vo;
}
@ -1786,14 +1802,22 @@ public class QmsIssueTicketControllerService {
return "未审批";
}
switch (status) {
case 0: return "通过";
case 1: return "驳回";
case 2: return "重检";
case 3: return "报废";
case 4: return "维修";
case 5: return "挑选使用";
case 6: return "让渡使用";
default: return "未知";
case 0:
return "通过";
case 1:
return "驳回";
case 2:
return "重检";
case 3:
return "报废";
case 4:
return "维修";
case 5:
return "挑选使用";
case 6:
return "让渡使用";
default:
return "未知";
}
}

View File

@ -39,4 +39,9 @@ public class Constant {
public static final String DICTIONARY_AD_TYPE ="AdvertisementType";
public static final String DICTIONARY_AD_POSITION ="AdvertisementPosition";
/**
* 仓库管理员角色代码
*/
public static final String ROLE_CODE_CANGKUGUANLIYUAN="CANGKUGUANLIYUAN";
}

View File

@ -133,6 +133,11 @@ public class QmsIssueTicketDetailVO {
*/
private LocalDateTime completeTime;
/**
* 是否有审批权限
*/
private boolean withApprovalAuthority = false;
/**
* 来料检测任务详情
*/

View File

@ -32,7 +32,7 @@ public class UserUtil {
return UserType.findByValue(Integer.parseInt(StpUtil.getExtra(Constant.LOGIN_EXTRA_USER_TYPE).toString()));
}
public static String getPurchaseGropu(){
public static String getPurchaseGroup(){
return (String) StpUtil.getExtra(Constant.LOGIN_EXTRA_PURCHASING_GROUP);
}
}

View File

@ -7,6 +7,7 @@ import com.nflg.wms.common.pojo.qo.RoleSearchQO;
import com.nflg.wms.common.pojo.vo.MenuVO;
import com.nflg.wms.common.pojo.vo.RoleVO;
import com.nflg.wms.repository.entity.Role;
import com.nflg.wms.repository.entity.User;
import java.util.List;
@ -23,4 +24,6 @@ public interface RoleMapper extends BaseMapper<Role> {
IPage<RoleVO> search(RoleSearchQO request, Page<?> objectPage);
List<MenuVO> getMenusByRoleCodes(Long serviceId, Long userId);
List<User> getUsersByCode(String code);
}

View File

@ -9,6 +9,7 @@ import com.nflg.wms.common.pojo.qo.RoleUpdateQO;
import com.nflg.wms.common.pojo.vo.MenuVO;
import com.nflg.wms.common.pojo.vo.RoleVO;
import com.nflg.wms.repository.entity.Role;
import com.nflg.wms.repository.entity.User;
import java.util.List;
@ -31,4 +32,6 @@ public interface IRoleService extends IService<Role> {
void enable(EnableQO request, String userName);
List<MenuVO> getMenusByRoleCodes(Long serviceId, Long userId);
List<User> getUsersByCode(String code);
}

View File

@ -12,6 +12,7 @@ import com.nflg.wms.common.pojo.vo.RoleVO;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.Menu;
import com.nflg.wms.repository.entity.Role;
import com.nflg.wms.repository.entity.User;
import com.nflg.wms.repository.mapper.RoleMapper;
import com.nflg.wms.repository.service.IAuditLogService;
import com.nflg.wms.repository.service.IMenuService;
@ -108,6 +109,11 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
return menus;
}
@Override
public List<User> getUsersByCode(String code) {
return baseMapper.getUsersByCode(code);
}
private void bindParent(MenuVO menu, List<MenuVO> datas) {
if (!Objects.equals(0L, menu.getParentId())) {
Menu mp = menuService.getById(menu.getParentId());

View File

@ -1,7 +1,6 @@
<?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.RoleMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.RoleVO">
SELECT *
FROM role
@ -17,7 +16,7 @@
</select>
<select id="getMenusByRoleCodes" resultType="com.nflg.wms.common.pojo.vo.MenuVO">
SELECT DISTINCT m.id, m.name, m.url, m.component, m.parent_id AS "parentId", m.show,m.sort
SELECT DISTINCT m.id, m.name, m.url, m.component, m.parent_id AS "parentId", m.show, m.sort
FROM role r
INNER JOIN role_menu_map rmm ON r.id = rmm.role_id
INNER JOIN menu m ON rmm.menu_id = m.id
@ -28,4 +27,12 @@
AND m.service_desc_id = #{serviceId}
order by m.id
</select>
<select id="getUsersByCode" resultType="com.nflg.wms.repository.entity.User">
SELECT u.*
FROM role r
INNER JOIN user_role_map urm ON r."id" = urm.role_id
INNER JOIN "user" u ON urm.user_id = u."id"
WHERE r.code = #{code}
</select>
</mapper>