/*
|
* Copyright (c) 2018-2025, ztt All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
* Redistributions in binary form must reproduce the above copyright
|
* notice, this list of conditions and the following disclaimer in the
|
* documentation and/or other materials provided with the distribution.
|
* Neither the name of the pig4cloud.com developer nor the names of its
|
* contributors may be used to endorse or promote products derived from
|
* this software without specific prior written permission.
|
* Author: ztt
|
*/
|
package com.chinaztt.mes.quality.service.impl;
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.chinaztt.mes.basic.entity.Location;
|
import com.chinaztt.mes.basic.mapper.LocationMapper;
|
import com.chinaztt.mes.quality.dto.QualityLabelDTO;
|
import com.chinaztt.mes.quality.dto.QualityLabelInputDTO;
|
import com.chinaztt.mes.quality.dto.QualityPrintLabelDTO;
|
import com.chinaztt.mes.quality.entity.QualityLabel;
|
import com.chinaztt.mes.quality.entity.QualityLabelPrintConfig;
|
import com.chinaztt.mes.quality.entity.QualityLabelPrintConfigDetail;
|
import com.chinaztt.mes.quality.entity.QualityLabelPrintLog;
|
import com.chinaztt.mes.quality.mapper.QualityLabelMapper;
|
import com.chinaztt.mes.quality.mapper.QualityLabelPrintConfigDetailMapper;
|
import com.chinaztt.mes.quality.mapper.QualityLabelPrintConfigMapper;
|
import com.chinaztt.mes.quality.service.QualityLabelPrintLogService;
|
import com.chinaztt.mes.quality.service.QualityLabelService;
|
import com.chinaztt.mes.warehouse.entity.Stock;
|
import com.chinaztt.mes.warehouse.mapper.StockMapper;
|
import com.chinaztt.ztt.admin.api.feign.RemoteParamService;
|
import com.chinaztt.ztt.common.core.constant.SecurityConstants;
|
import com.chinaztt.ztt.common.core.util.R;
|
import com.google.gson.JsonObject;
|
import lombok.AllArgsConstructor;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
|
/**
|
* 标签
|
*
|
* @author yy
|
* @date 2023-04-11 13:54:42
|
*/
|
@Service
|
@AllArgsConstructor
|
@Transactional
|
public class QualityLabelServiceImpl extends ServiceImpl<QualityLabelMapper, QualityLabel> implements QualityLabelService {
|
|
private QualityLabelPrintConfigMapper qualityLabelPrintConfigMapper;
|
|
private QualityLabelPrintConfigDetailMapper qualityLabelPrintConfigDetailMapper;
|
|
private StockMapper stockMapper;
|
|
private LocationMapper locationMapper;
|
|
private JdbcTemplate jdbcTemplate;
|
|
private QualityLabelPrintLogService qualityLabelPrintLogService;
|
|
private final static String WORKBENCH_LABEL_REPRINT = "WORKBENCH_LABEL_REPRINT";
|
|
private RemoteParamService remoteParamService;
|
|
|
|
|
@Override
|
public List<QualityLabelDTO> printLabel(List<String> snList,String labelUniqueCode,Boolean isPrint) {
|
//查询产出合格库
|
List<Location> locationList = locationMapper.selectList(Wrappers.<Location>lambdaQuery().eq(Location::getLocType, "2"));
|
List<Long> locationIdList = locationList.stream().map(Location::getId).collect(Collectors.toList());
|
//SN对应的实时库存产出合格库是否存在
|
for (String sn:snList) {
|
List<Stock> stockList = stockMapper.selectList(Wrappers.<Stock>lambdaQuery()
|
.eq(Stock::getPartBatchNo, sn)
|
.in(Stock::getLocationId, locationIdList)
|
.gt(Stock::getStockQuantity, 0));
|
if(CollectionUtil.isEmpty(stockList)){
|
throw new RuntimeException("{"+sn+"}库存记录中没有产出合格库");
|
}
|
if(stockList.size()>1){
|
throw new RuntimeException("{"+sn+"}产出合格库库存记录大于一条");
|
}
|
}
|
QualityLabelPrintConfig qualityLabelPrintConfig = qualityLabelPrintConfigMapper.selectOne(Wrappers.<QualityLabelPrintConfig>lambdaQuery()
|
.eq(QualityLabelPrintConfig::getLabelUniqueCode, labelUniqueCode));
|
if(qualityLabelPrintConfig==null){
|
throw new RuntimeException("没有此类标签信息");
|
}
|
|
//查询标签详细配置信息
|
List<QualityLabelPrintConfigDetail> qualityLabelPrintConfigDetailList = qualityLabelPrintConfigDetailMapper.selectList(Wrappers.<QualityLabelPrintConfigDetail>lambdaQuery()
|
.eq(QualityLabelPrintConfigDetail::getMid, qualityLabelPrintConfig.getId())
|
.eq(QualityLabelPrintConfigDetail::getIsActive,true));
|
List<QualityLabelDTO> qualityLabelDTOList = new ArrayList<>();
|
List<QualityLabelInputDTO> qualityLabelInputDTOList = new ArrayList<>();
|
//遍历SN号获取数据
|
for (String sn: snList) {
|
List<QualityLabelPrintConfigDetail> newQualityLabelPrintConfigDetailList = new ArrayList<>();
|
QualityLabelInputDTO qualityLabelInputDTO = new QualityLabelInputDTO();
|
for (QualityLabelPrintConfigDetail qualityLabelPrintConfigDetail:qualityLabelPrintConfigDetailList) {
|
QualityLabelPrintConfigDetail newQualityLabelPrintConfigDetail = new QualityLabelPrintConfigDetail();
|
//若配置数据源,从SQL查询值赋给默认值
|
if(qualityLabelPrintConfigDetail.getIsConfigDataSource()){
|
String sql = qualityLabelPrintConfigDetail.getQrySql();
|
String replaceSn = "'"+sn+"'";
|
String replaceSql = sql.replace("#{sn}", replaceSn);
|
List<String> list = jdbcTemplate.queryForList(replaceSql, String.class);
|
if(CollectionUtil.isNotEmpty(list)){
|
qualityLabelPrintConfigDetail.setDefaultValue(list.get(0));
|
}
|
if("二维码".equals(qualityLabelPrintConfigDetail.getCaption())){
|
if(StringUtils.isNotBlank(qualityLabelPrintConfigDetail.getDefaultValue())){
|
JSONObject jsonObject = JSONObject.parseObject(qualityLabelPrintConfigDetail.getDefaultValue());
|
qualityLabelInputDTO.setPartNo(jsonObject.getString("part_no"));
|
qualityLabelInputDTO.setIfsBatchNo(jsonObject.getString("lot_batch_no"));
|
qualityLabelInputDTO.setQty(new BigDecimal(jsonObject.getString("qty_arrived")));
|
qualityLabelInputDTO.setWdr(jsonObject.getString("wdr"));
|
}
|
}
|
}
|
BeanUtil.copyProperties(qualityLabelPrintConfigDetail,newQualityLabelPrintConfigDetail);
|
newQualityLabelPrintConfigDetailList.add(newQualityLabelPrintConfigDetail);
|
}
|
//返给前端标签样式以及数据DTO
|
QualityLabelDTO qualityLabelDTO = new QualityLabelDTO();
|
qualityLabelDTO.setSn(sn);
|
qualityLabelDTO.setQualityLabelPrintConfigDetail(newQualityLabelPrintConfigDetailList);
|
qualityLabelDTO.setLabelUniqueCode(qualityLabelPrintConfig.getLabelUniqueCode());
|
qualityLabelDTO.setLabelDesc(qualityLabelPrintConfig.getLabelDesc());
|
qualityLabelDTO.setLabelSize(qualityLabelPrintConfig.getLabelSize());
|
qualityLabelDTO.setLabelTypeCode(qualityLabelPrintConfig.getLabelTypeCode());
|
qualityLabelDTO.setLabelTypeDesc(qualityLabelPrintConfig.getLabelTypeDesc());
|
qualityLabelDTOList.add(qualityLabelDTO);
|
//labelInfo存储
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("labelUniqueCode",qualityLabelPrintConfig.getLabelUniqueCode());
|
jsonObject.put("sn",sn);
|
JSONArray array = new JSONArray();
|
for (QualityLabelPrintConfigDetail qualityLabelPrintConfigDetail:newQualityLabelPrintConfigDetailList) {
|
JSONObject object = new JSONObject();
|
object.put("itemCode",qualityLabelPrintConfigDetail.getItemCode());
|
object.put("caption",qualityLabelPrintConfigDetail.getCaption());
|
object.put("defaultValue",qualityLabelPrintConfigDetail.getDefaultValue());
|
object.put("qrySql",qualityLabelPrintConfigDetail.getQrySql());
|
array.add(object);
|
}
|
jsonObject.put("qualityLabelPrintConfigDetail",array);
|
|
//标签表存储数据
|
qualityLabelInputDTO.setPartBatchNo(sn);
|
qualityLabelInputDTO.setLabelUniqueCode(labelUniqueCode);
|
qualityLabelInputDTO.setLabelTypeCode(qualityLabelPrintConfig.getLabelTypeCode());
|
qualityLabelInputDTO.setLabelTypeDesc(qualityLabelPrintConfig.getLabelTypeDesc());
|
qualityLabelInputDTO.setLabelDesc(qualityLabelPrintConfig.getLabelDesc());
|
qualityLabelInputDTO.setLabelSize(qualityLabelPrintConfig.getLabelSize());
|
qualityLabelInputDTO.setLabelInfo(jsonObject.toJSONString());
|
qualityLabelInputDTOList.add(qualityLabelInputDTO);
|
|
}
|
|
List<QualityLabelPrintLog> qualityLabelPrintLogList = new ArrayList<>();
|
//如果要打印
|
if(isPrint){
|
for (QualityLabelInputDTO qualityLabelInputDTO:qualityLabelInputDTOList) {
|
Long mid = null;
|
QualityLabel qualityLabel = baseMapper.selectOne(Wrappers.<QualityLabel>lambdaQuery()
|
.eq(QualityLabel::getPartBatchNo, qualityLabelInputDTO.getPartBatchNo())
|
.eq(QualityLabel::getLabelTypeCode, qualityLabelInputDTO.getLabelTypeCode()));
|
//有标签记录
|
if(qualityLabel!=null){
|
throw new RuntimeException("{"+qualityLabelInputDTO.getPartBatchNo()+"}标签记录中已有此SN号的标签类别码");
|
}else{
|
qualityLabelInputDTO.setPrintCount(1L);
|
baseMapper.insert(qualityLabelInputDTO);
|
mid = qualityLabelInputDTO.getId();
|
}
|
|
//标签打印日志
|
QualityLabelPrintLog qualityLabelPrintLog = new QualityLabelPrintLog();
|
qualityLabelPrintLog.setMid(mid);
|
qualityLabelPrintLog.setPartBatchNo(qualityLabelInputDTO.getPartBatchNo());
|
qualityLabelPrintLog.setQty(qualityLabelInputDTO.getQty());
|
qualityLabelPrintLog.setIfsBatchNo(qualityLabelInputDTO.getIfsBatchNo());
|
qualityLabelPrintLog.setPartNo(qualityLabelInputDTO.getPartNo());
|
qualityLabelPrintLog.setWdr(qualityLabelInputDTO.getWdr());
|
qualityLabelPrintLog.setLabelInfo(qualityLabelInputDTO.getLabelInfo());
|
qualityLabelPrintLog.setIfsBatchNo(qualityLabelInputDTO.getIfsBatchNo());
|
qualityLabelPrintLog.setPartNo(qualityLabelInputDTO.getPartNo());
|
qualityLabelPrintLog.setQty(qualityLabelInputDTO.getQty());
|
qualityLabelPrintLog.setWdr(qualityLabelInputDTO.getWdr());
|
qualityLabelPrintLogList.add(qualityLabelPrintLog);
|
}
|
qualityLabelPrintLogService.saveBatch(qualityLabelPrintLogList);
|
|
}else{
|
//不打印直接保存进标签元素表
|
for (QualityLabelInputDTO qualityLabelInputDTO:qualityLabelInputDTOList) {
|
QualityLabel qualityLabel = baseMapper.selectOne(Wrappers.<QualityLabel>lambdaQuery()
|
.eq(QualityLabel::getPartBatchNo, qualityLabelInputDTO.getPartBatchNo())
|
.eq(QualityLabel::getLabelTypeCode, qualityLabelInputDTO.getLabelTypeCode()));
|
//有标签记录
|
if (qualityLabel != null) {
|
throw new RuntimeException("{"+qualityLabelInputDTO.getPartBatchNo()+"}标签记录中已有此SN号的标签类别码");
|
} else {
|
baseMapper.insert(qualityLabelInputDTO);
|
}
|
}
|
}
|
return qualityLabelDTOList;
|
}
|
|
|
|
|
@Override
|
public Boolean reprint(List<Long> idList){
|
List<QualityLabel> qualityLabelList = new ArrayList<>();
|
List<QualityLabelPrintLog> qualityLabelPrintLogList = new ArrayList<>();
|
for (Long id:idList) {
|
QualityLabel qualityLabel = baseMapper.selectById(id);
|
//打印次数超过一次要输密码
|
if(qualityLabel.getPrintCount()>0){
|
return false;
|
}
|
qualityLabel.setPrintCount(1L);
|
qualityLabelList.add(qualityLabel);
|
//打印日志存储
|
QualityLabelPrintLog qualityLabelPrintLog = new QualityLabelPrintLog();
|
qualityLabelPrintLog.setMid(qualityLabel.getId());
|
qualityLabelPrintLog.setPartBatchNo(qualityLabel.getPartBatchNo());
|
qualityLabelPrintLog.setIfsBatchNo(qualityLabel.getIfsBatchNo());
|
qualityLabelPrintLog.setWdr(qualityLabel.getWdr());
|
qualityLabelPrintLog.setPartNo(qualityLabel.getPartNo());
|
qualityLabelPrintLog.setQty(qualityLabel.getQty());
|
qualityLabelPrintLog.setLabelInfo(qualityLabel.getLabelInfo());
|
qualityLabelPrintLogList.add(qualityLabelPrintLog);
|
}
|
this.updateBatchById(qualityLabelList);
|
qualityLabelPrintLogService.saveBatch(qualityLabelPrintLogList);
|
return true;
|
}
|
|
|
|
@Override
|
public Boolean checkPassword(List<Long> idList,String password){
|
String res = remoteParamService.getByKey(WORKBENCH_LABEL_REPRINT, SecurityConstants.FROM_IN).getData();
|
if (null == password || password.length() == 0) {
|
throw new RuntimeException("密码为空");
|
}
|
if (null == res) {
|
throw new RuntimeException("密码验证失败");
|
}
|
if (!res.equals(password)) {
|
throw new RuntimeException("密码错误");
|
}
|
List<QualityLabel> qualityLabelList = new ArrayList<>();
|
List<QualityLabelPrintLog> qualityLabelPrintLogList = new ArrayList<>();
|
for (Long id:idList) {
|
QualityLabel qualityLabel = baseMapper.selectById(id);
|
qualityLabel.setPrintCount(qualityLabel.getPrintCount()+1);
|
qualityLabelList.add(qualityLabel);
|
|
//打印日志存储
|
QualityLabelPrintLog qualityLabelPrintLog = new QualityLabelPrintLog();
|
qualityLabelPrintLog.setMid(qualityLabel.getId());
|
qualityLabelPrintLog.setPartBatchNo(qualityLabel.getPartBatchNo());
|
qualityLabelPrintLog.setIfsBatchNo(qualityLabel.getIfsBatchNo());
|
qualityLabelPrintLog.setWdr(qualityLabel.getWdr());
|
qualityLabelPrintLog.setPartNo(qualityLabel.getPartNo());
|
qualityLabelPrintLog.setQty(qualityLabel.getQty());
|
qualityLabelPrintLog.setLabelInfo(qualityLabel.getLabelInfo());
|
qualityLabelPrintLogList.add(qualityLabelPrintLog);
|
}
|
this.updateBatchById(qualityLabelList);
|
qualityLabelPrintLogService.saveBatch(qualityLabelPrintLogList);
|
return true;
|
|
}
|
|
|
|
|
|
@Override
|
public Boolean logicDelete(QualityLabel qualityLabel) {
|
return baseMapper.logicDelete(qualityLabel.getId());
|
}
|
}
|