Commit 96edaae3 by lijingjing

添加发送ERP数据,覆盖原铝重取数据;

parent f032ea05
......@@ -9,14 +9,15 @@ 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.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.dto.SlotQueryDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSampleItem;
import com.patzn.cloud.service.hmhj.entity.ItemDeviate;
import com.patzn.cloud.service.hmhj.entity.OriginalRecord;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.vo.*;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.ItemVO;
import com.patzn.cloud.service.hmhj.vo.SampleItemVO;
import com.patzn.cloud.service.hmhj.vo.TesterWorkloadStatsVO;
import com.patzn.cloud.service.lims.base.entity.LmsUserRelGroup;
import com.patzn.cloud.service.lims.base.vo.LmsUserRelGroupVO;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustSampleItemService;
......@@ -25,9 +26,9 @@ 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 javax.annotation.Resource;
import java.util.List;
import java.util.Map;
......@@ -42,10 +43,10 @@ import java.util.Map;
@RequestMapping("/v1/entrust_sample_item")
public class EntrustSampleItemController extends ServiceController {
@Autowired
@Resource
private IEntrustSampleItemService entrustSampleItemService;
@Autowired
@Resource
private UserInfoServiceImpl userInfoService;
......@@ -648,7 +649,7 @@ public class EntrustSampleItemController extends ServiceController {
@ApiOperation("样品检测项目统计查询")
@PostMapping("/sample_item_stats_query")
public RestResult<Map> getSampleItemStatsQuery(SampleItemDTO sampleItemDTO) {
public RestResult<Map<String, Object>> getSampleItemStatsQuery(SampleItemDTO sampleItemDTO) {
return success(entrustSampleItemService.getSampleItemStatsQuery(sampleItemDTO));
}
......@@ -731,12 +732,10 @@ public class EntrustSampleItemController extends ServiceController {
}
@ApiOperation(value = "模拟测试发送数据到ERP", notes = "模拟测试发送数据到ERP")
@PostMapping("/send_data")
@PostMapping("/send_erp_data")
@Login(action = Action.Skip)
public RestResult<SampleItemVO> sendData(@RequestBody SampleItemVO itemVO) {
logger.error(itemVO.getSample_code());
logger.error(itemVO.getBrand());
return RestResult.ok(itemVO);
public RestResult<Boolean> sendErpData(@RequestBody List<Long> entrustIds) {
return success(entrustSampleItemService.sendErpData(entrustIds));
}
@ApiOperation(value = "根据检测项目ID退回原始记录", notes = "根据检测项目ID退回原始记录")
......@@ -744,5 +743,4 @@ public class EntrustSampleItemController extends ServiceController {
public RestResult<Boolean> backUserItem(@RequestParam("ids") Long[] ids) {
return success(entrustSampleItemService.backUserItem(ids));
}
}
......@@ -46,6 +46,7 @@ public class ItemComparisonController extends ServiceController {
})
@PostMapping("/page")
public RestResult<Page<ItemComparison>> getPage(SlotQueryDTO queryDTO) {
return success(itemComparisonService.page(getPage(), queryDTO));
}
......
......@@ -76,7 +76,7 @@ public interface EntrustSampleItemIndexMapper extends BatchMapper<EntrustSampleI
* @param sampleIds the sample ids
* @return the list
*/
List<Map<String, Object>> selectSampleItemIndex(@Param("sampleIds") List<Long> sampleIds);
List<Map<String, Object>> selectSampleItemIndex(@Param("entrustIds") List<Long> entrustIds,@Param("sampleIds") List<Long> sampleIds);
/**
* Physical delete by item ids integer.
......
......@@ -33,5 +33,5 @@ public interface ItemComparisonMapper extends BatchMapper<ItemComparison> {
* @param slotQueryDTO the slot query dto
* @return the list
*/
List<ItemComparison> selectDataPage(RowBounds rowBounds, SlotQueryDTO slotQueryDTO);
List<ItemComparison> selectDataPage(RowBounds rowBounds, @Param("vo") SlotQueryDTO slotQueryDTO);
}
......@@ -39,7 +39,7 @@ public interface IEntrustSampleItemIndexService extends IBaseService<EntrustSamp
Page<EntrustSampleItemIndexVO> pageIndexWithItem(Page<EntrustSampleItemIndexVO> page, EntrustSampleItemIndexVO entrustSampleItemIndexVO);
List<Map<String,Object>> listSampleItemIndex(List<Long> sampleIds);
List<Map<String,Object>> listSampleItemIndex(List<Long> entrustIds,List<Long> sampleIds);
boolean physicalDeleteByItemIds(List<Long> itemIds);
......
......@@ -140,4 +140,5 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
boolean deletePhysicalByEntrustIds(List<Long> ids);
Boolean sendErpData(List<Long> entrustIds);
}
package com.patzn.cloud.service.lims.hmhj.service;
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.SlotQueryDTO;
import com.patzn.cloud.service.hmhj.entity.ItemComparison;
......@@ -40,5 +41,5 @@ public interface IItemComparisonService extends IBaseService<ItemComparison> {
* @param queryDTO the comparison queryDTO
* @return the boolean
*/
boolean saveCompareDataBatch(SlotQueryDTO queryDTO);
boolean saveCompareDataBatch(SlotQueryDTO queryDTO, Account account);
}
......@@ -346,18 +346,25 @@ public class EntrustReportServiceImpl extends BaseServiceImpl<EntrustReportMappe
@Transactional(rollbackFor = Exception.class)
protected void generateCompareItems(Long[] ids, Account account) {
if (ArrayUtils.isEmpty(ids)) {
logger.error("report ids is empty ");
return;
}
EntrustSample sample = entrustSampleService.getById(ids[0]);
logger.error("输出样品:{} ", sample.getName());
List<EntrustReportRelSample> relSamples = entrustReportRelSampleService.list(Condition.create().in("report_id", ids));
if (CollectionUtils.isEmpty(relSamples)) {
logger.error("No rel samples found");
return;
}
List<Long> sampleIds = relSamples.stream().map(EntrustReportRelSample::getSampleId).distinct().collect(Collectors.toList());
EntrustSample sample = entrustSampleService.getById(sampleIds.get(0));
logger.error("print sample name:{} ", sample.getName());
if (!(Objects.equals(sample.getName(), "原铝") || Objects.equals(sample.getName(), "铝成品"))) {
return;
}
logger.error("开始处理项目比较...");
logger.error("begin compare item test value...");
SlotQueryDTO slotQuery = new SlotQueryDTO();
slotQuery.setIds(ids);
slotQuery.setSampleIds(sampleIds);
// 每次提交编制报告时,添加对比记录
itemComparisonService.saveCompareDataBatch(slotQuery);
itemComparisonService.saveCompareDataBatch(slotQuery,account);
}
@Override
......
......@@ -47,11 +47,11 @@ public class EntrustSampleItemIndexServiceImpl extends BaseServiceImpl<EntrustSa
}
@Override
public List<Map<String, Object>> listSampleItemIndex(List<Long> sampleIds) {
if (CollectionUtils.isEmpty(sampleIds)) {
public List<Map<String, Object>> listSampleItemIndex(List<Long> entrustIds, List<Long> sampleIds) {
if (CollectionUtils.isEmpty(entrustIds) && CollectionUtils.isEmpty(sampleIds)) {
return new ArrayList<>();
}
return baseMapper.selectSampleItemIndex(sampleIds);
return baseMapper.selectSampleItemIndex(entrustIds, sampleIds);
}
@Override
......
......@@ -1482,7 +1482,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
return;
}
// 获取检测项目指标数据
List<Map<String, Object>> dataList = entrustSampleItemIndexService.listSampleItemIndex(ids);
List<Map<String, Object>> dataList = entrustSampleItemIndexService.listSampleItemIndex(null, ids);
dataList.forEach(t -> {
Long sampleId = Long.valueOf(t.get("id").toString());
t.put("brand", sampleBrandMap.get(sampleId));
......@@ -1655,6 +1655,25 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
return baseMapper.deletePhysicalByEntrustIds(ids) > 0;
}
@Override
public Boolean sendErpData(List<Long> entrustIds) {
RestAssert.fail(CollectionUtils.isEmpty(entrustIds), "请选择要发送数据的委托!");
Entrust entrust = entrustService.getById(entrustIds.get(0));
RestAssert.fail(!Arrays.asList("原铝", "铝成品").contains(entrust.getSampleName()), "非原铝或铝成品不予发送!");
List<Map<String, Object>> mapList = entrustSampleItemIndexService.listSampleItemIndex(entrustIds, null);
RestAssert.fail(CollectionUtils.isEmpty(mapList), "数据为空,取消发送!");
try {
log("准备发送数据");
doSendErpData(mapList);
return true;
} catch (Exception e) {
log("请求失败,请稍后重试!");
logger.error("exception while sending data to server: {}", e.getMessage());
RestAssert.fail("请求失败,请稍后重试!");
}
return false;
}
private String getCellValue(XSSFRow xssfRow, int cellIndex) {
XSSFCell cell = xssfRow.getCell(cellIndex);
String value = HSSFWorkbookUtil.getJavaValue(cell).toString();
......
......@@ -1596,6 +1596,9 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
if (isCanIntoPrevNode(entrust)) {
prevFlow = EntrustFlowUtils.getPrevFlowStatus(entrust.getFlowStatus(), entrust.getStatusPath());
}
// 添加退回限制,若不为 TEST 则无法退回;
RestAssert.fail(prevFlow == null, "上一状态为空委托无法退回!");
RestAssert.fail(prevFlow != EntrustFlowEnum.TEST, String.format("上一状态为【%s】委托无法退回!", prevFlow.getDisplay()));
// 1.获取委托,样品,检测项目状态
EntrustStatusEnum prevStatus = EntrustFlowUtils.getStatus(prevFlow);
EntrustSampleStatusEnum prevSampleStatus = EntrustFlowUtils.getSampleStatus(prevFlow);
......
......@@ -2,6 +2,8 @@ package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.controller.LoginHelper;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.commons.toolkit.JacksonUtils;
......@@ -32,8 +34,13 @@ public class ItemComparisonServiceImpl extends BaseServiceImpl<ItemComparisonMap
@Resource
private IMaterialItemService materialItemService;
@Resource
private UserInfoServiceImpl userInfoService;
@Override
public Page<ItemComparison> page(Page<ItemComparison> page, SlotQueryDTO slotQueryDTO) {
Account account = LoginHelper.getAccount();
slotQueryDTO.setPeriod(userInfoService.getUserPeriod(account));
return page.setRecords(baseMapper.selectDataPage(page, slotQueryDTO));
}
......@@ -57,6 +64,7 @@ public class ItemComparisonServiceImpl extends BaseServiceImpl<ItemComparisonMap
Map<String, List<ItemComparison>> slotItemMap = new HashMap<>(16);
itemCompareVOList.forEach(item -> {
String limitValueStr = limitValueMap.get(item.getSampleName() + item.getName());
// 对于限值为空的原铝Fe和原铝Si,默认设为0.04和0.02
if (StringUtils.isBlank(limitValueStr)) {
limitValueStr = Objects.equals(item.getName(), "原铝Fe") ? "0.04" : "0.02";
}
......@@ -66,7 +74,7 @@ public class ItemComparisonServiceImpl extends BaseServiceImpl<ItemComparisonMap
BigDecimal newVal = new BigDecimal(item.getTestValue());
BigDecimal oldVal = new BigDecimal(item.getPrevTestValue());
BigDecimal difVal = newVal.subtract(oldVal);
item.setDiffValue(difVal.doubleValue());
item.setDiffValue(difVal.abs().toPlainString());
BigDecimal limitValue = new BigDecimal(item.getLimitValue());
// 差值与限定值相比,大于0需要重取
if (difVal.abs().compareTo(limitValue) > 0) {
......@@ -88,18 +96,24 @@ public class ItemComparisonServiceImpl extends BaseServiceImpl<ItemComparisonMap
}
@Override
public boolean saveCompareDataBatch(SlotQueryDTO queryDTO) {
public boolean saveCompareDataBatch(SlotQueryDTO queryDTO, Account account) {
List<ItemComparison> comparisonList = listCompareItems(queryDTO);
logger.error("search data : {}", JacksonUtils.toJSONString(comparisonList));
if (CollectionUtils.isEmpty(comparisonList)) {
logger.error("search data : empty list");
return false;
}
// ==
comparisonList.forEach(item -> {
item.setUid(account.getUserId()).setCompanyId(account.getCompanyId());
});
ItemComparison comparison = comparisonList.get(0);
queryDTO.setQueryDate(DateUtils.str2Date(comparison.getCompareDate()));
queryDTO.setSampleName(comparison.getSampleName());
queryDTO.setIds(null);
// 根据时间查询是否有存在的数据
List<ItemComparison> itemComparisonList = baseMapper.selectDataPage(null, queryDTO);
List<ItemComparison> itemComparisonList = baseMapper.selectDataPage(new Page(1, Integer.MAX_VALUE), queryDTO);
logger.info("search query item comparison list is : {}", JacksonUtils.toJSONString(itemComparisonList));
// 数据组Map,过滤重复数据
if (CollectionUtils.isNotEmpty(itemComparisonList)) {
Map<String, ItemComparison> itemComparisonMap = itemComparisonList.stream().collect(Collectors.toMap(it -> it.getSampleCode(), Function.identity()));
......
......@@ -100,38 +100,64 @@
</select>
<select id="selectSampleItemIndex" resultType="java.util.Map">
SELECT
s.id,
s.NAME "sample_name",
s.code "sample_code",
max(s.sample_from) "sample_from",
max(s.sample_grading) "brand",
max(i.tester) "tester",
to_char(max(i.test_time),'YYYY-MM-DD HH24:MI:SS') "test_time",
max(r.report_checker) "report_checker",
max(CASE WHEN S.NAME = '原铝' then e.assignor else r.report_issuer end) "report_issuer",
max(r.quality_inspector) "quality_inspector",
max(case when ii.name = '原铝Fe' then trim(ii.test_value) else null end) "fe",
max(case when ii.name = '原铝Si' then trim(ii.test_value) else null end) "si",
max(case when ii.name = '原铝Cu' then trim(ii.test_value) else null end) "cu",
max(case when ii.name = '原铝Ga' then trim(ii.test_value) else null end) "ga",
max(case when ii.name = '原铝Mg' then trim(ii.test_value) else null end) "mg",
max(case when ii.name = '原铝Zn' then trim(ii.test_value) else null end) "zn",
max(case when ii.name = '原铝Mn' then trim(ii.test_value) else null end) "mn",
max(case when ii.name = '原铝Ni' then trim(ii.test_value) else null end) "ni",
max(case when ii.name = '原铝V' then trim(ii.test_value) else null end) "v"
FROM
entrust_sample_item_index ii
with sample_item as (
SELECT DISTINCT ON ( s.slot_no, ii.NAME )
(case when REPLACE(s.NAME, '重取', '') = '原铝' then '原铝' else '铝成品' end) "sample_name",
(CASE WHEN strpos(s.code, '-') > 0 THEN s.code ELSE substr(s.code, 0, 8) || '-' || substr(s.code, 8, 4) END) "sample_code",
s.slot_no,
s.sample_from,
s.sample_grading "brand",
s.entrust_id,
s.company_id,
i.tester,
i.test_time,
ii.NAME,
ii.test_value
FROM entrust_sample_item_index ii
JOIN entrust_sample_item i ON i.ID = ii.entrust_sample_item_id AND i.deleted = 0
JOIN entrust_sample s ON s.ID = i.entrust_sample_id AND s.deleted = 0
JOIN entrust e on e.ID = s.entrust_id AND e.deleted = 0
LEFT JOIN entrust_report r ON r.entrust_id = s.entrust_id AND r.deleted = 0
WHERE ii.deleted = 0
-- AND s.NAME IN ('原铝', '铝成品')
<if test="null != entrustIds">
<foreach collection="entrustIds" index="index" item="entrustId" open=" and s.entrust_id in (" separator="," close=")">
#{entrustId}
</foreach>
</if>
<if test="null != sampleIds">
<foreach collection="sampleIds" index="index" item="sampleId" open=" and s.id in (" separator="," close=")">
#{sampleId}
</foreach>
GROUP BY s.id,s.name,s.code
</if>
ORDER BY s.slot_no,
ii.NAME,
i.ctime DESC
)
SELECT si.sample_code,
si.sample_name,
si.sample_from,
si.brand,
max(s.id) "id",
max(si.tester) "tester",
to_char(max(si.test_time), 'YYYY-MM-DD HH24:MI:SS') "test_time",
max(r.report_checker) "report_checker",
max(CASE WHEN si.NAME = '原铝' then e.assignor else r.report_issuer end) "report_issuer",
max(r.quality_inspector) "quality_inspector",
max(case when si.name = '原铝Fe' then trim(si.test_value) end) "fe",
max(case when si.name = '原铝Si' then trim(si.test_value) end) "si",
max(case when si.name = '原铝Cu' then trim(si.test_value) end) "cu",
max(case when si.name = '原铝Ga' then trim(si.test_value) end) "ga",
max(case when si.name = '原铝Mg' then trim(si.test_value) end) "mg",
max(case when si.name = '原铝Zn' then trim(si.test_value) end) "zn",
max(case when si.name = '原铝Mn' then trim(si.test_value) end) "mn",
max(case when si.name = '原铝Ni' then trim(si.test_value) end) "ni",
max(case when si.name = '原铝V' then trim(si.test_value) end) "v"
FROM sample_item si
JOIN entrust_sample s on s.code = si.sample_code and s.deleted = 0
JOIN entrust e on e.ID = si.entrust_id AND e.deleted = 0
LEFT JOIN entrust_report r ON r.entrust_id = si.entrust_id AND r.deleted = 0
group by si.sample_code,
si.sample_name,
si.sample_from,
si.brand
</select>
<delete id="physicalDeleteByItemIds">
......
......@@ -11,6 +11,9 @@
<if test="null != vo.sampleName">
and ic.sample_name = #{vo.sampleName}
</if>
<if test="null != vo.period">
and ic.period = #{vo.period}
</if>
<if test="null != vo.slotNo">
and ic.slot_no = #{vo.slotNo}
</if>
......@@ -34,13 +37,14 @@
<select id="selectCompareItems" resultType="com.patzn.cloud.service.hmhj.entity.ItemComparison">
SELECT
n.*,
o.sample_name "prev_sample_name",
o.sample_code "prev_sample_code",
o.test_value "prev_test_value"
FROM
( SELECT
s.NAME "sample_name",
s.code "sample_code",
s.slot_no,
i.period,
ii.NAME,
ii.test_value,
ii.ctime,
......@@ -54,13 +58,13 @@
WHERE
ii.deleted = 0
AND ii.NAME IN ( '原铝Fe', '原铝Si' )
AND s.NAME = '原铝'
<if test="null == vo.ids">
AND s.NAME IN ('原铝', '铝成品')
<if test="null == vo.sampleIds">
AND to_char( ii.ctime, 'yyyy-MM-dd' ) = to_char(#{vo.queryDate}::timestamp,'yyyy-MM-dd')
</if>
<if test="null != vo.ids">
<if test="null != vo.sampleIds">
and s.id in
<foreach collection="vo.ids" item="sampleId" open="(" separator="," close=")">
<foreach collection="vo.sampleIds" item="sampleId" open="(" separator="," close=")">
#{sampleId}
</foreach>
</if>
......@@ -71,9 +75,9 @@
) n
JOIN (
SELECT DISTINCT ON ( s.slot_no, ii.NAME )
replace(s.NAME,'重取','') "sample_name",
(case when strpos(s.code,'-') > 0 then s.code else substr(s.code,0,8) || '-' || substr(s.code,8,4) end) "sample_code",
s.slot_no,
i.period,
ii.NAME,
ii.test_value,
ii.ctime
......@@ -85,13 +89,21 @@
AND s.deleted = 0
WHERE ii.deleted = 0
AND ii.NAME IN ('原铝Fe', '原铝Si')
AND s.NAME IN ('原铝', '原铝重取')
AND s.NAME IN ('原铝', '铝成品', '原铝重取')
<if test="null != vo.sampleIds">
and s.id not in
<foreach collection="vo.sampleIds" item="sampleId" open="(" separator="," close=")">
#{sampleId}
</foreach>
</if>
ORDER BY
s.slot_no,
ii.NAME,
i.ctime DESC
) o ON n.slot_no = o.slot_no AND n.NAME = o.NAME AND TO_CHAR(n.ctime, 'yyyy-MM-dd' ) = to_char(o.ctime + '2 day','yyyy-MM-dd')
WHERE 1=1
) o ON n.slot_no = o.slot_no
AND n.NAME = o.NAME
AND n.period = o.period
AND TO_CHAR(n.ctime, 'yyyy-MM-dd' ) = to_char(o.ctime + '2 day','yyyy-MM-dd')
</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