Commit eb5f1604 by lijingjing

数据录入-按项目录入页面显示逻辑优化

原始记录配置及使用逻辑优化
报告编制功能优化
parent a48836b6
......@@ -19,6 +19,8 @@ public class HmConst {
public static final String THIRD_CODE_MATERIALS = "三级编码物资";
public static final String EXIST_CODE_MATERIALS = "已有编码物资";
public static final String SCATTERED = "散样";
public static final String FIRST_PERIOD = "一期";
public static final String FIRST_SECOND_PERIOD = "一二期";
public static final String SECOND_PERIOD = "二期";
public static final String THIRD_PERIOD = "三期";
public static final String NO_MATCH = "NO_MATCH";
......
......@@ -5,6 +5,7 @@ import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.entity.OriginalRecord;
import com.patzn.cloud.service.hmhj.enums.EntrustFlowEnum;
import com.patzn.cloud.service.hmhj.vo.OriginalRecordVO;
import com.patzn.cloud.service.lims.hmhj.service.IOriginalRecordService;
import io.swagger.annotations.Api;
......@@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
/**
* 土工原始记录表 前端控制器
......@@ -48,7 +50,7 @@ public class OriginalRecordController extends ServiceController {
@PostMapping("/pageVO")
public RestResult<Page<OriginalRecordVO>> getPageVO(OriginalRecordVO originalRecordVO) {
// 数据检测只能当前人看
if("TEST".equalsIgnoreCase(originalRecordVO.getSource())) {
if (Objects.equals(originalRecordVO.getSource(), EntrustFlowEnum.TEST.getName())) {
originalRecordVO.setTesterId(getAccount().getUserId());
}
return success(originalRecordService.pageVO(getPage(), originalRecordVO));
......@@ -89,7 +91,7 @@ public class OriginalRecordController extends ServiceController {
}
@PostMapping("/download")
public void download(@RequestParam("entrustId") Long entrustId,@RequestParam("id") Long id) {
originalRecordService.download(entrustId,id, response);
public void download(@RequestParam("entrustId") Long entrustId, @RequestParam("id") Long id) {
originalRecordService.download(entrustId, id, response);
}
}
......@@ -8,6 +8,7 @@ import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.feign.lims.hmhj.client.OriginalTemplateClient;
import com.patzn.cloud.oss.starter.OssFileResult;
import com.patzn.cloud.service.hmhj.dto.OriginalTemplateDTO;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import com.patzn.cloud.service.lims.hmhj.service.IOriginalTemplateService;
import io.swagger.annotations.Api;
......@@ -40,8 +41,8 @@ public class OriginalTemplateController extends ServiceController implements Ori
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<OriginalTemplate>> getPage(OriginalTemplate originalTemplate) {
return success(originalTemplateService.page(getPage(), originalTemplate));
public RestResult<Page<OriginalTemplate>> getPage(OriginalTemplateDTO dto) {
return success(originalTemplateService.getPage(getPage(), dto));
}
@ApiOperation("查询 id 信息")
......
package com.patzn.cloud.service.lims.hmhj.controller;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.dto.TemplateItemDTO;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateItem;
import com.patzn.cloud.service.lims.hmhj.service.IOriginalTemplateItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 原始记录配置项(配置的字段,样品、项目等) 前端控制器
*
* @author meazty
* @since 2022-02-22
*/
@Api(tags = "原始记录配置项(配置的字段,样品、项目等)")
@RestController
@RequestMapping("/v1/template_item")
public class OriginalTemplateItemController extends ServiceController {
@Autowired
private IOriginalTemplateItemService originalTemplateItemService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<OriginalTemplateItem>> getPage(OriginalTemplateItem originalTemplateItem) {
return success(originalTemplateItemService.page(getPage(), originalTemplateItem));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@GetMapping("/{id}")
public RestResult<OriginalTemplateItem> get(@PathVariable("id") Long id) {
return success(originalTemplateItemService.getById(id));
}
@ApiOperation("根据 id 修改信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@PutMapping("/{id}")
public RestResult<Boolean> edit(@PathVariable("id") Long id, OriginalTemplateItem originalTemplateItem) {
originalTemplateItem.setId(id);
return success(originalTemplateItemService.updateById(originalTemplateItem));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(OriginalTemplateItem originalTemplateItem) {
return success(originalTemplateItemService.saveItem(originalTemplateItem));
}
@ApiOperation("添加")
@PostMapping("/add")
public RestResult<Boolean> add(@RequestBody TemplateItemDTO dto) {
return success(originalTemplateItemService.saveItems(dto));
}
@ApiOperation("原始记录ID列表")
@PostMapping("/listTemplateIds")
public RestResult<List<Long>> listTemplateIds(@RequestBody List<SampleItemDTO> sampleItemList) {
return success(originalTemplateItemService.listIdsByItems(sampleItemList));
}
@ApiOperation("根据 ids 删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "主键列表", required = true, paramType = "query", allowMultiple = true, dataTypeClass = Long.class),
})
@DeleteMapping("/")
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(originalTemplateItemService.removeByIds(ids));
}
}
package com.patzn.cloud.service.lims.hmhj.controller;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.entity.UserTestStatistics;
import com.patzn.cloud.service.lims.hmhj.service.IUserTestStatisticsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 用户检测统计 前端控制器
*
* @author meazty
* @since 2022-02-21
*/
@Api(tags = "用户检测统计")
@RestController
@RequestMapping("/v1/test_statistics")
public class UserTestStatisticsController extends ServiceController {
@Autowired
private IUserTestStatisticsService userTestStatisticsService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<UserTestStatistics>> getPage(UserTestStatistics userTestStatistics) {
return success(userTestStatisticsService.page(getPage(), userTestStatistics));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(UserTestStatistics userTestStatistics) {
return success(userTestStatisticsService.save(userTestStatistics));
}
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateItem;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 原始记录配置项(配置的字段,样品、项目等) Mapper 接口
* </p>
*
* @author meazty
* @since 2022-02-22
*/
public interface OriginalTemplateItemMapper extends BatchMapper<OriginalTemplateItem> {
List<Long> listIdsByItems(@Param("sampleItemList") List<SampleItemDTO> sampleItemList);
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.baomidou.mybatisplus.annotations.SqlParser;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.entity.UserTestStatistics;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author meazty
* @since 2022-02-21
*/
public interface UserTestStatisticsMapper extends BatchMapper<UserTestStatistics> {
@SqlParser(filter = true)
List<UserTestStatistics> selectPages(RowBounds rowBounds, @Param("dto") UserTestStatistics dto);
/**
* 同步用户统计量
*/
void updateUserStatisticsInfo();
/**
* 删除所有数据
*/
void deleteData();
}
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.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.dto.TemplateItemDTO;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateItem;
import java.util.List;
/**
* 原始记录配置项(配置的字段,样品、项目等) 服务类
*
* @author meazty
* @since 2022-02-22
*/
public interface IOriginalTemplateItemService extends IBaseService<OriginalTemplateItem> {
Page<OriginalTemplateItem> page(Page<OriginalTemplateItem> page, OriginalTemplateItem originalTemplateItem);
boolean removeByIds(List<Long> ids);
boolean saveItem(OriginalTemplateItem originalTemplateItem);
boolean saveItems(TemplateItemDTO dto);
List<Long> listIdsByItems(List<SampleItemDTO> sampleItemDTOList);
}
......@@ -3,6 +3,7 @@ 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.oss.starter.OssFileResult;
import com.patzn.cloud.service.hmhj.dto.OriginalTemplateDTO;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplate;
import org.springframework.web.multipart.MultipartFile;
......@@ -18,6 +19,8 @@ public interface IOriginalTemplateService extends IBaseService<OriginalTemplate>
Page<OriginalTemplate> page(Page<OriginalTemplate> page, OriginalTemplate originalTemplate);
Page<OriginalTemplate> getPage(Page<OriginalTemplate> page, OriginalTemplateDTO originalTemplate);
boolean removeByIds(List<Long> ids);
boolean uploadTemplate(MultipartFile file, String classType, String name, String remark, int i);
......@@ -33,4 +36,5 @@ public interface IOriginalTemplateService extends IBaseService<OriginalTemplate>
boolean editEntrustReport(String someParam, OssFileResult obsFileResult);
boolean updateTemplateById(OriginalTemplate originalTemplate);
}
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.hmhj.entity.UserTestStatistics;
import com.patzn.cloud.service.hmhj.enums.TestStatsType;
import java.util.List;
/**
* 服务类
*
* @author meazty
* @since 2022-02-21
*/
public interface IUserTestStatisticsService extends IBaseService<UserTestStatistics> {
Page<UserTestStatistics> page(Page<UserTestStatistics> page, UserTestStatistics userTestStatistics);
/**
* 逻辑删除
*
* @param ids ids
* @return true or false
*/
boolean removeByIds(List<Long> ids);
/**
* @param userId 用户ID
* @param testStatsType 类型
* @param quantity 数量
* @return true or false
*/
boolean updateByUserId(Long userId, TestStatsType testStatsType, int quantity);
/**
* 定时同步用户信息
*/
void updateUserStatisticsInfo();
/**
* 删除此表所有数据
*/
void deleteData();
}
......@@ -233,6 +233,8 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
item.setTester(tester);
item.setTesterId(testerId);
// 对检测人员组织赋值
item.setPeriod(userInfoService.getUserPeriod(new Account().setUserId(testerId)));
item.setStatus(EntrustSampleItemStatusEnum.TEST);
item.setProgress(EntrustSampleItemStatusEnum.TEST);
......@@ -758,7 +760,6 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
// 若为压片分析
if (Objects.equals(template.getTabletAnalysis(), 1)) {
// todo
// 压片分析单独处理
/* 获取采集到的数据 */
getCollectionData(voList, null, itemNameMap, template, entrustCode);
......@@ -1154,6 +1155,8 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
boolean isOutEntrustData = contractSampleService.isOutEntrustData(sampleList.get(0).getContractSampleId());
logger.error("是否外委数据:" + isOutEntrustData);
// 样品标识:对于样品下存在特殊字符的检测值,整个样品不再做判级
sampleFlag:
for (EntrustSampleVO sampleVO : sampleList) {
EntrustSample sample = sampleVO.convert(EntrustSample.class);
logger.error("====样品编号:{},样品名称:{}", sample.getCode(), sample.getName());
......@@ -1185,12 +1188,43 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
// 是否组合判定
boolean isComposeJudgment = null != standard.getComposeJudge() && 1 == standard.getComposeJudge().intValue();
logger.error("====检验标准,是否组合判定:{}", isComposeJudgment);
// add by meazty on 2022-02-24 16:37〔包含特殊检测值的样品,不做判级〕
// == 对样品下检测项目检测值预处理
// == 如果包含特殊字符,不做判定处理
// == 否则继续判定
// == 默认值0.000
BigDecimal totalDecimal = new BigDecimal(0.000);
//
for (EntrustSampleItemVO item : sampleItemList) {
String testValue = item.getTestValue();
// 检测值为空的话,默认跳过或者返回值加0
if (StringUtils.isBlank(testValue)) {
continue;
}
// ==
testValue = testValue.trim();
// 特殊字符,跳过判定(针对样品)
if (!RegexUtils.isNumber(testValue)) {
continue sampleFlag;
}
//
int composeJudge = null == item.getComposeJudge() ? 0 : item.getComposeJudge().intValue();
// 判定是否包含稀有元素
boolean incSpecElement = otherYsList.stream().anyMatch(x -> item.getName().contains(x));
// 是组合判定标识或者稀有元素且稀有元素值大于0.01,才参与计算
if (1 == composeJudge || (isSpecStandard && incSpecElement && Double.parseDouble(testValue) >= 0.01)) {
totalDecimal.add(new BigDecimal(testValue));
}
}
// 计算合计-组合判定合计值
BigDecimal totalDecimal = sampleItemList.stream().map(t -> {
/*totalDecimal = sampleItemList.stream().map(t -> {
if (StringUtils.isBlank(t.getTestValue())) {
return BigDecimal.ZERO;
}
String testValue = t.getTestValue().trim();
int composeJudge = null == t.getComposeJudge() ? 0 : t.getComposeJudge().intValue();
// 符合此条件,需要判断是否此标准且为稀有元素且值小于0.01即可忽略为0
RestAssert.fail(!isNumber(testValue), String.format("样品编号【%s】存在错误检测值【%s】", sample.getCode(), testValue));
......@@ -1201,6 +1235,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
}
return BigDecimal.ZERO;
}).reduce(BigDecimal.ZERO, BigDecimal::add);
*/
logger.error("====杂质值:{}", totalDecimal);
// 杂质合计值修约
double totalValue = totalDecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
......@@ -1232,7 +1267,6 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
// 依旧优先级来处理判定顺序
.orderBy("judge_priority", true));
RestAssert.fail(CollectionUtils.isEmpty(gradingProductList), "产品标准不能为空");
sb = new StringBuffer("====产品标准:\r\n");
for (GradingProduct gp : gradingProductList) {
......@@ -1363,10 +1397,14 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
logger.error("====判定合格品级:sampleId:{},sampleName:{},sampleCode:{},grading:{}", s.getId(), s.getName(), s.getCode(), s.getSampleGrading());
}
}
// 处理正常的报告文件
handleSampleBrand(ids, false);
// 处理一级编码的报告文件
handleSampleBrand(ids, true);
// 单端开线程处理
executor1.execute(() -> {
// 处理正常的报告文件
handleSampleBrand(ids, false);
// 处理一级编码的报告文件
handleSampleBrand(ids, true);
});
executor1.execute(() -> {
// 针对铝成品和原铝进行发送ERP数据处理
......@@ -1836,7 +1874,9 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
})) {
Qualification qua = qualificationAtomic.get();
RestAssert.fail(null == qua.getMainTesterId(), String.format("检测项目【%s】主检人为空", t.getName()));
t.setTester(qua.getMainTester()).setTesterId(qua.getMainTesterId())
// 对检测人员组织赋值
String period = userInfoService.getUserPeriod(new Account().setUserId(qua.getMainTesterId()));
t.setTester(qua.getMainTester()).setTesterId(qua.getMainTesterId()).setPeriod(period)
.setStatus(EntrustSampleItemStatusEnum.TEST).setProgress(EntrustSampleItemStatusEnum.TEST);
} else {
RestAssert.fail(String.format("检测项目【%s】找不到对应的数据", t.getName()));
......
......@@ -120,52 +120,52 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
@Override
public Page<EntrustSampleVO> pageVOForMake(Page<EntrustSampleVO> page, EntrustSampleVO entrustSample) {
List<EntrustSampleVO> sampleVOList = baseMapper.selectVOList(page, entrustSample);
if (CollectionUtils.isEmpty(sampleVOList)) return page;
List<Long> sampleIdsList = sampleVOList.stream().map(s -> {
return s.getId();
}).collect(Collectors.toList());
List<EntrustSampleItem> itemList = entrustSampleItemService.list(Condition.create().setSqlSelect("id", "entrust_sample_id", "name").isNotNull("name").in("entrust_sample_id", sampleIdsList));
Map<Long, List<String>> itemMap = new HashMap<>();
Map<Long, Set<String>> itemSetMap = new HashMap<>();
for (EntrustSampleItem item : itemList) {
if (itemMap.containsKey(item.getEntrustSampleId())) {
List<String> list = itemMap.get(item.getEntrustSampleId());
list.add(item.getName());
itemMap.put(item.getEntrustSampleId(), list);
Set<String> set = itemSetMap.get(item.getEntrustSampleId());
set.add(item.getName());
itemSetMap.put(item.getEntrustSampleId(), set);
} else {
List<String> list = new ArrayList<>();
list.add(item.getName());
itemMap.put(item.getEntrustSampleId(), list);
Set<String> set = new HashSet<>();
set.add(item.getName());
itemSetMap.put(item.getEntrustSampleId(), set);
}
}
for (EntrustSampleVO vo : sampleVOList) {
List<String> nameList = itemMap.get(vo.getId());
if (CollectionUtils.isEmpty(nameList)) {
vo.setItemRepeat(false);
} else {
String itemNames = StringHandleUtils.join(nameList);
vo.setItemNames(itemNames);
if (nameList.size() != itemSetMap.get(vo.getId()).size()) {
vo.setItemRepeat(true);
} else {
vo.setItemRepeat(false);
}
}
}
return page.setRecords(sampleVOList);
// List<EntrustSampleVO> sampleVOList = baseMapper.selectVOList(page, entrustSample);
//
// if (CollectionUtils.isEmpty(sampleVOList)) return page;
//
// List<Long> sampleIdsList = sampleVOList.stream().map(s -> {
// return s.getId();
// }).collect(Collectors.toList());
// List<EntrustSampleItem> itemList = entrustSampleItemService.list(Condition.create().setSqlSelect("id", "entrust_sample_id", "name").isNotNull("name").in("entrust_sample_id", sampleIdsList));
// Map<Long, List<String>> itemMap = new HashMap<>();
// Map<Long, Set<String>> itemSetMap = new HashMap<>();
// for (EntrustSampleItem item : itemList) {
// if (itemMap.containsKey(item.getEntrustSampleId())) {
// List<String> list = itemMap.get(item.getEntrustSampleId());
// list.add(item.getName());
// itemMap.put(item.getEntrustSampleId(), list);
//
//
// Set<String> set = itemSetMap.get(item.getEntrustSampleId());
// set.add(item.getName());
// itemSetMap.put(item.getEntrustSampleId(), set);
// } else {
// List<String> list = new ArrayList<>();
// list.add(item.getName());
// itemMap.put(item.getEntrustSampleId(), list);
//
// Set<String> set = new HashSet<>();
// set.add(item.getName());
// itemSetMap.put(item.getEntrustSampleId(), set);
// }
// }
// for (EntrustSampleVO vo : sampleVOList) {
//
// List<String> nameList = itemMap.get(vo.getId());
// if (CollectionUtils.isEmpty(nameList)) {
// vo.setItemRepeat(false);
// } else {
// String itemNames = StringHandleUtils.join(nameList);
// vo.setItemNames(itemNames);
// if (nameList.size() != itemSetMap.get(vo.getId()).size()) {
// vo.setItemRepeat(true);
// } else {
// vo.setItemRepeat(false);
// }
// }
// }
return page.setRecords(baseMapper.selectVOList(page, entrustSample));
}
......
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.dto.TemplateItemDTO;
import com.patzn.cloud.service.hmhj.entity.OriginalTemplateItem;
import com.patzn.cloud.service.lims.hmhj.mapper.OriginalTemplateItemMapper;
import com.patzn.cloud.service.lims.hmhj.service.IOriginalTemplateItemService;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 原始记录配置项(配置的字段,样品、项目等) 服务实现类
*
* @author meazty
* @since 2022-02-22
*/
@Service
public class OriginalTemplateItemServiceImpl extends BaseServiceImpl<OriginalTemplateItemMapper, OriginalTemplateItem> implements IOriginalTemplateItemService {
@Override
public Page<OriginalTemplateItem> page(Page<OriginalTemplateItem> page, OriginalTemplateItem originalTemplateItem) {
String name = originalTemplateItem.getName();
originalTemplateItem.setName(null);
Wrapper wrapper = new EntityWrapper<>(originalTemplateItem);
wrapper.like("name", name);
return this.page(page, wrapper);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public boolean saveItem(OriginalTemplateItem originalTemplateItem) {
RestAssert.fail(Objects.isNull(originalTemplateItem.getTemplateId()), "原始记录模板ID不能为空!");
RestAssert.fail(StringUtils.isBlank(originalTemplateItem.getType()), "项类型不能为空!");
RestAssert.fail(StringUtils.isBlank(originalTemplateItem.getName()), "内容项不能为空!");
return save(originalTemplateItem);
}
@Override
public boolean saveItems(TemplateItemDTO dto) {
RestAssert.fail(Objects.isNull(dto.getTemplateId()), "原始记录模板ID不能为空!");
RestAssert.fail(StringUtils.isBlank(dto.getType()), "项类型不能为空!");
RestAssert.fail(CollectionUtils.isEmpty(dto.getNames()), "内容项不能为空!");
List<OriginalTemplateItem> items = list(Condition.create().eq("template_id", dto.getTemplateId()).eq("type", dto.getType()));
List<String> names = dto.getNames();
if (CollectionUtils.isNotEmpty(items)) {
names = ListUtils.subtract(names, items.stream().map(OriginalTemplateItem::getName).collect(Collectors.toList()));
// ==
if (CollectionUtils.isEmpty(names)) {
return true;
}
}
return saveBatch(names.stream().map(t ->
new OriginalTemplateItem().setTemplateId(dto.getTemplateId()).setType(dto.getType()).setName(t)
).collect(Collectors.toList()));
}
@Override
public List<Long> listIdsByItems(List<SampleItemDTO> sampleItemList) {
if (CollectionUtils.isEmpty(sampleItemList)) {
return Collections.emptyList();
}
return baseMapper.listIdsByItems(sampleItemList);
}
}
......@@ -8,6 +8,7 @@ import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.oss.starter.OssFileResult;
import com.patzn.cloud.service.hmhj.dto.OriginalTemplateDTO;
import com.patzn.cloud.service.hmhj.entity.*;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemIndexVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
......@@ -83,13 +84,23 @@ public class OriginalTemplateServiceImpl extends BaseServiceImpl<OriginalTemplat
@Override
public Page<OriginalTemplate> page(Page<OriginalTemplate> page, OriginalTemplate originalTemplate) {
Wrapper wrapper = new EntityWrapper<>(originalTemplate);
return this.page(page, wrapper);
}
@Override
public Page<OriginalTemplate> getPage(Page<OriginalTemplate> page, OriginalTemplateDTO originalTemplate) {
String name = originalTemplate.getName(), alias = originalTemplate.getAlias();
List<Long> ids = originalTemplate.getIds();
// 支持模糊搜索
originalTemplate.setAlias(null);
originalTemplate.setName(null);
Wrapper wrapper = new EntityWrapper<>(originalTemplate);
wrapper.like("name", name);
wrapper.like("alias", alias);
if (CollectionUtils.isNotEmpty(ids)) {
wrapper.in("id", ids);
}
wrapper.orderBy("class_type").orderBy("name").orderBy("alias");
return this.page(page, wrapper);
}
......
......@@ -165,12 +165,14 @@ public class UserInfoServiceImpl {
if (null == sysOrg) {
return null;
}
if (sysOrg.getName().contains(HmConst.SECOND_PERIOD)) {
String orgName = sysOrg.getName();
if (orgName.contains(HmConst.FIRST_PERIOD) || orgName.contains(HmConst.SECOND_PERIOD) || orgName.contains(HmConst.FIRST_SECOND_PERIOD)) {
return HmConst.SECOND_PERIOD;
} else if (sysOrg.getName().contains(HmConst.THIRD_PERIOD)) {
} else if (orgName.contains(HmConst.THIRD_PERIOD)) {
return HmConst.THIRD_PERIOD;
}
if (null != sysOrg.getPid()) {
return getPeriod(sysOrgClient.get(sysOrg.getPid()).serviceData());
}
......@@ -204,32 +206,22 @@ public class UserInfoServiceImpl {
}
public String getUserPeriod(Long userId) {
if(null == userId){
if (null == userId) {
return null;
}
return getUserPeriod(new Account().setUserId(userId));
}
public String getUserPeriod(Account account) {
List<SysOrg> orgList = sysOrgClient.getListRecursiveByUserId(account.getUserId()).getData();
List<SysOrg> orgList = sysOrgClient.getListByUserId(account.getUserId()).getData();
if (CollectionUtils.isEmpty(orgList)) {
return null;
}
for (SysOrg org : orgList) {
if (org.getName().contains(HmConst.SECOND_PERIOD)) {
return HmConst.SECOND_PERIOD;
} else if (org.getName().contains(HmConst.THIRD_PERIOD)) {
return HmConst.THIRD_PERIOD;
}
if (null == org.getPid()) {
continue;
}
String period = getPeriod(sysOrgClient.get(org.getPid()).serviceData());
if (null == period) {
continue;
String period = getPeriod(org);
if (null != period) {
return period;
}
return period;
}
return null;
}
......
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.feign.base.client.SysUserClient;
import com.patzn.cloud.feign.lims.base.client.LmsUserGroupClient;
import com.patzn.cloud.service.base.entity.SysUser;
import com.patzn.cloud.service.hmhj.entity.UserTestStatistics;
import com.patzn.cloud.service.hmhj.enums.TestStatsType;
import com.patzn.cloud.service.lims.base.entity.LmsUserGroup;
import com.patzn.cloud.service.lims.hmhj.mapper.UserTestStatisticsMapper;
import com.patzn.cloud.service.lims.hmhj.service.IUserTestStatisticsService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* 服务实现类
*
* @author meazty
* @since 2022-02-21
*/
@Service
public class UserTestStatisticsServiceImpl extends BaseServiceImpl<UserTestStatisticsMapper, UserTestStatistics> implements IUserTestStatisticsService {
@Resource
private SysUserClient sysUserClient;
@Resource
private LmsUserGroupClient lmsUserGroupClient;
@Override
public Page<UserTestStatistics> page(Page<UserTestStatistics> page, UserTestStatistics userTestStatistics) {
return page.setRecords(baseMapper.selectPages(page,userTestStatistics));
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateByUserId(Long userId, TestStatsType testStatsType, int quantity) {
List<UserTestStatistics> testStatsList = list(Condition.create().eq("user_id", userId));
UserTestStatistics userStats = null;
// 新用户创建的条件下,才为空
if (CollectionUtils.isEmpty(testStatsList)) {
userStats = new UserTestStatistics();
// 查询用户相关信息
SysUser sysUser = sysUserClient.get(userId).getData();
List<LmsUserGroup> userGroups = lmsUserGroupClient.getByUserId(userId).getData();
String groupIds = userGroups.stream().map(t -> t.getId().toString()).distinct().collect(Collectors.joining(","));
userStats.setUserId(userId).setUserName(sysUser.getUsername()).setRealName(sysUser.getRealname()).setGroupIds(groupIds)
.setUntested(0).setTesting(0).setTested(0).setTotal(0);
} else {
userStats = testStatsList.get(0);
}
int untested = null == userStats.getUntested() ? 0 : userStats.getUntested();
int testing = null == userStats.getTesting() ? 0 : userStats.getTesting();
int tested = null == userStats.getTested() ? 0 : userStats.getTested();
int total = untested + testing + tested;
// 未检测,检测中,已检测
if (testStatsType == TestStatsType.UNTEST) {
userStats.setUntested(untested + untested).setTotal(total + quantity);
} else if (testStatsType == TestStatsType.TESTING) {
testing = Math.max(testing - quantity, 0);
userStats.setUntested(Math.max(testing - quantity, 0)).setTesting(testing + quantity);
} else {
userStats.setTesting(Math.max(tested - quantity, 0)).setTested(tested + quantity);
}
return saveOrUpdate(userStats);
}
@Override
public void deleteData() {
baseMapper.deleteData();
}
@Override
public void updateUserStatisticsInfo() {
this.deleteData();
baseMapper.updateUserStatisticsInfo();
}
}
......@@ -4,7 +4,7 @@
<delete id="deletePhysicalByReportIds">
delete from entrust_report_rel_sample where report_id in
<foreach collection="reportIds" index="index" item="id" open="(" separator=","
<foreach collection="reportIds" index="index" item="reportId" open="(" separator=","
close=")">
#{reportId}
</foreach>
......
......@@ -271,7 +271,7 @@
<foreach collection="ids" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
ORDER BY s.code , i.name
ORDER BY e.code, s.code, i.name
</select>
<select id="selectItemFillProgress" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO">
......
......@@ -37,13 +37,37 @@
</select>
<select id="selectVOList" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleVO">
with sample_item as (
select
i.company_id,
i.entrust_sample_id,
max(i.group_id) "group_id",
string_agg(distinct i.name,'、') "item_names"
<!-- ,case when count(1) != count(distinct i.name) then true else false end "item_report" -->
from entrust_sample_item i where i.deleted = 0
<if test="null != vo.entrustId">
AND i.entrust_id = #{vo.entrustId}
</if>
<if test="null != vo.itemStatus">
and i.status = #{vo.itemStatus}
</if>
<if test="null != vo.itemStatusList">
and i.status IN
<foreach collection="vo.itemStatusList" index="index" item="itemStatus" open="(" separator="," close=")">
#{itemStatus}
</foreach>
</if>
<if test="null != vo.testerId ">
and i.tester_id = #{vo.testerId}
</if>
group by i.company_id,i.entrust_sample_id
)
SELECT
s.*,i.group_id
s.*,
i.group_id,
i.item_names
FROM entrust_sample s
LEFT JOIN (
select i.entrust_sample_id, max(i.group_id) "group_id" from entrust_sample_item i where i.deleted = 0
group by i.entrust_sample_id
) i on i.entrust_sample_id = s.id
JOIN sample_item i on i.entrust_sample_id = s.id
WHERE deleted = 0
<if test="null != vo.entrustId">
AND s.entrust_id = #{vo.entrustId}
......@@ -57,14 +81,23 @@
AND s.code LIKE CONCAT('%',#{vo.code},'%')
</if>
<if test="null != vo.name">
AND s.name LIKE CONCAT('%',#{vo.name},'%')
</if>
<if test="null != vo.type">
AND s.type = #{vo.type}
</if>
<if test="null != vo.retake">
AND s.retake = #{vo.retake}
</if>
<if test="null != vo.notStatus">
AND s.status != #{vo.notStatus}
</if>
<!--
<if test="null != vo.itemStatus or null != vo.itemStatusList or null != vo.testerId">
AND exists (
select 1 from entrust_sample_item i where i.deleted = 0 and i.entrust_sample_id = s.id
......@@ -85,6 +118,7 @@
</if>
)
</if>
-->
<if test="null != vo.statusList">
and s.status IN
......@@ -353,7 +387,7 @@
FROM (
SELECT
i.company_id,
u.period,
i.period,
i.entrust_sample_id,
round(sum(case when ii.name = '磷生铁中C' then ROUND(CAST(ii.test_value AS NUMERIC),5) else 0.00 end) / coalesce(sum(case when ii.name = '磷生铁中C' then 1 else null end),1),2) "c_val",
round(sum(case when ii.name = '磷生铁中Si' then ROUND(CAST(ii.test_value AS NUMERIC),5) else 0.00 end) / coalesce(sum(case when ii.name = '磷生铁中Si' then 1 else null end),1),2) "si_val",
......@@ -362,14 +396,12 @@
round(sum(case when ii.name = '磷生铁中S' then ROUND(CAST(ii.test_value AS NUMERIC),5) else 0.00 end) / coalesce(sum(case when ii.name = '磷生铁中S' then 1 else null end),1),2) "s_val"
FROM
entrust_sample_item i,
entrust_sample_item_index ii,
-- 此视图需要关联base数据库查询,具体查看设计视图
v_sys_user_period U
entrust_sample_item_index ii
WHERE
i.ID = ii.entrust_sample_item_id
AND I.TESTER_ID = u.USER_ID
AND i.deleted = 0
AND ii.deleted = 0
AND i.period is not null
AND ii.test_value is not null and is_numeric(ii.test_value)
AND EXISTS (
select 1 from entrust_sample s where s.id = i.entrust_sample_id and s.deleted = 0
......@@ -378,7 +410,7 @@
<if test="null != vo.timeS and null != vo.timeE">
and to_char(i.test_time, 'YYYY-MM-dd HH24:MI:SS') BETWEEN #{vo.timeS} AND #{vo.timeE}
</if>
GROUP BY i.company_id,u.period,i.entrust_sample_id
GROUP BY i.company_id,i.period,i.entrust_sample_id
) PI
)
select
......
......@@ -3,7 +3,7 @@
<mapper namespace="com.patzn.cloud.service.lims.hmhj.mapper.EntrustSamplePrepareMapper">
<delete id="deletePhysicalBySampleIds">
delete from entrust_sample_prepare where sample_id in
delete from entrust_sample_prepare where entrust_sample_id in
<foreach collection="sampleIds" item="sampleId" index="index" open="(" close=")" separator=",">
#{sampleId}
</foreach>
......
......@@ -3,26 +3,50 @@
<mapper namespace="com.patzn.cloud.service.lims.hmhj.mapper.OriginalRecordMapper">
<select id="selectPageVO" resultType="com.patzn.cloud.service.hmhj.vo.OriginalRecordVO">
select r.*,e.code "entrustCode"
select
r.ID,
MAX ( r.original_record_id ) "original_record_id",
MAX ( r.entrust_id ) "entrust_id",
MAX ( r.template_id ) "template_id",
MAX ( r.title ) "title",
MAX ( r.company_id ) "company_id",
MAX ( r.uid ) "uid",
MAX ( r.ctime ) "ctime",
MAX ( r.lid ) "lid",
MAX ( r.ltime ) "ltime",
MAX ( r.deleted ) "deleted",
MAX ( r.uname ) "uname",
MAX ( r.remark ) "remark",
MAX ( r.object_key ) "object_key",
MAX ( r.pdf_object_key ) "pdf_object_key",
MAX ( r.entrust_ids ) "entrust_ids",
string_agg(e.code,',') "entrustCode"
from original_record r
join entrust e on e.id = r.entrust_id
where r.deleted = 0 and e.deleted = 0
join entrust e on (e.id = r.entrust_id or strpos(r.entrust_ids,e.id::varchar) > 0) and e.deleted = 0
where r.deleted = 0
<if test="null != vo.title">
AND r.title LIKE CONCAT('%',#{vo.title},'%')
</if>
<if test="null != vo.entrustId">
AND r.entrust_id = #{vo.entrustId}
AND e.id = #{vo.entrustId}
</if>
<if test="null != vo.entrustCode">
AND e.code LIKE CONCAT('%',#{vo.entrustCode},'%')
</if>
<if test="null != vo.testerId">
<if test="null != vo.testerId || null != vo.itemStatus">
AND exists (
select 1 from entrust_sample_item i,item_rel_original_record rr
where i.deleted = 0 and rr.deleted = 0 and rr.item_id = i.id
and r.id = rr.record_id and i.tester_id = #{vo.testerId}
and r.id = rr.record_id
<if test="null != vo.testerId">
and i.tester_id = #{vo.testerId}
</if>
<if test="null != vo.itemStatus">
and i.status = #{vo.itemStatus}
</if>
)
</if>
group by r.id
order by r.id desc
</select>
<!--查询原始记录对应的原始文件Key-->
......
<?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.OriginalTemplateItemMapper">
<select id="listIdsByItems" resultType="java.lang.Long">
select ot.id from original_template ot
where ot.deleted = 0 and (
<foreach collection="sampleItemList" index="index" item="sampleItem" separator="or" open="(" close=")">
(
exists (
select 1 from original_template_item oti where oti.deleted = 0 and oti.template_id = ot.id
and oti.type = 'sample' and oti.name = #{sampleItem.name}
)
and exists (
select 1 from original_template_item oi where oi.deleted = 0 and oi.template_id = ot.id
and oi.type = 'item' and oi.name in
<foreach collection="sampleItem.itemList" index="ix" item="item" separator="," open="(" close=")">
#{item}
</foreach>
)
)
</foreach>
)
</select>
</mapper>
......@@ -30,8 +30,8 @@
SUM ( CASE WHEN i.status = 20 AND COALESCE ( ii.fill_num, 0 ) = 0 THEN 1 ELSE 0 END ) "notTesting"
FROM
v_sys_user u
JOIN v_lms_user_group ug ON u.user_id = ug.user_id
JOIN entrust_sample_item i ON ug.user_id = i.tester_Id
JOIN v_lms_user_group ug ON u.user_id = ug.user_id
LEFT JOIN entrust_sample_item i ON ug.user_id = i.tester_Id
AND i.deleted = 0
LEFT JOIN ( SELECT ii.entrust_sample_item_id, COUNT ( 1 ) "fill_num" FROM entrust_sample_item_index ii WHERE ii.deleted = 0 GROUP BY ii.entrust_sample_item_id ) ii ON ii.entrust_sample_item_id = i.ID
GROUP BY
......
/** created by meazty on 2022/2/17 23:13 **/
/** created by meazty on 2022/2/17 23:13 **/
-- 委托样品 --
ALTER TABLE "public"."entrust_sample_item"
ADD COLUMN "period" varchar(32);
COMMENT ON COLUMN "public"."entrust_sample_item"."period" IS '检测人员所属期数(null,二期,三期)';
-- 函数(检测人员所属期数)--
CREATE OR REPLACE FUNCTION "public"."func_user_period"(IN "uid" int8, OUT "period" varchar)
RETURNS "pg_catalog"."varchar" AS $BODY$
begin
select res into period from dblink(func_db_info('pc_base'), concat('select func_user_period(',uid,')')) as t(res VARCHAR);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
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