Commit 287640ff by lijingjing

修改流程节点逻辑处理;

parent 1ba1fa62
......@@ -8,6 +8,7 @@ import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
......@@ -20,6 +21,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableAsync
@EnableCaching
@EnableSwagger2
@EnableScheduling
@EnableDiscoveryClient
@SpringBootApplication
@EnableTransactionManagement
......
package com.patzn.cloud.service.lims.hmhj.common;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.service.hmhj.enums.EntrustFlowEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustStatusEnum;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
/**
* 委托流程控制(状态控制)
*/
public class EntrustFlowUtils {
public static final String SEQ = "->";
public static List<String> getFlowStatusList(String statusPath) {
if (StringUtils.isBlank(statusPath)) {
return null;
}
return Arrays.asList(statusPath.split(SEQ));
}
public static EntrustFlowEnum getPrevFlowStatus(String name, String statusPath) {
if (StringUtils.isBlank(name)) {
return null;
}
List<String> list = getFlowStatusList(statusPath);
if (CollectionUtils.isEmpty(list)) {
return null;
}
int index = list.indexOf(name);
if (0 == index) {
return null;
}
return EntrustFlowEnum.convert(list.get(index - 1));
}
public static EntrustStatusEnum getPrevStatus(String name, String statusPath) {
EntrustFlowEnum prevFlowEnum = getPrevFlowStatus(name, statusPath);
return null == prevFlowEnum ? null : getStatus(prevFlowEnum.getValue().intValue());
}
public static EntrustStatusEnum getStatus(EntrustFlowEnum flowEnum) {
return null == flowEnum ? null : getStatus(flowEnum.getValue().intValue());
}
public static EntrustFlowEnum getNextFlowStatus(String name, String statusPath) {
if (StringUtils.isBlank(name)) {
return null;
}
List<String> list = getFlowStatusList(statusPath);
if (CollectionUtils.isEmpty(list)) {
return null;
}
int index = list.indexOf(name);
if (list.size() - 1 == index) {
return null;
}
return EntrustFlowEnum.convert(list.get(index + 1));
}
public static EntrustStatusEnum getNextStatus(String name, String statusPath) {
EntrustFlowEnum flowEnum = getNextFlowStatus(name, statusPath);
return null == flowEnum ? null : getStatus(flowEnum.getValue().intValue());
}
/**
* 根据流程状态值获取委托状态
*
* @param flowValue
* @return
*/
public static EntrustStatusEnum getStatus(int flowValue) {
EntrustStatusEnum statusEnum = null;
switch (flowValue) {
case 1:
statusEnum = EntrustStatusEnum.DRAFT;
break;
case 2:
statusEnum = EntrustStatusEnum.OUT_DRAFT;
break;
case 3:
statusEnum = EntrustStatusEnum.CHECK;
break;
case 4:
statusEnum = EntrustStatusEnum.MAKE;
break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
statusEnum = EntrustStatusEnum.TEST;
break;
case 13:
statusEnum = EntrustStatusEnum.OUT_INPUT;
break;
case 14:
statusEnum = EntrustStatusEnum.QUALITY_CHECK;
break;
}
return statusEnum;
}
}
package com.patzn.cloud.service.lims.hmhj.controller;
import com.patzn.cloud.feign.lims.hmhj.client.LmsChemicalCategoryClient;
import com.patzn.cloud.service.hmhj.entity.Material;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
......@@ -38,6 +39,9 @@ public class MaterialController extends ServiceController {
@Autowired
private IMaterialService materialService;
@Autowired
private LmsChemicalCategoryClient lmsChemicalCategoryClient;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
......@@ -83,4 +87,5 @@ public class MaterialController extends ServiceController {
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(materialService.removeByIds(ids));
}
}
......@@ -27,4 +27,6 @@ public interface EntrustMapper extends BatchMapper<Entrust> {
List<EntrustVO> selectVOList(RowBounds rowBounds, @Param("vo")EntrustVO entrust);
List<EntrustVO> selectEntrustProgressList(RowBounds rowBounds, @Param("vo")EntrustVO entrust);
List<EntrustVO> selectVOListByItem(Page<EntrustVO> page, @Param("vo") EntrustVO entrust);
}
......@@ -42,4 +42,6 @@ public interface EntrustSampleItemMapper extends BatchMapper<EntrustSampleItem>
List<EntrustSampleItemVO> selectMinStatusBySampleIds(@Param("sampleIds")List<Long> sampleIds);
List<EntrustSampleItemVO> selectByEntrustId(@Param("entrustId") Long entrustId);
int selectUnallocatedCountByEntrustId(@Param("entrustId") Long entrustId);
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.lims.collection.entity.LmsOriginalRecordInfo;
import java.util.List;
import java.util.Map;
/**
* <p>
* 原始记录解析后的数据存储表 Mapper 接口
* </p>
*
* @author meazty
* @since 2021-07-04
*/
public interface LmsOriginalRecordInfoMapper extends BatchMapper<LmsOriginalRecordInfo> {
/**
* @return
*/
List<LmsOriginalRecordInfo> selectUnGeneratedEntrustData();
List<LmsOriginalRecordInfo> selectUnGeneratedSampleData();
}
......@@ -67,4 +67,6 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
boolean updateQualityJudge(Long[] ids, Account account);
List<EntrustSampleItemVO> listMinStatusBySampleIds(List<Long> entrustIds);
public boolean isAllocatedByEntrustId(Long entrustId);
}
......@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.dto.SamplePrepareDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSample;
import com.patzn.cloud.service.hmhj.entity.EntrustSamplePrepare;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSamplePrepareStatusEnum;
import java.util.List;
......@@ -23,4 +26,6 @@ public interface IEntrustSamplePrepareService extends IBaseService<EntrustSample
boolean makeEnd(SamplePrepareDTO dto, Account account);
boolean submitSampleReceive(Long[] ids, Account account);
boolean addOrUpdateToSetStatus(Long[] sampleIds, EntrustSamplePrepareStatusEnum statusEnum);
}
......@@ -7,7 +7,9 @@ import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.ReportDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.EntrustSample;
import com.patzn.cloud.service.hmhj.enums.EntrustFlowEnum;
import com.patzn.cloud.service.hmhj.vo.AlTasteStatsVO;
import com.patzn.cloud.service.hmhj.vo.ElectrolyteRatioStatsVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
......@@ -65,4 +67,8 @@ public interface IEntrustSampleService extends IBaseService<EntrustSample> {
List<ElectrolyteRatioStatsVO> getElectrolyteRatioStatsQuery(QueryDTO queryDTO);
Map<String,Object> getPMakeFeStatsQuery(QueryDTO queryDTO);
boolean updateSampleNextFlowInfo(Entrust entrust, EntrustFlowEnum nextFlowStatus, Account account);
boolean updateSamplePrevFlowInfo(Entrust entrust, EntrustFlowEnum prevFlowStatus, Account account);
}
......@@ -43,8 +43,12 @@ public interface IEntrustService extends IBaseService<Entrust> {
Page<EntrustVO> pageEntrustByItem(Page<EntrustVO> page, EntrustVO entrust);
Page<EntrustVO> pageEntrustByItemData(Page<EntrustVO> page, EntrustVO entrust);
Page<EntrustVO> pageEntrustByItemHis(Page<EntrustVO> page, EntrustVO entrust);
Page<EntrustVO> pageEntrustByItemDataHis(Page<EntrustVO> page, EntrustVO entrust);
Page<EntrustVO> pageEntrustBySample(Page<EntrustVO> page, EntrustVO entrust);
Page<EntrustVO> pageEntrustByNotSample(Page<EntrustVO> page, EntrustVO entrust);
......@@ -67,5 +71,9 @@ public interface IEntrustService extends IBaseService<Entrust> {
boolean submitToNextNode(Long[] ids, Account account);
boolean submitToNextNode(Entrust entrust, Account account);
boolean rejectToPrevNode(Long id,String reason, Account account);
boolean rejectToPrevNode(Entrust entrust,String reason, Account account);
}
package com.patzn.cloud.service.lims.hmhj.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.lims.collection.entity.LmsOriginalRecordInfo;
import java.util.List;
/**
* 原始记录解析后的数据存储表 服务类
*
* @author meazty
* @since 2021-07-04
*/
public interface ILmsOriginalRecordInfoService extends IBaseService<LmsOriginalRecordInfo> {
Page<LmsOriginalRecordInfo> page(Page<LmsOriginalRecordInfo> page, LmsOriginalRecordInfo lmsOriginalRecordInfo);
boolean removeByIds(List<Long> ids);
boolean generateOriginalRelData();
}
......@@ -16,6 +16,7 @@ import com.patzn.cloud.service.hmhj.enums.EntrustStatusEnum;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.lims.common.CompareUtils;
import com.patzn.cloud.service.lims.hmhj.common.EntrustFlowUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustSampleItemMapper;
import com.patzn.cloud.service.lims.hmhj.original.*;
......@@ -131,9 +132,30 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
super.update(item, Condition.create().in("id", ids));
entrustSampleItemRecordService.record(ids, EntrustSampleItemStatusEnum.ALLOT.getDisplay(), EntrustSampleItemStatusEnum.TEST.getDisplay(), 0, "任务分配", account);
// 判定是否委托下的检测项目都已分配
Entrust entrust = getEntrustByItemId(ids[0]);
if(null != entrust && isAllocatedByEntrustId(entrust.getId()) && StringUtils.isNotBlank(entrust.getStatusPath())){
entrustService.submitToNextNode(entrust,account);
}
return true;
}
private Entrust getEntrustByItemId(Long itemId){
if(null == itemId){
return null;
}
EntrustSampleItem entrustSampleItem = baseMapper.selectById(itemId);
if(null == entrustSampleItem){
return null;
}
EntrustSample entrustSample = entrustSampleService.getById(entrustSampleItem.getEntrustSampleId());
if(null == entrustSample || null == entrustSample.getEntrustId()){
return null;
}
return entrustService.getById(entrustSample.getEntrustId());
}
@Override
public Page<EntrustSampleItemVO> pageByItemLeft(Page<EntrustSampleItemVO> page, EntrustSampleItemVO itemVO) {
......@@ -214,13 +236,20 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
// 提交为报告编制
EntrustSample sample = new EntrustSample().setStatus(EntrustSampleStatusEnum.REPORT_MAKE).setLid(account.getUserId()).setLtime(new Date());
entrustSampleService.update(sample, Condition.create().eq("entrust_id", entrustId));
// 提交到下一节点,可能是不更改状态
if(isConfigureStatusPath(entrust)){
entrustService.submitToNextNode(entrust,account);
return true;
}
// 样品操作日志
// 暂时不提供
// 修改委托信息
// entrust.setLid(account.getUserId()).setLtime(new Date()).setProgress(EntrustStatusEnum.TEST).setStatus(EntrustStatusEnum.TEST);
// entrustService.updateById(entrust);
entrust.setLid(account.getUserId()).setLtime(new Date()).setProgress(EntrustStatusEnum.TEST).setStatus(EntrustStatusEnum.TEST);
entrustService.updateById(entrust);
// 添加委托日志
entrustRecordService.record(new Long[]{entrustId}, EntrustStatusEnum.TEST.getDisplay(), EntrustStatusEnum.TEST.getDisplay(), 0, account, "提交至报告编制");
return true;
}
......@@ -691,5 +720,15 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
return baseMapper.selectVOListByIds(ids);
}
@Override
public boolean isAllocatedByEntrustId(Long entrustId){
if(null == entrustId || 0l== entrustId.longValue()){
return false;
}
return baseMapper.selectUnallocatedCountByEntrustId(entrustId) == 0;
}
private boolean isConfigureStatusPath(Entrust entrust){
return StringUtils.isBlank(entrust.getStatusPath()) ? false : true;
}
}
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.controller.LoginHelper;
import com.patzn.cloud.service.hmhj.entity.Entrust;
import com.patzn.cloud.service.hmhj.entity.EntrustSample;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustStatusEnum;
import com.patzn.cloud.service.lims.collection.entity.LmsOriginalRecordInfo;
import com.patzn.cloud.service.lims.hmhj.mapper.LmsOriginalRecordInfoMapper;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustSampleItemService;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustSampleService;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustService;
import com.patzn.cloud.service.lims.hmhj.service.ILmsOriginalRecordInfoService;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 原始记录解析后的数据存储表 服务实现类
*
* @author meazty
* @since 2021-07-04
*/
@Service
public class LmsOriginalRecordInfoServiceImpl extends BaseServiceImpl<LmsOriginalRecordInfoMapper, LmsOriginalRecordInfo> implements ILmsOriginalRecordInfoService {
@Autowired
private IEntrustService entrustService;
@Autowired
private IEntrustSampleService entrustSampleService;
@Autowired
private IEntrustSampleItemService entrustSampleItemService;
@Override
public Page<LmsOriginalRecordInfo> page(Page<LmsOriginalRecordInfo> page, LmsOriginalRecordInfo lmsOriginalRecordInfo) {
Wrapper wrapper = new EntityWrapper<>(lmsOriginalRecordInfo);
return this.page(page, wrapper);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 生成从委托到原始记录相关数据
*
* @return
*/
@Override
public boolean generateOriginalRelData() {
Account account = LoginHelper.getAccount();
// 查询未生成的委托数据
List<LmsOriginalRecordInfo> entrustList = baseMapper.selectUnGeneratedEntrustData();
if (CollectionUtils.isNotEmpty(entrustList)) {
List<Entrust> entrusts = entrustList.stream().map(t -> {
return new Entrust().setStatus(EntrustStatusEnum.TEST).setProgress(EntrustStatusEnum.TEST)
.setCode(t.getContractCode()).setCompanyId(account.getCompanyId()).setUid(account.getUserId());
}).collect(Collectors.toList());
entrustService.saveBatch(entrusts);
}
// 查询未生成的样品数据
List<LmsOriginalRecordInfo> sampleList = baseMapper.selectUnGeneratedSampleData();
if (CollectionUtils.isNotEmpty(sampleList)) {
List<EntrustSample> samples = sampleList.stream().map(t -> {
return new EntrustSample().setStatus(EntrustSampleStatusEnum.TEST).setProgress(EntrustSampleStatusEnum.TEST)
.setCode(t.getSampleNum()).setCompanyId(account.getCompanyId()).setUid(account.getUserId());
}).collect(Collectors.toList());
List<Entrust> entrusts = entrustService.list(Condition.create().setSqlSelect(new String[]{"id","code"})
.eq("status", EntrustStatusEnum.TEST.getValue())
.eq("deleted", 0));
entrustSampleService.saveBatch(samples);
}
return false;
}
}
package com.patzn.cloud.service.lims.schedule;
import com.patzn.cloud.service.lims.hmhj.service.ILmsOriginalRecordInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class LmsOriginalRecordInfoSchedule {
private Logger logger = LoggerFactory.getLogger(LmsOriginalRecordInfoSchedule.class);
@Autowired
private ILmsOriginalRecordInfoService lmsOriginalRecordInfoService;
/**
* 每隔5分钟,执行生成委托->样品->检测项目->原始记录数据
*/
@Scheduled(cron = "0 */50 * * * ?")
public void execute(){
logger.info("------每隔5分钟,执行生成委托->样品->检测项目->原始记录数据------");
// lmsOriginalRecordInfoService.generateOriginalRelData();
}
}
......@@ -58,6 +58,38 @@
order by entrust_time desc
</select>
<select id="selectVOListByItem" resultType="com.patzn.cloud.service.hmhj.vo.EntrustVO">
SELECT distinct e.* FROM
entrust e,entrust_sample s,entrust_sample_item i
WHERE e.deleted = 0 and s.deleted = 0 and i.deleted = 0
and s.entrust_id = e.id and i.entrust_sample_id = s.id
<if test="null!=vo.itemStatus">
and i.status = #{vo.itemStatus}
</if>
<if test="null!=vo.itemStatusEnumList">
AND i.status IN
<foreach collection="vo.itemStatusEnumList" index="index" item="status" open="(" separator="," close=")">
#{status}
</foreach>
</if>
<if test="null!=vo.groupNameList">
AND e.test_side IN
<foreach collection="vo.groupNameList" index="index" item="groupName" open="(" separator="," close=")">
#{groupName}
</foreach>
</if>
<if test="null!=vo.client">
AND e.client LIKE CONCAT('%',#{vo.client},'%')
</if>
<if test="null!=vo.code">
AND e.code LIKE CONCAT('%',#{vo.code},'%')
</if>
<if test="null!=vo.testSide">
AND e.test_side LIKE CONCAT('%',#{vo.testSide},'%')
</if>
order by e.entrust_time desc,e.code desc
</select>
<select id="selectEntrustProgressList" resultType="com.patzn.cloud.service.hmhj.vo.EntrustVO">
SELECT id,code,client,client_tel,entrust_time,assignor,test_side,status,progress,
......
......@@ -315,4 +315,12 @@
WHERE i.deleted = 0 AND s.deleted = 0
AND s.entrust_id = #{entrustId}
</select>
<select id="selectUnallocatedCountByEntrustId" resultType="int">
select count(1) from entrust_sample_item i
join entrust_sample s ON i.entrust_sample_id = s.ID
where i.deleted = 0 AND s.deleted = 0
and i.status = 0
AND s.entrust_id = #{entrustId}
</select>
</mapper>
<?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.patzn.cloud.service.lims.hmhj.mapper.LmsOriginalRecordInfoMapper">
<!--获取未生成的委托数据-->
<select id="selectUnGeneratedEntrustData"
resultType="com.patzn.cloud.service.lims.collection.entity.LmsOriginalRecordInfo">
select o.file_id,o.contract_code from lms_original_record_info o
where o.deleted = 0
and o.contract_code is not null
and not exists (select 1 from entrust e where e.deleted = 0 and e.code = o.contract_code)
group by o.file_id, o.contract_code order by o.file_id
</select>
<select id="selectUnGeneratedSampleData"
resultType="com.patzn.cloud.service.lims.collection.entity.LmsOriginalRecordInfo">
select o.file_id,o.contract_code,o.sample_num from lms_original_record_info o
where o.deleted = 0
and o.contract_code is not null
and o.sample_num is not null
and not exists (
select 1 from entrust e,entrust_sample s
where
e.deleted = 0
and e.code = o.contract_code
and s.entrust_id = e.id
and s.code = o.sample_num
)
group by o.file_id, o.contract_code, o.sample_num order by o.file_id
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment