package com.chinaztt.mes.quality.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.chinaztt.mes.common.wrapper.QueryWrapperUtil;
|
import com.chinaztt.mes.quality.dto.QualityHw19CodeDTO;
|
import com.chinaztt.mes.quality.dto.TestStandardDTO;
|
import com.chinaztt.mes.quality.entity.QualityHw19Code;
|
import com.chinaztt.mes.quality.excel.QualityHw19CodeData;
|
import com.chinaztt.mes.quality.excel.QualityHw19CodeImportData;
|
import com.chinaztt.mes.quality.mapper.QualityHw19CodeMapper;
|
import com.chinaztt.mes.quality.service.QualityHw19CodeService;
|
import lombok.Synchronized;
|
import com.chinaztt.ztt.common.core.constant.SecurityConstants;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.text.DecimalFormat;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.WeekFields;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 19条码生成信息
|
*
|
* @author pigx code generator
|
* @date 2022-12-01 17:11:07
|
*/
|
@Service
|
public class QualityHw19CodeServiceImpl extends ServiceImpl<QualityHw19CodeMapper, QualityHw19Code> implements QualityHw19CodeService {
|
|
|
@Override
|
@Synchronized
|
public void insert(QualityHw19Code qualityHw19Code) {
|
|
//19固定前缀 + 物料编码 + ‘141146’供应商编码 + 年 + 周次 + Q + 长度 + S + autoId
|
|
LocalDateTime barTime = qualityHw19Code.getBarTime();
|
|
//获取年 周次
|
String year = (barTime.getYear()+"").substring(2, 4);
|
WeekFields weekFields = WeekFields.ISO;
|
int weekCycle = barTime.get(weekFields.weekOfWeekBasedYear());
|
String weekCycleStr = String.format("%0" + 2 + "d",weekCycle);
|
|
//长度
|
BigDecimal length = qualityHw19Code.getLength();
|
if (length.compareTo(new BigDecimal(1000)) >= 0) {
|
throw new RuntimeException("长度超出三位数,不符合规定");
|
}
|
DecimalFormat decimalFormat = new DecimalFormat("0000.000000");
|
String lengthFormat = new BigDecimal(decimalFormat.format(length)).stripTrailingZeros().toPlainString();
|
lengthFormat = String.format("%0" + 4 + "d",Integer.parseInt(lengthFormat));//长度部分格式化成4位
|
|
String preCode = "19"+qualityHw19Code.getMaterialCode() +"/141146"+year+weekCycleStr+"Q"+lengthFormat+"S";
|
|
Integer genCount = qualityHw19Code.getGenCount();
|
for (int i = 0; i < genCount; i++) {
|
QualityHw19Code entity = new QualityHw19Code();
|
BeanUtils.copyProperties(qualityHw19Code,entity);
|
entity.setWeekCycle(weekCycle);
|
//获取生码批次
|
String newestBarCode= this.baseMapper.getAutoIdByPre(preCode);
|
String autoId = null;
|
if (StringUtils.isBlank(newestBarCode)) {
|
autoId = "000001";
|
} else {
|
autoId = String.format("%0" + 6 + "d", Integer.parseInt(newestBarCode.substring(newestBarCode.length()-6))+1);
|
}
|
entity.setBarCode(preCode+autoId);
|
this.baseMapper.insert(entity);
|
}
|
|
}
|
|
@Override
|
public IPage<QualityHw19Code> pageInfo(Page page, QualityHw19CodeDTO dto) {
|
return this.baseMapper.pageInfo(page,dto);
|
}
|
|
@Override
|
public List<QualityHw19CodeData> selectExcelList(QualityHw19CodeDTO dto) {
|
return this.baseMapper.selectExcelList(dto);
|
}
|
|
@Override
|
public void exportModel(HttpServletResponse response) throws IOException{
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("UTF-8");
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
String fileName = URLEncoder.encode("19条码生成模板", "UTF-8");
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
|
try {
|
//新建ExcelWriter
|
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
|
//获取sheet0对象
|
WriteSheet mainSheet = EasyExcel.writerSheet(0, "19条码").head(QualityHw19CodeImportData.class).build();
|
//向sheet0写入数据 传入空list这样只导出表头
|
List<QualityHw19CodeImportData> respList = new ArrayList<>();
|
excelWriter.write(respList, mainSheet);
|
//关闭流
|
excelWriter.finish();
|
} catch (IOException e) {
|
throw new RuntimeException("导出失败");
|
}
|
}
|
|
@Override
|
public void importExcel(List<QualityHw19CodeImportData> list) {
|
long distinctNum = list.stream().map(QualityHw19CodeImportData::getBarCode).distinct().count();
|
if (distinctNum < list.size()) {
|
throw new RuntimeException("导入记录中19条码重复");
|
}
|
List<QualityHw19Code> qualityHw19CodeList = new ArrayList<>();
|
for (QualityHw19CodeImportData qualityHw19CodeImportData : list) {
|
//19条码非空判断
|
if (StringUtils.isBlank(qualityHw19CodeImportData.getBarCode())) {
|
throw new RuntimeException("19条码不能为空");
|
}
|
//物料编码非空判断
|
if (StringUtils.isBlank(qualityHw19CodeImportData.getMaterialCode())) {
|
throw new RuntimeException("物料编码不能为空");
|
}
|
//是否标长非空判断
|
if (qualityHw19CodeImportData.getIsStandardLen()==null) {
|
throw new RuntimeException("是否标长不能为空");
|
}
|
//生成数量非空判断
|
if (qualityHw19CodeImportData.getGenCount()==null) {
|
throw new RuntimeException("生成数量不能为空");
|
}
|
//条码日期非空及格式判断
|
if (StringUtils.isBlank(qualityHw19CodeImportData.getBarTime())) {
|
throw new RuntimeException("条码日期不能为空");
|
}
|
LocalDateTime barTime = null;
|
String[] barTimeSplit = qualityHw19CodeImportData.getBarTime().split(" ");
|
String barTimeString = barTimeSplit[0];
|
try {
|
LocalDate localDate = LocalDate.parse(barTimeString, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
barTime = localDate.atStartOfDay();
|
}catch (Exception e){
|
throw new RuntimeException("日期格式错误,请设置成yyyy-MM-dd格式");
|
}
|
//长度校验
|
BigDecimal length = qualityHw19CodeImportData.getLength();
|
if (length.compareTo(new BigDecimal(1000)) >= 0) {
|
throw new RuntimeException("长度超出三位数,不符合规定");
|
}
|
Integer count = baseMapper.selectCount(Wrappers.<QualityHw19Code>lambdaQuery().eq(QualityHw19Code::getBarCode, qualityHw19CodeImportData.getBarCode()));
|
if(count>0){
|
throw new RuntimeException("19条码重复");
|
}
|
QualityHw19Code qualityHw19Code = new QualityHw19Code();
|
BeanUtils.copyProperties(qualityHw19CodeImportData,qualityHw19Code);
|
qualityHw19Code.setBarTime(barTime);
|
qualityHw19CodeList.add(qualityHw19Code);
|
}
|
saveBatch(qualityHw19CodeList);
|
}
|
}
|