生产质量检验,举手免责代码

liweidong
pangyang 1 month ago
parent 1f575ac027
commit 0c67b0f7ae
  1. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetErpSearch.java
  2. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ReviewSheetRedoScrapVO.java
  3. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java
  4. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RaiseHandController.java
  5. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ReviewSheetController.java
  6. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/InspectionTaskMapper.xml
  7. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml
  8. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  9. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ReviewSheetServiceImpl.java
  10. 245
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/FullMergeExcelUtil.java

@ -16,6 +16,8 @@ public class ReviewSheetErpSearch extends ReviewSheet {
@Schema(description = "责任零件")
private String dutyPart;
@Schema(description = "责任批号")
private String dutyBatNo;
private String createTimeStart;

@ -26,4 +26,6 @@ public class ReviewSheetRedoScrapVO extends ReviewSheet {
private String priceBeforePlate;
@Schema(description = "物料名称")
private String partName;
@Schema(description = "物料号")
private String partCode;
}

@ -265,17 +265,19 @@ public class InspectionTaskController extends BladeController {
inspectionTask.setId(id);
InspectionTask detail = service.getOne(Condition.getQueryWrapper(inspectionTask));
WorkPlan workPlan = workPlanService.getOne(new QueryWrapper<WorkPlan>().lambda().eq(WorkPlan::getId, detail.getWpId()));
List<ProduceMonitorSlotListVO> list = macToolUseService.listSlotInfo(workPlan);
if(null != listSheet && listSheet.size() > 0){
list.forEach(one -> {
one.setIsShow("1");
});
}else{
list.forEach(one -> {
one.setIsShow("0");
});
List<ProduceMonitorSlotListVO> list = new ArrayList<>();
if(null != workPlan){
list = macToolUseService.listSlotInfo(workPlan);
if(null != listSheet && listSheet.size() > 0){
list.forEach(one -> {
one.setIsShow("1");
});
}else{
list.forEach(one -> {
one.setIsShow("0");
});
}
}
return R.data(list);
// return service.getSamePlace(id);
}

@ -23,6 +23,7 @@ import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.PreAuth;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
@ -41,6 +42,7 @@ import org.springblade.desk.quality.service.ILiquidTankTaskCopyService;
import org.springblade.desk.quality.service.ILiquidTankWaveService;
import org.springblade.desk.quality.service.IRaiseHandService;
import org.springblade.desk.quality.service.IRelTankWaveItemService;
import org.springblade.desk.quality.util.FullMergeExcelUtil;
import org.springblade.desk.quality.wrapper.LiquidTankTaskCopyWrapper;
import org.springblade.desk.quality.wrapper.LiquidTankWaveWrapper;
import org.springblade.desk.quality.wrapper.RaiseHandWrapper;
@ -239,4 +241,30 @@ public class RaiseHandController extends BladeController {
);
return R.status(service.saveBatch(importList));
}
@GetMapping("/exportData")
@ApiOperationSupport(order = 70)
@Operation(summary = "导出Excel", description = "传入LiquidTankTaskCopy")
@PreAuth
public void exportData(Long id,
HttpServletResponse response) {
List<LiquidTankTaskCopyVO> list = new ArrayList<>();
String name = "举手免责信息收藏";
String tableTtile ="bbb";
try {
FullMergeExcelUtil.exportHandExcel(
response,
"举手免责",
name,
tableTtile,
new String[]{"", "", "填写具体班组或个人", "岗位", "发生时间", "免责问题描述", "处理人",
"是否涉及免除金额", "免除金额(元)","处理时间","纠正措施","固化文件","是否闭环",
"闭环日期","问题是否需要在公司范围内举一反三","问题是否涉及用户"},
list,
new int[]{0}
);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

@ -215,6 +215,9 @@ public class ReviewSheetController extends BladeController {
// .peek(service::setErpVOValue)
// .collect(Collectors.toList());
// return R.data(pagesVO);
if(null == search.getRsCode() && null == search.getDutyPart() && null == search.getDutyBatNo()){
search.setRsCode("########################");
}
IPage<ReviewSheetErpVO> pagesVO = service.listErp(Condition.getPage(query), search);
return R.data(pagesVO);
}

@ -93,7 +93,9 @@
wo.TEST_QTY as orderCheckQty,
wo.LOSS_QTY as orderLossQty,
wo.SCRAP_QTY as orderScrapQty,
wo.CARD_NO AS cardNo
wo.CARD_NO AS cardNo,
dp.KEY_INFO as keyInfo,
dp.REMARKS as remark
FROM QA_INSPECTION_TASK t
-- 车间作业计划 wp
LEFT JOIN MES_WORK_PLAN wp ON t.WP_ID = wp.ID

@ -211,7 +211,7 @@
-- 车间作业计划 wp
LEFT JOIN MES_WORK_PLAN wp ON rs.WP_ID = wp.ID
-- 车间订单 wo
LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID
LEFT JOIN MES_WORK_ORDER wo ON wp.WO_ID = wo.ID
-- 生产订单 yo
LEFT JOIN MES_YIELD_ORDER yo ON wo.YO_ID = yo.ID
-- 外协厂商 oem
@ -266,12 +266,16 @@
<select id="listErp"
resultType="org.springblade.desk.quality.pojo.vo.ReviewSheetErpVO">
SELECT rs.*
SELECT rs.*,ps.NAME as processName,wp.ORDERS as processNo,yo.PART_CODE AS partCode
FROM QA_REVIEW_SHEET rs
-- 车间作业计划 wp
LEFT JOIN MES_WORK_PLAN wp ON rs.WP_ID = wp.ID
-- 车间订单 wo
LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID
LEFT JOIN MES_WORK_ORDER wo ON wp.WO_ID = wo.ID
-- 生产订单 yo
LEFT JOIN MES_YIELD_ORDER yo ON wo.YO_ID = yo.ID
-- 工序
LEFT JOIN BS_PROCESS_SET ps ON wp.ORDERS = ps.CODE
-- 外协厂商 oem
LEFT JOIN BS_OEM oem ON wp.OC_ID = oem.ID
WHERE (

@ -208,9 +208,9 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
// todo: fake data
task.setWoId(2002227460172464129L);
// todo: fake data
task.setWoCode("WO-N251233302-R001");
task.setWoCode("WO-N26014390-R007");
// todo: fake data
task.setWpId(2002227460206018562L);
task.setWpId(2020698109946847233L);
// 接收时间为空
task.setReceiveDate(null);
task.setFromType(fromType);

@ -157,6 +157,12 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
@Override
public void setInitVOValue(ReviewSheetInitVO vo) {
if(null != vo.getReviewUserId()){
R<UserInfo> rUICR = userClient.userInfo(vo.getReviewUserId());
if(null != rUICR && null !=rUICR.getData() && null != rUICR.getData().getUser()){
vo.setReviewUserRealName(rUICR.getData().getUser().getRealName());
}
}
// todo: fake
vo.setBase(setBaseVOValue(userClient, sysClient, dictClient, vo, "ReviewSheet-Status"));
}
@ -191,7 +197,10 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
// 查询明细表
List<ReviewDuty> listRD = dutyService.listByReviewSheetId(vo.getId());
for (ReviewDuty reviewDuty : listRD) {
sbDutyPart.append(reviewDuty.getDutyPart()).append(",");
if (StringUtils.isNotBlank(reviewDuty.getDutyPart())) {
sbDutyPart.append(reviewDuty.getDutyPart()).append(",");
}
// sbDutyPart.append(reviewDuty.getDutyPart()).append(",");
sbDutyBatNo.append(reviewDuty.getDutyBatch()).append(",");
}
vo.setDutyPart(sbDutyPart.toString());
@ -387,7 +396,7 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
rs.setReviewDate(LocalDateTime.now());
updateById(rs);
Integer bizType = rs.getBizType();
if (ReviewSheetConst.BizType.T_SELF_REDO.equals(bizType)) { // 返 todo
if (ReviewSheetConst.BizType.T_SELF_REDO.equals(bizType)) { // 返 todo
} else if (ReviewSheetConst.BizType.T_SELF_SCRAP.equals(bizType)) { // 报废 todo

@ -10,11 +10,256 @@ import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class FullMergeExcelUtil {
public static void exportHandExcel(HttpServletResponse response, String fileName,
String mergeTitle,String tableTtile, String[] columnTitles,
List<LiquidTankTaskCopyVO> userList, int[] mergeColumnIndexes) throws Exception {
List<String> columns = new ArrayList<>();
columns.add("单位");
columns.add("负责人");
columns.add("举手当事责任人或班组");
columns.add("举手当事责任人或班组");
columns.add("问题描述");
columns.add("问题描述");
columns.add("响应处理");
columns.add("响应处理");
columns.add("响应处理");
columns.add("响应处理");
columns.add("响应处理");
columns.add("问题闭环");
columns.add("问题闭环");
columns.add("问题闭环");
columns.add("问题共享");
columns.add("问题共享");
// 1. 创建工作簿和工作表
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("数据报表");
// 设置列宽
for (int i = 0; i < columnTitles.length; i++) {
sheet.autoSizeColumn(i);
sheet.setColumnWidth(i, Math.max(sheet.getColumnWidth(i), 2000));
}
// -------------------------- 第一步:创建合并标头 --------------------------
Row mergeTitleRow = sheet.createRow(0);
mergeTitleRow.setHeightInPoints(30);
Cell mergeTitleCell = mergeTitleRow.createCell(0);
mergeTitleCell.setCellValue(mergeTitle);
CellStyle mergeTitleStyle = createStyle(workbook, true, (short) 16, HorizontalAlignment.CENTER);
mergeTitleCell.setCellStyle(mergeTitleStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columnTitles.length - 1));
// sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columnTitles.length - 3));
Row mergeTitleRow01 = sheet.createRow(1);
mergeTitleRow01.setHeightInPoints(30);
Cell mergeTitleCell01 = mergeTitleRow01.createCell(0);
mergeTitleCell01.setCellValue(mergeTitle);
CellStyle mergeTitleStyle01 = createStyle(workbook, true, (short) 12, HorizontalAlignment.CENTER);
mergeTitleCell01.setCellStyle(mergeTitleStyle01);
mergeTitleStyle01.setWrapText( true);
for (int i = 0; i < columns.size(); i++) {
Cell cell = mergeTitleRow01.createCell(i);
cell.setCellValue(columns.get(i));
cell.setCellStyle(mergeTitleStyle01);
sheet.setColumnWidth(i, 12 * 256);
// sheet.autoSizeColumn(i);
}
sheet.addMergedRegion(new CellRangeAddress(1, 1, 2, 3));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 4, 5));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 6, 10));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 11, 13));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 14, 15));
// -------------------------- 第二步:创建列标题 --------------------------
Row columnTitleRow = sheet.createRow(2);
columnTitleRow.setHeightInPoints(20);
CellStyle columnTitleStyle = createStyle(workbook, true, (short) 12, HorizontalAlignment.CENTER);
columnTitleStyle.setWrapText( true);
for (int i = 0; i < columnTitles.length; i++) {
Cell cell = columnTitleRow.createCell(i);
cell.setCellValue(columnTitles[i]);
cell.setCellStyle(columnTitleStyle);
sheet.setColumnWidth(i, 12 * 256);
// sheet.autoSizeColumn(i);
}
// -------------------------- 第三步:填充User实体数据 --------------------------
int dataStartRow = 3;
CellStyle dataStyle = createStyle(workbook, false, (short) 12, HorizontalAlignment.CENTER);
for (int i = 0; i < userList.size(); i++) {
Row dataRow = sheet.createRow(dataStartRow + i);
dataRow.setHeightInPoints(20);
LiquidTankTaskCopyVO user = userList.get(i);
// 手动映射:列索引 → User字段(与columnTitles一一对应)
// 取样时间
int a = 0;
Cell cell0 = dataRow.createCell(a);
cell0.setCellStyle(dataStyle);
cell0.setCellValue(user.getSampleDate());
//温度
int b = 1;
Cell cell1 = dataRow.createCell(b);
cell1.setCellStyle(dataStyle);
cell1.setCellValue(user.getTemperatureActual());
//槽号
int c = 2;
Cell cell2 = dataRow.createCell(c);
// cell2.setCellStyle(dataStyle);
cell2.setCellValue(user.getWorkTankName() == null ? "" : user.getWorkTankName());
//体积(L)
int d = 3;
Cell cell3 = dataRow.createCell(d);
// cell3.setCellStyle(dataStyle);
cell3.setCellValue(user.getVolume() == null ? 0 : user.getVolume());
//分析项目
Cell cell4 = dataRow.createCell(4);
cell4.setCellStyle(dataStyle);
cell4.setCellValue(user.getTestElement() == null ? "" : user.getTestElement());
//规范下限(g/L)
Cell cell5 = dataRow.createCell(5);
cell5.setCellStyle(dataStyle);
cell5.setCellValue(user.getNormValueMin() == null ? 0 : user.getNormValueMin());
//目标下限(g/L)
Cell cell6 = dataRow.createCell(6);
cell6.setCellStyle(dataStyle);
cell6.setCellValue(user.getTargetValueMin() == null ? 0 : user.getTargetValueMin());
//添加点(g/L)
Cell cell7 = dataRow.createCell(7);
cell7.setCellStyle(dataStyle);
cell7.setCellValue(user.getFillingLocation() == null ? 0 : user.getFillingLocation());
//目标值(g/L)
Cell cell8 = dataRow.createCell(8);
cell8.setCellStyle(dataStyle);
cell8.setCellValue(user.getTargetValue() == null ? 0 : user.getTargetValue());
//目标上限(g/L)
Cell cell9 = dataRow.createCell(9);
cell9.setCellStyle(dataStyle);
cell9.setCellValue(user.getTargetValueMax() == null ? 0 : user.getTargetValueMax());
//规范上限(g/L)
Cell cell10 = dataRow.createCell(10);
cell10.setCellStyle(dataStyle);
cell10.setCellValue(user.getNormValueMax() == null ? 0 : user.getNormValueMax());
//化验频率
Cell cell11 = dataRow.createCell(11);
cell11.setCellStyle(dataStyle);
cell11.setCellValue(user.getTestFrequency() == null ? "" : user.getTestFrequency());
//化验值(g/L)
Cell cell12 = dataRow.createCell(12);
cell12.setCellStyle(dataStyle);
cell12.setCellValue(user.getFirstTestValue() == null ? 0 : user.getFirstTestValue());
//药品计算公式
Cell cell13 = dataRow.createCell(13);
cell13.setCellStyle(dataStyle);
cell13.setCellValue(user.getReportFormulaContent() == null ? "" : user.getReportFormulaContent());
//药品添加量
Cell cell14 = dataRow.createCell(14);
cell14.setCellStyle(dataStyle);
cell14.setCellValue(user.getActualAddValue() == null ? 0 : user.getActualAddValue());
//药品批次号
Cell cell15 = dataRow.createCell(15);
cell15.setCellStyle(dataStyle);
cell15.setCellValue(user.getDrugBatCode() == null ? "" : user.getDrugBatCode());
//药品监督员签名
Cell cell16 = dataRow.createCell(16);
cell16.setCellStyle(dataStyle);
cell16.setCellValue(user.getDrugSuUserSign()== null ? "" : user.getDrugSuUserSign());
//药品添加人签名
Cell cell17 = dataRow.createCell(17);
cell17.setCellStyle(dataStyle);
cell17.setCellValue(user.getDrugAddUserSign()== null ? "" : user.getDrugAddUserSign());
//调整后化验值(g/L)
Cell cell18 = dataRow.createCell(18);
cell18.setCellStyle(dataStyle);
cell18.setCellValue(user.getRepeatTestValue()== null ? 0 : user.getRepeatTestValue());
//1\合格 2、不合格
String qualified = user.getQualified() == 1 ? "合格" : "不合格";
Cell cell19 = dataRow.createCell(19);
cell19.setCellStyle(dataStyle);
cell19.setCellValue(qualified);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//有效期
Cell cell20 = dataRow.createCell(20);
cell20.setCellStyle(dataStyle);
cell20.setCellValue(user.getValidDate().format(formatter));
//超出规范极限调整后的结果
Cell cell21 = dataRow.createCell(21);
cell21.setCellStyle(dataStyle);
cell21.setCellValue(user.getOutRangeResult()==null ? "" : user.getOutRangeResult());
//槽液清理记录
Cell cell22 = dataRow.createCell(22);
cell22.setCellStyle(dataStyle);
cell22.setCellValue(user.getClearRecord()==null ? "" : user.getClearRecord());
//控制规范
Cell cell23 = dataRow.createCell(23);
cell23.setCellStyle(dataStyle);
cell23.setCellValue(user.getNorm()==null ? "" : user.getNorm());
}
// -------------------------- 第四步:合并数据列相同值 --------------------------
// if (mergeColumnIndexes != null && mergeColumnIndexes.length > 0 && userList.size() > 0) {
// for (int colIndex : mergeColumnIndexes) {
// if (colIndex < 0 || colIndex >= columnTitles.length) {
// continue;
// }
// mergeSameValueCells(sheet, dataStartRow, dataStartRow + userList.size() - 1, colIndex);
// }
// }
// -------------------------- 第五步:响应头和文件输出 --------------------------
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("UTF-8");
String encodeFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + encodeFileName + ".xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
}
/**
* 导出带合并标头+数据合并的ExcelUser实体类版本
* @param response 响应对象

Loading…
Cancel
Save