Browse Source

QC子件信息录入-导出功能

master
yangzz 2 months ago
parent
commit
f7ffd102d8
  1. 25
      src/main/java/com/xujie/sys/modules/report/qcsubpart/controller/QcSubPartQueryController.java
  2. 2
      src/main/java/com/xujie/sys/modules/report/qcsubpart/dao/QcSubPartReportDao.java
  3. 54
      src/main/java/com/xujie/sys/modules/report/qcsubpart/dao/impl/QcSubPartReportDaoImpl.java
  4. 166
      src/main/java/com/xujie/sys/modules/report/qcsubpart/data/QcSubPartExportRowData.java
  5. 4
      src/main/java/com/xujie/sys/modules/report/qcsubpart/service/QcSubPartReportService.java
  6. 57
      src/main/java/com/xujie/sys/modules/report/qcsubpart/service/impl/QcSubPartReportServiceImpl.java

25
src/main/java/com/xujie/sys/modules/report/qcsubpart/controller/QcSubPartQueryController.java

@ -1,14 +1,18 @@
package com.xujie.sys.modules.report.qcsubpart.controller;
import com.alibaba.fastjson2.JSON;
import com.xujie.sys.common.exception.XJException;
import com.xujie.sys.common.utils.R;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartDetailQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartHeaderQueryData;
import com.xujie.sys.modules.report.qcsubpart.service.QcSubPartReportService;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -37,4 +41,25 @@ public class QcSubPartQueryController {
.put("rows", rows)
.put("total", rows.size());
}
@RequestMapping("exportQcSubPart")
public void exportQcSubPart(HttpServletResponse response, @RequestBody QcSubPartHeaderQueryData data) {
try {
qcSubPartReportService.exportQcSubPart(response, data);
} catch (XJException e) {
writeError(response, e.getMessage());
} catch (IOException e) {
writeError(response, "导出失败");
}
}
private void writeError(HttpServletResponse response, String msg) {
try {
response.reset();
response.setContentType("application/json;charset=UTF-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write(JSON.toJSONString(R.error(msg)));
} catch (IOException ignored) {
}
}
}

2
src/main/java/com/xujie/sys/modules/report/qcsubpart/dao/QcSubPartReportDao.java

@ -15,6 +15,8 @@ public interface QcSubPartReportDao {
List<Map<String, Object>> getDetailList(QcSubPartDetailQueryData data);
List<Map<String, Object>> queryExportRows(QcSubPartHeaderQueryData data);
List<Map<String, Object>> queryAddMainList(QcSubPartAddMainQueryData data);
List<Map<String, Object>> queryAddDetailList(QcSubPartAddDetailQueryData data);

54
src/main/java/com/xujie/sys/modules/report/qcsubpart/dao/impl/QcSubPartReportDaoImpl.java

@ -87,6 +87,60 @@ public class QcSubPartReportDaoImpl implements QcSubPartReportDao {
return namedParameterJdbcTemplate.queryForList(sql.toString(), new BeanPropertySqlParameterSource(data));
}
@Override
public List<Map<String, Object>> queryExportRows(QcSubPartHeaderQueryData data) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ");
sql.append("h.record_no AS recordNo, h.seq_no AS seqNo, CONVERT(VARCHAR(10), h.produce_date, 120) AS scheduledDateMain, ");
sql.append("h.resource_id AS resourceId, h.resource_desc AS resourceDesc, ");
sql.append("h.finished_part_no AS partNo, h.finished_part_desc AS partDesc, h.sku AS sku, ");
sql.append("ISNULL(h.qualified_qty, 0) AS qtyApprove, ");
sql.append("ISNULL(d.sub_part_no, '') AS subPartNo, ISNULL(d.sub_part_desc, '') AS subPartDesc, ");
sql.append("ISNULL(d.supplier_id, '') AS supplierId, ISNULL(d.supplier_name, '') AS supplierName, ");
sql.append("ISNULL(d.model_no, '') AS modelNo, ISNULL(d.manufacture_date, '') AS scheduledDateSub, ISNULL(d.remark, '') AS remark ");
sql.append("FROM qc_subpart_record h ");
sql.append("LEFT JOIN qc_subpart_record_detail d ON d.site = h.site AND d.record_no = h.record_no AND d.del_flag = 'N' ");
sql.append("WHERE h.site = :site AND h.del_flag = 'N' ");
Map<String, Object> params = new HashMap<>();
params.put("site", data.getSite());
String rawBu = emptyToBlank(data.getCitemCode());
String buNo = extractBuNo(rawBu);
params.put("buNo", buNo);
params.put("seqNo", emptyToBlank(data.getSeqNo()));
params.put("partNo", emptyToBlank(data.getPartNo()));
params.put("sku", emptyToBlank(data.getSku()));
Date startDate = parseSqlDate(data.getStartDate());
Date endDate = parseSqlDate(data.getEndDate());
params.put("startDate", startDate);
params.put("endDate", endDate);
if (!rawBu.isEmpty()) {
if (rawBu.contains("_")) {
sql.append("AND h.citem_code = :buNo ");
} else {
sql.append("AND h.citem_code LIKE '%' + :buNo + '%' ");
}
}
if (!emptyToBlank(data.getSeqNo()).isEmpty()) {
sql.append("AND h.seq_no LIKE '%' + :seqNo + '%' ");
}
if (!emptyToBlank(data.getPartNo()).isEmpty()) {
sql.append("AND h.finished_part_no LIKE '%' + :partNo + '%' ");
}
if (!emptyToBlank(data.getSku()).isEmpty()) {
sql.append("AND h.sku LIKE '%' + :sku + '%' ");
}
if (startDate != null) {
sql.append("AND h.produce_date >= :startDate ");
}
if (endDate != null) {
sql.append("AND h.produce_date <= :endDate ");
}
sql.append("ORDER BY h.create_date DESC, h.record_no DESC, ISNULL(d.sort_no, 999999) ASC ");
return namedParameterJdbcTemplate.queryForList(sql.toString(), params);
}
@Override
public List<Map<String, Object>> queryAddMainList(QcSubPartAddMainQueryData data) {
StringBuilder sql = new StringBuilder();

166
src/main/java/com/xujie/sys/modules/report/qcsubpart/data/QcSubPartExportRowData.java

@ -0,0 +1,166 @@
package com.xujie.sys.modules.report.qcsubpart.data;
import com.alibaba.excel.annotation.ExcelProperty;
public class QcSubPartExportRowData {
@ExcelProperty(index = 0, value = "记录号")
private String recordNo;
@ExcelProperty(index = 1, value = "派工单号")
private String seqNo;
@ExcelProperty(index = 2, value = "生产日期(主)")
private String scheduledDateMain;
@ExcelProperty(index = 3, value = "设备编码")
private String resourceId;
@ExcelProperty(index = 4, value = "设备名称")
private String resourceDesc;
@ExcelProperty(index = 5, value = "物料编码")
private String partNo;
@ExcelProperty(index = 6, value = "产品名称")
private String partDesc;
@ExcelProperty(index = 7, value = "SKU")
private String sku;
@ExcelProperty(index = 8, value = "合格数量")
private String qtyApprove;
@ExcelProperty(index = 9, value = "子件编码")
private String subPartNo;
@ExcelProperty(index = 10, value = "子件描述")
private String subPartDesc;
@ExcelProperty(index = 11, value = "供应商编码")
private String supplierId;
@ExcelProperty(index = 12, value = "供应商名称")
private String supplierName;
@ExcelProperty(index = 13, value = "型号")
private String modelNo;
@ExcelProperty(index = 14, value = "生产日期(子件)")
private String scheduledDateSub;
@ExcelProperty(index = 15, value = "备注")
private String remark;
public String getRecordNo() {
return recordNo;
}
public void setRecordNo(String recordNo) {
this.recordNo = recordNo;
}
public String getSeqNo() {
return seqNo;
}
public void setSeqNo(String seqNo) {
this.seqNo = seqNo;
}
public String getScheduledDateMain() {
return scheduledDateMain;
}
public void setScheduledDateMain(String scheduledDateMain) {
this.scheduledDateMain = scheduledDateMain;
}
public String getResourceId() {
return resourceId;
}
public void setResourceId(String resourceId) {
this.resourceId = resourceId;
}
public String getResourceDesc() {
return resourceDesc;
}
public void setResourceDesc(String resourceDesc) {
this.resourceDesc = resourceDesc;
}
public String getPartNo() {
return partNo;
}
public void setPartNo(String partNo) {
this.partNo = partNo;
}
public String getPartDesc() {
return partDesc;
}
public void setPartDesc(String partDesc) {
this.partDesc = partDesc;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
public String getQtyApprove() {
return qtyApprove;
}
public void setQtyApprove(String qtyApprove) {
this.qtyApprove = qtyApprove;
}
public String getSubPartNo() {
return subPartNo;
}
public void setSubPartNo(String subPartNo) {
this.subPartNo = subPartNo;
}
public String getSubPartDesc() {
return subPartDesc;
}
public void setSubPartDesc(String subPartDesc) {
this.subPartDesc = subPartDesc;
}
public String getSupplierId() {
return supplierId;
}
public void setSupplierId(String supplierId) {
this.supplierId = supplierId;
}
public String getSupplierName() {
return supplierName;
}
public void setSupplierName(String supplierName) {
this.supplierName = supplierName;
}
public String getModelNo() {
return modelNo;
}
public void setModelNo(String modelNo) {
this.modelNo = modelNo;
}
public String getScheduledDateSub() {
return scheduledDateSub;
}
public void setScheduledDateSub(String scheduledDateSub) {
this.scheduledDateSub = scheduledDateSub;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}

4
src/main/java/com/xujie/sys/modules/report/qcsubpart/service/QcSubPartReportService.java

@ -5,7 +5,9 @@ import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartAddMainQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartDetailQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartHeaderQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartSaveData;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -14,6 +16,8 @@ public interface QcSubPartReportService {
List<Map<String, Object>> getDetailList(QcSubPartDetailQueryData data);
void exportQcSubPart(HttpServletResponse response, QcSubPartHeaderQueryData data) throws IOException;
List<Map<String, Object>> queryAddMainList(QcSubPartAddMainQueryData data);
List<Map<String, Object>> queryAddDetailList(QcSubPartAddDetailQueryData data);

57
src/main/java/com/xujie/sys/modules/report/qcsubpart/service/impl/QcSubPartReportServiceImpl.java

@ -1,17 +1,25 @@
package com.xujie.sys.modules.report.qcsubpart.service.impl;
import com.alibaba.excel.EasyExcel;
import com.xujie.sys.common.exception.XJException;
import com.xujie.sys.modules.report.qcsubpart.dao.QcSubPartReportDao;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartAddDetailQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartAddMainQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartExportRowData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartDetailQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartHeaderQueryData;
import com.xujie.sys.modules.report.qcsubpart.data.QcSubPartSaveData;
import com.xujie.sys.modules.report.qcsubpart.service.QcSubPartReportService;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -35,6 +43,51 @@ public class QcSubPartReportServiceImpl implements QcSubPartReportService {
return qcSubPartReportDao.getDetailList(data);
}
@Override
public void exportQcSubPart(HttpServletResponse response, QcSubPartHeaderQueryData data) throws IOException {
if (data == null) {
throw new XJException("请求体不能为空");
}
if (emptyToBlank(data.getSite()).isEmpty()) {
throw new XJException("site不能为空");
}
List<Map<String, Object>> rows = qcSubPartReportDao.queryExportRows(data);
if (rows == null || rows.isEmpty()) {
throw new XJException("无可导出数据");
}
List<QcSubPartExportRowData> exportRows = new ArrayList<>();
for (Map<String, Object> row : rows) {
QcSubPartExportRowData dto = new QcSubPartExportRowData();
dto.setRecordNo(toText(row.get("recordNo")));
dto.setSeqNo(toText(row.get("seqNo")));
dto.setScheduledDateMain(toText(row.get("scheduledDateMain")));
dto.setResourceId(toText(row.get("resourceId")));
dto.setResourceDesc(toText(row.get("resourceDesc")));
dto.setPartNo(toText(row.get("partNo")));
dto.setPartDesc(toText(row.get("partDesc")));
dto.setSku(toText(row.get("sku")));
dto.setQtyApprove(toText(row.get("qtyApprove")));
dto.setSubPartNo(toText(row.get("subPartNo")));
dto.setSubPartDesc(toText(row.get("subPartDesc")));
dto.setSupplierId(toText(row.get("supplierId")));
dto.setSupplierName(toText(row.get("supplierName")));
dto.setModelNo(toText(row.get("modelNo")));
dto.setScheduledDateSub(toText(row.get("scheduledDateSub")));
dto.setRemark(toText(row.get("remark")));
exportRows.add(dto);
}
String suffix = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
String fileName = URLEncoder.encode("QC子件报表_" + suffix, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
response.reset();
response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + fileName + ".xlsx");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
EasyExcel.write(response.getOutputStream(), QcSubPartExportRowData.class)
.sheet("QC子件报表")
.doWrite(exportRows);
}
@Override
public List<Map<String, Object>> queryAddMainList(QcSubPartAddMainQueryData data) {
if ("N".equalsIgnoreCase(emptyToBlank(data.getSearchFlag()))) {
@ -119,4 +172,8 @@ public class QcSubPartReportServiceImpl implements QcSubPartReportService {
private String emptyToBlank(String value) {
return value == null ? "" : value.trim();
}
private String toText(Object value) {
return value == null ? "" : String.valueOf(value);
}
}
Loading…
Cancel
Save