Commit 8bd24004 by wangweidong

样品流转模块管理

parent 97a01da3
...@@ -6,6 +6,7 @@ import com.patzn.lims.core.PtConstants; ...@@ -6,6 +6,7 @@ import com.patzn.lims.core.PtConstants;
import com.patzn.lims.core.api.PtResult; import com.patzn.lims.core.api.PtResult;
import com.patzn.lims.core.web.ServiceController; import com.patzn.lims.core.web.ServiceController;
import com.patzn.lims.drug.dto.DrugSampleDTO; import com.patzn.lims.drug.dto.DrugSampleDTO;
import com.patzn.lims.drug.dto.DrugSampleFlowDTO;
import com.patzn.lims.drug.dto.DrugSampleReportDTO; import com.patzn.lims.drug.dto.DrugSampleReportDTO;
import com.patzn.lims.drug.entity.DrugSample; import com.patzn.lims.drug.entity.DrugSample;
import com.patzn.lims.drug.entity.DrugSampleOperation; import com.patzn.lims.drug.entity.DrugSampleOperation;
...@@ -404,6 +405,38 @@ public class DrugSampleController extends ServiceController<IDrugSampleService, ...@@ -404,6 +405,38 @@ public class DrugSampleController extends ServiceController<IDrugSampleService,
return success(baseService.pageVO(getPage(), vo)); return success(baseService.pageVO(getPage(), vo));
} }
@ApiOperation(value = "样品接收分页列表", notes = "样品接收分页查询数据列表")
@ApiImplicitParams({
@ApiImplicitParam(name = PtConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataType = "int"),
@ApiImplicitParam(name = PtConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataType = "int"),
@ApiImplicitParam(name = PtConstants.PAGE_SIDX, value = "排序字段", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = PtConstants.PAGE_SORD, value = "排序方式", paramType = "query", dataType = "String"),
})
@PostMapping("/page-sample-flow")
public PtResult<IPage<DrugSampleVO>> getPageSampleFlow(DrugSampleVO vo) {
vo.setStatus(SampleStatusEnum.FLOW);
vo.setCompanyId(getAccount().getCompanyId());
vo.setItemStatus(ItemStatusEnum.DRAFT);
return success(baseService.pageSampleFlow(getPage(), vo));
}
@ApiOperation(value = "样品流转历史分页列表", notes = "样品流转历史分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = PtConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataType = "int"),
@ApiImplicitParam(name = PtConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataType = "int"),
@ApiImplicitParam(name = PtConstants.PAGE_SIDX, value = "排序字段", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = PtConstants.PAGE_SORD, value = "排序方式", paramType = "query", dataType = "String"),
})
@PostMapping("/page-sample-flow-his")
public PtResult<IPage<DrugSampleVO>> getPageSampleFlowHis(DrugSampleVO vo) {
vo.setCompanyId(getAccount().getCompanyId());
return success(baseService.pageSampleFlowHis(getPage(), vo));
}
@ApiOperation(value = "样品接收历史分页列表", notes = "分页查询数据列表") @ApiOperation(value = "样品接收历史分页列表", notes = "分页查询数据列表")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = PtConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataType = "int"), @ApiImplicitParam(name = PtConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataType = "int"),
...@@ -446,6 +479,14 @@ public class DrugSampleController extends ServiceController<IDrugSampleService, ...@@ -446,6 +479,14 @@ public class DrugSampleController extends ServiceController<IDrugSampleService,
return success(baseService.submitReceive(ids,getAccount())); return success(baseService.submitReceive(ids,getAccount()));
} }
@ApiOperation(value = "样品接收提交", notes = "样品接收提交")
@PostMapping("/submit-receive-to-flow")
public PtResult<Boolean> submitReceiveToFlow(@RequestParam("ids") Long [] ids) {
return success(baseService.submitReceiveToFlow(ids,getAccount()));
}
@ApiOperation(value = "样品接收扫码提交", notes = "样品接收扫码提交") @ApiOperation(value = "样品接收扫码提交", notes = "样品接收扫码提交")
@PostMapping("/scan-submit-receive") @PostMapping("/scan-submit-receive")
public PtResult<Boolean> scanSubmitReceive(@RequestParam("sampleCode")String sampleCode) { public PtResult<Boolean> scanSubmitReceive(@RequestParam("sampleCode")String sampleCode) {
...@@ -495,7 +536,6 @@ public class DrugSampleController extends ServiceController<IDrugSampleService, ...@@ -495,7 +536,6 @@ public class DrugSampleController extends ServiceController<IDrugSampleService,
}) })
@PostMapping("/page-sample-input") @PostMapping("/page-sample-input")
public PtResult<IPage<DrugSampleVO>> getPageSampleInput(DrugSampleVO vo) { public PtResult<IPage<DrugSampleVO>> getPageSampleInput(DrugSampleVO vo) {
vo.setStatus(SampleStatusEnum.TEST);
vo.setItemStatus(ItemStatusEnum.INPUT); vo.setItemStatus(ItemStatusEnum.INPUT);
vo.setCompanyId(getAccount().getCompanyId()); vo.setCompanyId(getAccount().getCompanyId());
return success(baseService.pageVOByItemStatus(getPage(), vo)); return success(baseService.pageVOByItemStatus(getPage(), vo));
...@@ -1075,4 +1115,12 @@ public class DrugSampleController extends ServiceController<IDrugSampleService, ...@@ -1075,4 +1115,12 @@ public class DrugSampleController extends ServiceController<IDrugSampleService,
return success(baseService.editSampleVO(dto,getAccount())); return success(baseService.editSampleVO(dto,getAccount()));
} }
@ApiOperation(value = "样品流转提交", notes = "样品流转提交")
@PostMapping("/submit-flow")
public PtResult<Boolean> submitFlow(@RequestBody DrugSampleFlowDTO flowDTO) {
return success(baseService.submitFlow(flowDTO,getAccount()));
}
} }
...@@ -21,6 +21,7 @@ public enum SampleStatusEnum implements IBaseEnum { ...@@ -21,6 +21,7 @@ public enum SampleStatusEnum implements IBaseEnum {
MAKE(10, "样品制备"), MAKE(10, "样品制备"),
SEND(20, "样品送样"), SEND(20, "样品送样"),
RECEIVE(30, "样品接收"), RECEIVE(30, "样品接收"),
FLOW(35, "样品流转"),
TEST(40, "样品检测"), TEST(40, "样品检测"),
REPORT_MAKE(60, "报告编制"), REPORT_MAKE(60, "报告编制"),
REPORT_CHECK(70, "报告审核"), REPORT_CHECK(70, "报告审核"),
......
...@@ -21,6 +21,12 @@ public interface DrugSampleMapper extends BaseMapper<DrugSample> { ...@@ -21,6 +21,12 @@ public interface DrugSampleMapper extends BaseMapper<DrugSample> {
Page<DrugSampleVO> selectVOList(Page page, @Param("vo") DrugSampleVO vo); Page<DrugSampleVO> selectVOList(Page page, @Param("vo") DrugSampleVO vo);
Page<DrugSampleVO> selectVOFlowList(Page page, @Param("vo") DrugSampleVO vo);
Page<DrugSampleVO> selectVOFlowHisList(Page page, @Param("vo") DrugSampleVO vo);
Page<DrugSampleVO> selectVOByItemStatusList(Page page,@Param("vo") DrugSampleVO vo); Page<DrugSampleVO> selectVOByItemStatusList(Page page,@Param("vo") DrugSampleVO vo);
Page<DrugSampleOosVO> selectOosRegister(Page page, @Param("vo") DrugSampleOosVO vo); Page<DrugSampleOosVO> selectOosRegister(Page page, @Param("vo") DrugSampleOosVO vo);
......
...@@ -50,6 +50,10 @@ public interface IDrugItemService extends IBaseService<DrugItem> { ...@@ -50,6 +50,10 @@ public interface IDrugItemService extends IBaseService<DrugItem> {
boolean updateByCondition(Long[] ids, ItemStatusEnum allocate); boolean updateByCondition(Long[] ids, ItemStatusEnum allocate);
boolean updateByCondition(List<Long> ids, ItemStatusEnum allocate);
boolean updateByConditionIds(List<Long> ids, ItemStatusEnum allocate);
boolean adjustTester(Long[] ids, DrugItemAllocate allocate, Account account); boolean adjustTester(Long[] ids, DrugItemAllocate allocate, Account account);
Page<DrugItemVO> pageDispatch(Page page, DrugItemVO vo); Page<DrugItemVO> pageDispatch(Page page, DrugItemVO vo);
......
...@@ -5,6 +5,7 @@ import com.patzn.lims.core.web.Account; ...@@ -5,6 +5,7 @@ import com.patzn.lims.core.web.Account;
import com.patzn.lims.core.web.IBaseService; import com.patzn.lims.core.web.IBaseService;
import com.patzn.lims.drug.entity.DrugSampleOperation; import com.patzn.lims.drug.entity.DrugSampleOperation;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
...@@ -27,6 +28,10 @@ public interface IDrugSampleOperationService extends IBaseService<DrugSampleOper ...@@ -27,6 +28,10 @@ public interface IDrugSampleOperationService extends IBaseService<DrugSampleOper
boolean updateReceiveToTest(Account account, Long[] ids); boolean updateReceiveToTest(Account account, Long[] ids);
boolean updateReceiveToTest(Account account, Collection<Long> ids);
boolean updateReceiveToFlow(Account account, Long[] ids);
boolean updateSampleToReport(List<Long> sampleIdEnd, Account account); boolean updateSampleToReport(List<Long> sampleIdEnd, Account account);
boolean updateReportMakeInfo(Long[] ids, Account account); boolean updateReportMakeInfo(Long[] ids, Account account);
......
...@@ -6,6 +6,8 @@ import com.patzn.lims.core.web.IBaseService; ...@@ -6,6 +6,8 @@ import com.patzn.lims.core.web.IBaseService;
import com.patzn.lims.drug.entity.DrugSampleRecord; import com.patzn.lims.drug.entity.DrugSampleRecord;
import com.patzn.lims.drug.eunms.SampleStatusEnum; import com.patzn.lims.drug.eunms.SampleStatusEnum;
import java.util.Collection;
/** /**
* <p> * <p>
* 食药样品操作日志表 服务类 * 食药样品操作日志表 服务类
...@@ -23,5 +25,7 @@ public interface IDrugSampleRecordService extends IBaseService<DrugSampleRecord> ...@@ -23,5 +25,7 @@ public interface IDrugSampleRecordService extends IBaseService<DrugSampleRecord>
boolean record(Account account, SampleStatusEnum draft, SampleStatusEnum make, Long[] ids,String remark); boolean record(Account account, SampleStatusEnum draft, SampleStatusEnum make, Long[] ids,String remark);
boolean record(Account account, SampleStatusEnum draft, SampleStatusEnum make, Collection<Long> ids, String remark);
boolean record(Account account, SampleStatusEnum draft, SampleStatusEnum make, Long[] ids,Integer type,String remark); boolean record(Account account, SampleStatusEnum draft, SampleStatusEnum make, Long[] ids,Integer type,String remark);
} }
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.patzn.lims.core.web.Account; import com.patzn.lims.core.web.Account;
import com.patzn.lims.core.web.IBaseService; import com.patzn.lims.core.web.IBaseService;
import com.patzn.lims.drug.dto.DrugSampleDTO; import com.patzn.lims.drug.dto.DrugSampleDTO;
import com.patzn.lims.drug.dto.DrugSampleFlowDTO;
import com.patzn.lims.drug.dto.DrugSampleReportDTO; import com.patzn.lims.drug.dto.DrugSampleReportDTO;
import com.patzn.lims.drug.entity.DrugSample; import com.patzn.lims.drug.entity.DrugSample;
import com.patzn.lims.drug.vo.DrugSampleOosVO; import com.patzn.lims.drug.vo.DrugSampleOosVO;
...@@ -26,6 +27,12 @@ public interface IDrugSampleService extends IBaseService<DrugSample> { ...@@ -26,6 +27,12 @@ public interface IDrugSampleService extends IBaseService<DrugSample> {
Page<DrugSampleVO> pageVO(Page page, DrugSampleVO vo); Page<DrugSampleVO> pageVO(Page page, DrugSampleVO vo);
Page<DrugSampleVO> pageSampleFlow(Page page, DrugSampleVO vo);
Page<DrugSampleVO> pageSampleFlowHis(Page page, DrugSampleVO vo);
boolean addRegister(DrugSampleDTO dto, Account account); boolean addRegister(DrugSampleDTO dto, Account account);
boolean submitRegister(Long[] ids, Account account); boolean submitRegister(Long[] ids, Account account);
...@@ -34,6 +41,9 @@ public interface IDrugSampleService extends IBaseService<DrugSample> { ...@@ -34,6 +41,9 @@ public interface IDrugSampleService extends IBaseService<DrugSample> {
boolean submitReceive(Long[] ids, Account account); boolean submitReceive(Long[] ids, Account account);
boolean submitReceiveToFlow(Long[] ids, Account account);
Page<DrugSampleVO> pageVOByItemStatus(Page page, DrugSampleVO vo); Page<DrugSampleVO> pageVOByItemStatus(Page page, DrugSampleVO vo);
DrugSampleVO getSampleVO(Long id); DrugSampleVO getSampleVO(Long id);
...@@ -91,4 +101,7 @@ public interface IDrugSampleService extends IBaseService<DrugSample> { ...@@ -91,4 +101,7 @@ public interface IDrugSampleService extends IBaseService<DrugSample> {
int countPersonalSampleReceive(Long userId); int countPersonalSampleReceive(Long userId);
boolean submitFlow(DrugSampleFlowDTO flowDTO, Account account);
} }
package com.patzn.lims.drug.service.impl; package com.patzn.lims.drug.service.impl;
import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.*;
import com.patzn.lims.common.DateUtils;
import com.patzn.lims.common.ObjectUtils; import com.patzn.lims.common.ObjectUtils;
import com.patzn.lims.common.StringHandleUtils; import com.patzn.lims.common.StringHandleUtils;
import com.patzn.lims.core.api.PtAssert; import com.patzn.lims.core.api.PtAssert;
import com.patzn.lims.core.web.Account; import com.patzn.lims.core.web.Account;
import com.patzn.lims.drug.dto.DrugItemRelEquipDTO; import com.patzn.lims.drug.dto.*;
import com.patzn.lims.drug.entity.*; import com.patzn.lims.drug.entity.*;
import com.patzn.lims.drug.eunms.ItemStatusEnum; import com.patzn.lims.drug.eunms.ItemStatusEnum;
import com.patzn.lims.drug.eunms.SampleStatusEnum; import com.patzn.lims.drug.eunms.SampleStatusEnum;
...@@ -17,9 +18,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -17,9 +18,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.patzn.lims.drug.vo.DrugItemVO; import com.patzn.lims.drug.vo.DrugItemVO;
//import com.patzn.lims.sys.service.ISysMessageService; //import com.patzn.lims.sys.service.ISysMessageService;
import com.patzn.lims.drug.vo.DrugSampleVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -385,6 +391,26 @@ public class DrugItemServiceImpl extends BaseServiceImpl<DrugItemMapper, DrugIte ...@@ -385,6 +391,26 @@ public class DrugItemServiceImpl extends BaseServiceImpl<DrugItemMapper, DrugIte
} }
@Override
public boolean updateByCondition(List<Long> ids, ItemStatusEnum allocate) {
if (CollectionUtils.isEmpty(ids)){
return false;
}
return super.update(new DrugItem().setProgress(allocate).setStatus(allocate),
Wrappers.<DrugItem>query().in("sample_id",ids));
}
@Override
public boolean updateByConditionIds(List<Long> ids, ItemStatusEnum allocate) {
if (CollectionUtils.isEmpty(ids)){
return false;
}
return super.update(new DrugItem().setProgress(allocate).setStatus(allocate),
Wrappers.<DrugItem>query().in("id",ids));
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean adjustTester(Long[] ids, DrugItemAllocate allocate, Account account) { public boolean adjustTester(Long[] ids, DrugItemAllocate allocate, Account account) {
...@@ -645,4 +671,213 @@ public class DrugItemServiceImpl extends BaseServiceImpl<DrugItemMapper, DrugIte ...@@ -645,4 +671,213 @@ public class DrugItemServiceImpl extends BaseServiceImpl<DrugItemMapper, DrugIte
} }
return updateItem; return updateItem;
} }
@Override
public StatisticPersonalTest getPersonaTestStatistic(StatisticPersonalTest test, Account account) {
StatisticPersonalTest personalTest = new StatisticPersonalTest();
if (1==1){
int insTotal = drugSampleService.count(Wrappers.<DrugSample>query().eq("pc_person_id",account.getUserId()));
Date nowDay = new Date();
List<String> daysList = new ArrayList<>();
for (int i = 6; i >0 ; i--) {
daysList.add(DateUtils.toYearMonthDay(DateUtils.dateAddDays(nowDay,-i)));
}
daysList.add(DateUtils.toYearMonthDay(nowDay));
List<DrugSampleVO> insList = drugSampleService.getInsList(daysList,account.getUserId());
List<SevenInspection> sevenInspectionList = new ArrayList<>();
int nowDayNum = 0 ;
for (String s:daysList) {
SevenInspection sevenInspection = new SevenInspection();
int num =0;
for (DrugSampleVO sample:insList) {
if (s.equals(sample.getCtimeStr())){
num++;
}
}
sevenInspection.setDayIns(s);
sevenInspection.setInsNum(num);
if (s.equals(DateUtils.toYearMonthDay(nowDay))){
nowDayNum= num;
}
sevenInspectionList.add(sevenInspection);
}
personalTest.setListSeven(sevenInspectionList);
personalTest.setInspectionTotal(insTotal);
personalTest.setInspectionDayNum(nowDayNum);
int receiveTotal = drugSampleService.countPersonalSampleReceive(account.getUserId());
List<DrugSampleVO> receiveList = drugSampleService.getReceiveList(daysList,account.getUserId());
int nowDayReceiveNum = 0 ;
List<SevenInspection> sevenReceiveList = new ArrayList<>();
for (String s:daysList) {
SevenInspection sevenInspection = new SevenInspection();
int num =0;
for (DrugSampleVO sample:receiveList) {
if (s.equals(sample.getCtimeStr())){
num++;
}
}
sevenInspection.setDayIns(s);
sevenInspection.setInsNum(num);
if (s.equals(DateUtils.toYearMonthDay(nowDay))){
nowDayReceiveNum= num;
}
sevenReceiveList.add(sevenInspection);
}
personalTest.setReceiveTotal(receiveTotal);
personalTest.setReceiveDayNum(nowDayReceiveNum);
personalTest.setListSevenReceive(sevenReceiveList);
}
test.setUid(account.getUserId());
test.setLastWeekBegin(DateUtils.getBeginDayOfLastWeek());
test.setLastWeekEnd(DateUtils.getEndDayOfLastWeek());
test.setItemStatusEnum(ItemStatusEnum.INPUT);
Integer total= baseMapper.getPersonalTestNumber(account);
if (total == 0){
personalTest.setDayOnDay("0%");
personalTest.setWeekOnWeek("0%");
personalTest.setTaskTotal(0);
personalTest.setTestedTotal(0);
personalTest.setNoTestNum(0);
return personalTest;
}
StatisticPersonalTest statisticPersonalTest= baseMapper.getPersonTest(test);
if (null != statisticPersonalTest){
personalTest.setTaskTotal(total);
personalTest.setNoTestNum(statisticPersonalTest.getNoTestNum());
Integer nowWeek = (null == statisticPersonalTest.getWeekNum()?0:statisticPersonalTest.getWeekNum());
Integer lastWeek = (null == statisticPersonalTest.getLastWeekNum()?0:statisticPersonalTest.getLastWeekNum());
if (0 == lastWeek){
personalTest.setWeekOnWeek("上周项目量为0 本周项目量为 "+nowWeek);
}else{
BigDecimal fenzi = new BigDecimal(nowWeek -lastWeek);
BigDecimal fenmu = new BigDecimal(lastWeek);
BigDecimal dayOnDay= fenzi.divide(fenmu,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
personalTest.setWeekOnWeek(dayOnDay.toString()+"%");
}
Integer nowDay = (null == statisticPersonalTest.getDayNum()?0:statisticPersonalTest.getDayNum());
Integer lastDay = (null == statisticPersonalTest.getYesDayNum()?0:statisticPersonalTest.getYesDayNum());
if (0 == lastDay){
personalTest.setDayOnDay("昨天项目量为0 今天项目量为 "+nowDay);
}else{
BigDecimal fenzi = new BigDecimal(nowDay -lastDay);
BigDecimal fenmu = new BigDecimal(lastDay);
BigDecimal dayOnDay= fenzi.divide(fenmu,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
personalTest.setDayOnDay(dayOnDay.toString()+"%");
}
}
return personalTest;
}
@Override
public List<StatisticSampleRank> getSampleRank(StatisticSampleRank rank, Account account) {
return baseMapper.getSampleRank(rank,account);
}
@Override
public List<StatisticNotOK> getItemFail(StatisticNotOK notOK, Account account) {
notOK.setJudgeEnum(SingleJudgeEnum.FAIL);
return baseMapper.getItemFail(notOK,account);
}
@Override
public Page<DrugItemVO> pageItemFail(Page page,DrugItemVO notOK, Account account) {
notOK.setSingleJudge(SingleJudgeEnum.FAIL);
return baseMapper.pageItemFail(page,notOK);
}
@Override
public StatisticSampleItem getSampleItemNum(StatisticSampleItem sampleItem, Account account) {
Date nowDay = new Date();
List<String> daysList = new ArrayList<>();
for (int i = 6; i >0 ; i--) {
daysList.add(DateUtils.toYearMonthDay(DateUtils.dateAddDays(nowDay,-i)));
}
daysList.add(DateUtils.toYearMonthDay(nowDay));
List<StatisticSampleRank> listSampleNum = baseMapper.selectSampleNumByDay(daysList);
List<StatisticSampleRank> listItemNum = baseMapper.selectItemNumByDay(daysList);
Map<String,Integer> mapSample= listSampleNum.stream().collect(Collectors.toMap(StatisticSampleRank::getName,StatisticSampleRank::getNumber));
Map<String,Integer> mapItem= listItemNum.stream().collect(Collectors.toMap(StatisticSampleRank::getName,StatisticSampleRank::getNumber));
List<StatisticSampleRank> reSample = new ArrayList<>();
List<StatisticSampleRank> reItem = new ArrayList<>();
int daySample = 0 ;
String nowDayStr = DateUtils.toYearMonthDay(nowDay);
if (null !=mapSample.get(nowDayStr)){
daySample=mapSample.get(nowDayStr);
}
int dayItem = 0 ;
if (null !=mapItem.get(nowDayStr)){
dayItem=mapItem.get(nowDayStr);
}
for (String s:daysList) {
if (mapSample.containsKey(s)){
StatisticSampleRank sampleRank = new StatisticSampleRank();
sampleRank.setName(s);
sampleRank.setNumber(mapSample.get(s));
reSample.add(sampleRank);
}else{
StatisticSampleRank sampleRank = new StatisticSampleRank();
sampleRank.setName(s);
sampleRank.setNumber(0);
reSample.add(sampleRank);
}
if (mapItem.containsKey(s)){
StatisticSampleRank sampleRank = new StatisticSampleRank();
sampleRank.setName(s);
sampleRank.setNumber(mapItem.get(s));
reItem.add(sampleRank);
}else{
StatisticSampleRank sampleRank = new StatisticSampleRank();
sampleRank.setName(s);
sampleRank.setNumber(0);
reItem.add(sampleRank);
}
}
StatisticSampleItem statisticSampleItem = new StatisticSampleItem();
statisticSampleItem.setSampleRank(reSample);
statisticSampleItem.setItemRank(reItem);
statisticSampleItem.setDaySample(daySample);
statisticSampleItem.setDayItem(dayItem);
statisticSampleItem.setTotalSample(drugSampleService.count());
return statisticSampleItem;
}
} }
...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -54,7 +55,18 @@ public class DrugSampleOperationServiceImpl extends BaseServiceImpl<DrugSampleOp ...@@ -54,7 +55,18 @@ public class DrugSampleOperationServiceImpl extends BaseServiceImpl<DrugSampleOp
.setReceiveTime(new Date()),Wrappers.<DrugSampleOperation>query().in("sample_id",ids)); .setReceiveTime(new Date()),Wrappers.<DrugSampleOperation>query().in("sample_id",ids));
} }
@Override
public boolean updateReceiveToTest(Account account, Collection<Long> ids) {
return super.update(new DrugSampleOperation().setReceiver(account.getUserName()).setReceiverId(account.getUserId())
.setReceiveTime(new Date()),Wrappers.<DrugSampleOperation>query().in("sample_id",ids));
}
@Override
public boolean updateReceiveToFlow(Account account, Long[] ids) {
return super.update(new DrugSampleOperation().setReceiver(account.getUserName()).setReceiverId(account.getUserId())
.setReceiveTime(new Date()),Wrappers.<DrugSampleOperation>query().in("sample_id",ids));
}
@Override @Override
......
package com.patzn.lims.drug.service.impl; package com.patzn.lims.drug.service.impl;
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.patzn.lims.core.web.Account; import com.patzn.lims.core.web.Account;
import com.patzn.lims.drug.entity.DrugSampleRecord; import com.patzn.lims.drug.entity.DrugSampleRecord;
import com.patzn.lims.drug.eunms.SampleStatusEnum; import com.patzn.lims.drug.eunms.SampleStatusEnum;
...@@ -13,6 +14,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -13,6 +14,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
...@@ -43,6 +45,29 @@ public class DrugSampleRecordServiceImpl extends BaseServiceImpl<DrugSampleRecor ...@@ -43,6 +45,29 @@ public class DrugSampleRecordServiceImpl extends BaseServiceImpl<DrugSampleRecor
} }
@Override
public boolean record(Account account, SampleStatusEnum from, SampleStatusEnum to, Collection<Long> ids, String remark) {
return record(account,from,to,ids,0,remark);
}
public boolean record(Account account, SampleStatusEnum from, SampleStatusEnum to, Collection<Long> ids,Integer type, String remark) {
if (CollectionUtils.isEmpty(ids)){
return false;
}
List<DrugSampleRecord> sampleRecordList = new ArrayList<>();
for (Long sampleId:ids) {
DrugSampleRecord sampleRecord = new DrugSampleRecord();
sampleRecord.setSampleId(sampleId);
sampleRecord.setOperator(account.getUserName());
sampleRecord.setOperatorId(account.getUserId());
sampleRecord.setOrigin(from.getDisplay());
sampleRecord.setTarget(to.getDisplay());
sampleRecord.setType(type);
sampleRecord.setRemark(remark);
sampleRecordList.add(sampleRecord);
}
return saveBatch(sampleRecordList);
}
@Override @Override
public boolean record(Account account, SampleStatusEnum from, SampleStatusEnum to, Long[] ids,Integer type, String remark) { public boolean record(Account account, SampleStatusEnum from, SampleStatusEnum to, Long[] ids,Integer type, String remark) {
......
...@@ -3,6 +3,7 @@ package com.patzn.lims.drug.service.impl; ...@@ -3,6 +3,7 @@ package com.patzn.lims.drug.service.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.common.collect.Lists;
import com.patzn.cloud.commons.toolkit.DateUtils; import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.commons.toolkit.FileUtils; import com.patzn.cloud.commons.toolkit.FileUtils;
import com.patzn.cloud.commons.toolkit.StringHandleUtils; import com.patzn.cloud.commons.toolkit.StringHandleUtils;
...@@ -11,6 +12,7 @@ import com.patzn.lims.core.api.PtAssert; ...@@ -11,6 +12,7 @@ import com.patzn.lims.core.api.PtAssert;
import com.patzn.lims.core.oss.OssClient; import com.patzn.lims.core.oss.OssClient;
import com.patzn.lims.core.web.Account; import com.patzn.lims.core.web.Account;
import com.patzn.lims.drug.dto.DrugSampleDTO; import com.patzn.lims.drug.dto.DrugSampleDTO;
import com.patzn.lims.drug.dto.DrugSampleFlowDTO;
import com.patzn.lims.drug.dto.DrugSampleReportDTO; import com.patzn.lims.drug.dto.DrugSampleReportDTO;
import com.patzn.lims.drug.entity.*; import com.patzn.lims.drug.entity.*;
import com.patzn.lims.drug.eunms.*; import com.patzn.lims.drug.eunms.*;
...@@ -99,7 +101,8 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru ...@@ -99,7 +101,8 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru
private IDrugSampleOosService drugSampleOosService; private IDrugSampleOosService drugSampleOosService;
// @Autowired // @Autowired
// private ISysMessageService sysMessageService; // private ISysMessageService sysMessageService;
@Autowired
private IDrugSampleFlowService drugSampleFlowService;
@Override @Override
public Page<DrugSample> page(Page<DrugSample> page, DrugSample drugSample) { public Page<DrugSample> page(Page<DrugSample> page, DrugSample drugSample) {
...@@ -112,6 +115,18 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru ...@@ -112,6 +115,18 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru
return baseMapper.selectVOList(page,vo); return baseMapper.selectVOList(page,vo);
} }
@Override
public Page<DrugSampleVO> pageSampleFlow(Page page, DrugSampleVO vo) {
return baseMapper.selectVOFlowList(page,vo);
}
@Override
public Page<DrugSampleVO> pageSampleFlowHis(Page page, DrugSampleVO vo) {
return baseMapper.selectVOFlowHisList(page,vo);
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean addEnvRegister(DrugSampleDTO dto, Account account) { public boolean addEnvRegister(DrugSampleDTO dto, Account account) {
...@@ -442,6 +457,29 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru ...@@ -442,6 +457,29 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru
return false; return false;
} }
@Transactional(rollbackFor = Exception.class)
@Override
public boolean submitReceiveToFlow(Long[] ids, Account account) {
ObjectUtils.checkNull(ids);
List<DrugItem> checkItemList = drugItemService.list(Wrappers.<DrugItem>query().select("sample_id").in("sample_id",ids).groupBy("sample_id"));
if (checkItemList.size()!= ids.length){
PtAssert.fail("接收的样品没有检测项目,请确认");
}
//如果有非样品接收状态的说明已经提交过无法再次提交
int count= count(Wrappers.<DrugSample>query().in("id",ids).ne("status", SampleStatusEnum.RECEIVE));
if (count>0){
PtAssert.fail("您选择的任务含有已经接收的,请确认");
}
if (update(new DrugSample().setStatus(SampleStatusEnum.FLOW).setProgress(SampleStatusEnum.FLOW),
Wrappers.<DrugSample>query().in("id",ids))){
drugSampleOperationService.updateReceiveToFlow(account,ids);
drugSampleRecordService.record(account,SampleStatusEnum.RECEIVE,SampleStatusEnum.FLOW,ids,"样品接收提交");
return true;
}
return false;
}
@Override @Override
public Page<DrugSampleVO> pageVOByItemStatus(Page page, DrugSampleVO vo) { public Page<DrugSampleVO> pageVOByItemStatus(Page page, DrugSampleVO vo) {
return baseMapper.selectVOByItemStatusList(page,vo); return baseMapper.selectVOByItemStatusList(page,vo);
...@@ -1197,4 +1235,74 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru ...@@ -1197,4 +1235,74 @@ public class DrugSampleServiceImpl extends BaseServiceImpl<DrugSampleMapper, Dru
return baseMapper.selectCountPersonalSampleReceive(userId); return baseMapper.selectCountPersonalSampleReceive(userId);
} }
@Transactional(rollbackFor = Exception.class)
@Override
public boolean submitFlow(DrugSampleFlowDTO flowDTO, Account account) {
if (null == flowDTO){
PtAssert.fail("数据有误");
}
List<DrugSampleFlow> flowList = flowDTO.getSampleFlows();
if (CollectionUtils.isEmpty(flowList)){
PtAssert.fail("请选择要流转的样品");
}
for (DrugSampleFlow flow:flowList) {
PtAssert.fail(null == flow.getSampleId(),"请选择要流转的样品");
PtAssert.fail(null == flow.getGroupId(),"请选择要流转到的检测科室");
PtAssert.fail(StringUtils.isBlank(flow.getGroupName()),"请选择要流转到的检测科室");
PtAssert.fail(null == flow.getFlowQuantity(),"请填写流转数量");
PtAssert.fail(StringUtils.isBlank(flow.getUnit()),"请填写流转单位");
if (flow.getFlowerId()==null){
flow.setFlower(account.getUserName());
flow.setFlowerId(account.getUserId());
}
if (flow.getFlowTime() == null){
flow.setFlowTime(new Date());
}
}
Map<Long,List<Long>> groupSampleMap= new HashMap<>();
Set<Long> sampleIdSet = new HashSet<>();
for (DrugSampleFlow flow:flowList) {
if (groupSampleMap.containsKey(flow.getGroupId())){
List<Long> list= groupSampleMap.get(flow.getGroupId());
list.add(flow.getSampleId());
groupSampleMap.put(flow.getGroupId(),list);
}else{
List<Long> list= Lists.newArrayList(flow.getSampleId());
groupSampleMap.put(flow.getGroupId(),list);
}
sampleIdSet.add(flow.getSampleId());
}
for (Map.Entry<Long,List<Long>> entry:groupSampleMap.entrySet()) {
List<DrugItem> itemList = drugItemService.list(Wrappers.<DrugItem>query().eq("status",ItemStatusEnum.DRAFT).eq("group_id",entry.getKey()).in("sample_id",entry.getValue()));
if (CollectionUtils.isNotEmpty(itemList)){
List<Long> itemIds = itemList.stream().map(i->{
return i.getId();
}).collect(Collectors.toList());
drugItemService.updateByConditionIds(itemIds,ItemStatusEnum.INPUT);
}
}
if (drugSampleFlowService.saveBatch(flowList)){
List<DrugItem> itemNoOkList = drugItemService.list(Wrappers.<DrugItem>query().select("sample_id").in("sample_id",sampleIdSet).eq("status",ItemStatusEnum.DRAFT));
List<Long> noOkSampleIds = itemNoOkList.stream().map(item->{
return item.getSampleId();
}).collect(Collectors.toList());
List<Long> changeListIds = new ArrayList<>();
for (Long sampleId:sampleIdSet) {
if(!noOkSampleIds.contains(sampleId)){
changeListIds.add(sampleId);
}
}
if (CollectionUtils.isNotEmpty(changeListIds)){
drugSampleOperationService.updateReceiveToTest(account,changeListIds);
drugSampleRecordService.record(account,SampleStatusEnum.RECEIVE,SampleStatusEnum.TEST,changeListIds,"样品流转完成");
}
}
return true;
}
} }
...@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -100,4 +101,21 @@ public class DrugSampleVO extends DrugSample { ...@@ -100,4 +101,21 @@ public class DrugSampleVO extends DrugSample {
@ApiModelProperty(value = "ctimeStr") @ApiModelProperty(value = "ctimeStr")
private String ctimeStr; private String ctimeStr;
@ApiModelProperty(value = "实验室")
private String groupName;
@ApiModelProperty(value = "实验室Id")
private Long groupId;
@ApiModelProperty(value = "流转人")
private String flower;
@ApiModelProperty(value = "流转人ID")
private Long flowerId;
@ApiModelProperty(value = "流转时间")
private Date flowTime;
@ApiModelProperty(value = "流转数量")
private BigDecimal flowQuantity;
@ApiModelProperty(value = "流转单位")
private String unit;
} }
...@@ -103,7 +103,7 @@ public class LmsUserGroupController extends SuperController { ...@@ -103,7 +103,7 @@ public class LmsUserGroupController extends SuperController {
lmsUserGroup.setCompanyId(getAccount().getCompanyId()); lmsUserGroup.setCompanyId(getAccount().getCompanyId());
lmsUserGroup.setUid(getAccount().getUserId()); lmsUserGroup.setUid(getAccount().getUserId());
lmsUserGroup.setDeleted(0); lmsUserGroup.setDeleted(0);
return success(lmsUserGroupService.save(lmsUserGroup)); return success(lmsUserGroupService.saveGroup(lmsUserGroup));
} }
......
...@@ -89,4 +89,6 @@ public interface ILmsUserGroupService extends IBaseService<LmsUserGroup> { ...@@ -89,4 +89,6 @@ public interface ILmsUserGroupService extends IBaseService<LmsUserGroup> {
* @return * @return
*/ */
List<LmsUserGroup> getByLeaderUserId(Long userId); List<LmsUserGroup> getByLeaderUserId(Long userId);
boolean saveGroup(LmsUserGroup lmsUserGroup);
} }
...@@ -3,6 +3,7 @@ package com.patzn.lims.res.service.impl; ...@@ -3,6 +3,7 @@ package com.patzn.lims.res.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.lims.core.api.PtAssert; import com.patzn.lims.core.api.PtAssert;
import com.patzn.lims.core.web.BaseServiceImpl; import com.patzn.lims.core.web.BaseServiceImpl;
import com.patzn.lims.res.entity.LmsUserGroup; import com.patzn.lims.res.entity.LmsUserGroup;
...@@ -178,4 +179,16 @@ public class LmsUserGroupServiceImpl extends BaseServiceImpl<LmsUserGroupMapper, ...@@ -178,4 +179,16 @@ public class LmsUserGroupServiceImpl extends BaseServiceImpl<LmsUserGroupMapper,
return baseMapper.getByLeaderUserId(userId); return baseMapper.getByLeaderUserId(userId);
} }
@Override
public boolean saveGroup(LmsUserGroup lmsUserGroup) {
try {
save(lmsUserGroup);
}catch (Exception e){
if (e.getMessage().contains("unique_name_company_id")){
PtAssert.fail("实验室重复");
}
}
return true;
}
} }
...@@ -69,6 +69,24 @@ ...@@ -69,6 +69,24 @@
</sql> </sql>
<select id="selectVOFlowList" resultType="com.patzn.lims.drug.vo.DrugSampleVO">
WITH s AS (SELECT id FROM drug_sample WHERE deleted = 0 AND status = #{vo.status} )
SELECT * FROM (SELECT group_name,sample_id,group_id FROM drug_item WHERE sample_id IN (SELECT id FROM s) AND group_name IS NOT NULL AND status = #{vo.itemStatus} GROUP BY group_name,sample_id,group_id) g
JOIN drug_sample s ON g.sample_id = s.id
</select>
<select id="selectVOFlowHisList" resultType="com.patzn.lims.drug.vo.DrugSampleVO">
SELECT
f.id,f.flower,f.flow_time,f.flow_quantity,f.unit,f.group_name,s.sample_code,s.name,s.category,s.lot_num,s.spec,s.sample_point,s.class_ban,s.standard
FROM
drug_sample_flow f
JOIN drug_sample s ON f.sample_id = s.ID
WHERE s.deleted = 0
</select>
<select id="selectVOList" resultType="com.patzn.lims.drug.vo.DrugSampleVO"> <select id="selectVOList" resultType="com.patzn.lims.drug.vo.DrugSampleVO">
SELECT s.*,o.receiver,o.receive_time,o.sender,o.send_time,o.maker,o.make_time FROM (SELECT s.* FROM drug_sample s WHERE s.deleted = 0 SELECT s.*,o.receiver,o.receive_time,o.sender,o.send_time,o.maker,o.make_time FROM (SELECT s.* FROM drug_sample s WHERE s.deleted = 0
AND s.company_id = #{vo.companyId} AND s.company_id = #{vo.companyId}
......
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