Merge remote-tracking branch 'origin/feature/NoScanning' into feature/NoScanning
This commit is contained in:
commit
4a2f6acb05
|
|
@ -3,6 +3,7 @@ package com.nflg.qms.admin.controller.external;
|
|||
import com.nflg.wms.common.pojo.ApiResult;
|
||||
import com.nflg.wms.common.pojo.qo.ExemptMaterialCheckQO;
|
||||
import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO;
|
||||
import com.nflg.wms.repository.service.IQmsExemptCategoryService;
|
||||
import com.nflg.wms.repository.service.IQmsExemptMaterialService;
|
||||
import com.nflg.wms.starter.BaseController;
|
||||
import jakarta.annotation.Resource;
|
||||
|
|
@ -15,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 对外接口-物料信息
|
||||
|
|
@ -28,15 +31,42 @@ public class MaterialController extends BaseController {
|
|||
@Resource
|
||||
private IQmsExemptMaterialService exemptMaterialService;
|
||||
|
||||
@Resource
|
||||
private IQmsExemptCategoryService exemptCategoryService;
|
||||
|
||||
/**
|
||||
* 批量判断物料是否免检
|
||||
* - 参数为供应商编号和物料编号的组合列表
|
||||
* - 根据系统中已审核、已启用且在有效期内的免检设置判断
|
||||
* - 先按免检物料判断,命中则视为免检;未命中再按免检类别判断
|
||||
* - 仅根据系统中已审核、已启用且在有效期内的免检设置判断
|
||||
* - 返回每个组合的免检标志(exempt=true 表示免检)
|
||||
*/
|
||||
@PostMapping("batchCheckExempt")
|
||||
public ApiResult<List<ExemptMaterialCheckVO>> batchCheckExempt(
|
||||
@Valid @RequestBody @NotEmpty List<ExemptMaterialCheckQO> request) {
|
||||
return ApiResult.success(exemptMaterialService.batchCheckExempt(request));
|
||||
// 物料级免检判断
|
||||
List<ExemptMaterialCheckVO> result = exemptMaterialService.batchCheckExempt(request);
|
||||
|
||||
// 物料级未命中的组合,再做类别级免检判断
|
||||
List<ExemptMaterialCheckQO> remaining = result.stream()
|
||||
.filter(vo -> !Boolean.TRUE.equals(vo.getExempt()))
|
||||
.map(vo -> new ExemptMaterialCheckQO(vo.getSupplierCode(), vo.getMaterialNo()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!remaining.isEmpty()) {
|
||||
Set<String> categoryExemptKeys = exemptCategoryService.batchCheckExempt(remaining).stream()
|
||||
.filter(vo -> Boolean.TRUE.equals(vo.getExempt()))
|
||||
.map(vo -> vo.getSupplierCode() + ":" + vo.getMaterialNo())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
result.forEach(vo -> {
|
||||
if (!Boolean.TRUE.equals(vo.getExempt())
|
||||
&& categoryExemptKeys.contains(vo.getSupplierCode() + ":" + vo.getMaterialNo())) {
|
||||
vo.setExempt(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return ApiResult.success(result);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ public class InProduceOrderController extends BaseController {
|
|||
.setCreateTime(LocalDateTime.now())
|
||||
);
|
||||
}
|
||||
qmsService.pushPdiInspection(order.getNo(), parent);
|
||||
qmsService.pushPdiInspection(order.getOrderNo(), parent);
|
||||
return ApiResult.success(order.getId());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ 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.QmsExemptCategorySearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsExemptCategoryVO;
|
||||
import com.nflg.wms.repository.entity.QmsExemptCategory;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
|
@ -29,4 +30,11 @@ public interface QmsExemptCategoryMapper extends BaseMapper<QmsExemptCategory> {
|
|||
* 按物料类别编码查询关联的供应商免检明细
|
||||
*/
|
||||
List<QmsExemptCategoryVO> detailByCategory(@Param("categoryCode") String categoryCode);
|
||||
|
||||
/**
|
||||
* 批量查询类别级有效免检组合(供应商编号+物料编号)
|
||||
* 通过物料所属类别匹配免检类别,仅返回审核通过、启用且在有效期内的记录
|
||||
*/
|
||||
List<ExemptMaterialCheckVO> batchCheckExempt(@Param("supplierCodes") List<String> supplierCodes,
|
||||
@Param("materialNos") List<String> materialNos);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package com.nflg.wms.repository.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.nflg.wms.common.pojo.qo.ExemptMaterialCheckQO;
|
||||
import com.nflg.wms.common.pojo.qo.QmsExemptCategorySearchQO;
|
||||
import com.nflg.wms.common.pojo.qo.QmsExemptCategorySaveQO;
|
||||
import com.nflg.wms.common.pojo.qo.QmsExemptMaterialAuditQO;
|
||||
import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsExemptCategoryVO;
|
||||
import com.nflg.wms.repository.entity.QmsExemptCategory;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
|
@ -44,4 +46,10 @@ public interface IQmsExemptCategoryService extends IService<QmsExemptCategory> {
|
|||
* 审核
|
||||
*/
|
||||
void audit(QmsExemptMaterialAuditQO request);
|
||||
|
||||
/**
|
||||
* 批量判断物料是否类别级免检
|
||||
* 通过物料所属类别匹配免检类别,返回每个请求组合的免检标志
|
||||
*/
|
||||
List<ExemptMaterialCheckVO> batchCheckExempt(List<ExemptMaterialCheckQO> items);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.wms.common.constant.STATE;
|
||||
import com.nflg.wms.common.exception.NflgException;
|
||||
import com.nflg.wms.common.pojo.qo.ExemptMaterialCheckQO;
|
||||
import com.nflg.wms.common.pojo.qo.QmsExemptCategorySearchQO;
|
||||
import com.nflg.wms.common.pojo.qo.QmsExemptCategorySaveQO;
|
||||
import com.nflg.wms.common.pojo.qo.QmsExemptMaterialAuditQO;
|
||||
import com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsExemptCategoryVO;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.repository.entity.QmsExemptCategory;
|
||||
|
|
@ -20,7 +22,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 免检物料类别 服务实现类
|
||||
|
|
@ -165,4 +170,32 @@ public class QmsExemptCategoryServiceImpl extends ServiceImpl<QmsExemptCategoryM
|
|||
}
|
||||
return LocalDateTime.parse(dateStr, DATE_FMT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ExemptMaterialCheckVO> batchCheckExempt(List<ExemptMaterialCheckQO> items) {
|
||||
List<String> supplierCodes = items.stream()
|
||||
.map(ExemptMaterialCheckQO::getSupplierCode)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<String> materialNos = items.stream()
|
||||
.map(ExemptMaterialCheckQO::getMaterialNo)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<ExemptMaterialCheckVO> exemptList = baseMapper.batchCheckExempt(supplierCodes, materialNos);
|
||||
|
||||
Set<String> exemptSet = exemptList.stream()
|
||||
.map(v -> v.getSupplierCode() + ":" + v.getMaterialNo())
|
||||
.collect(Collectors.toCollection(HashSet::new));
|
||||
|
||||
List<ExemptMaterialCheckVO> result = new ArrayList<>(items.size());
|
||||
for (ExemptMaterialCheckQO item : items) {
|
||||
ExemptMaterialCheckVO vo = new ExemptMaterialCheckVO();
|
||||
vo.setSupplierCode(item.getSupplierCode());
|
||||
vo.setMaterialNo(item.getMaterialNo());
|
||||
vo.setExempt(exemptSet.contains(item.getSupplierCode() + ":" + item.getMaterialNo()));
|
||||
result.add(vo);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -154,4 +154,28 @@
|
|||
ORDER BY ec.create_time DESC
|
||||
</select>
|
||||
|
||||
<!-- 批量查询类别级有效免检组合,通过物料所属类别匹配免检类别,仅返回审核通过、启用且在有效期内的记录 -->
|
||||
<select id="batchCheckExempt" resultType="com.nflg.wms.common.pojo.vo.ExemptMaterialCheckVO">
|
||||
SELECT DISTINCT
|
||||
us.supplier_code AS supplierCode,
|
||||
qm.material_no AS materialNo
|
||||
FROM qms_exempt_category ec
|
||||
INNER JOIN user_supplier us ON us.id = ec.supplier_id
|
||||
INNER JOIN qms_qc_material qm ON qm.material_category_code = ec.category_code
|
||||
WHERE ec.audit_status = 1
|
||||
AND ec.enable = true
|
||||
AND (
|
||||
ec.exempt_mode = 0
|
||||
OR (ec.exempt_mode = 1 AND ec.valid_end_date IS NOT NULL AND ec.valid_end_date >= NOW())
|
||||
)
|
||||
AND us.supplier_code IN
|
||||
<foreach collection="supplierCodes" item="code" open="(" separator="," close=")">
|
||||
#{code}
|
||||
</foreach>
|
||||
AND qm.material_no IN
|
||||
<foreach collection="materialNos" item="no" open="(" separator="," close=")">
|
||||
#{no}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue