liweidong
liweidong-hj 3 months ago
commit 7f3089638d
  1. 8
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java
  2. 183
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/PriceSheetExcel.java
  3. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemApprovalQuery.java
  4. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemOrderQuery.java
  5. 213
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/WorkPlanDto.java
  6. 29
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java
  7. 87
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/MesMakeRecVO.java
  8. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ReviewSheetErpSearch.java
  9. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ReviewSheetRedoScrapVO.java
  10. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/CertificateMaintenanceMapper.xml
  11. 42
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  12. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java
  13. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/PlatingTypeRulesController.java
  14. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  15. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java
  16. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java
  17. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java
  18. 333
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  19. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/PlatingTypeRulesServiceImpl.java
  20. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrMakeRecController.java
  21. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  22. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java
  23. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml
  24. 56
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MakeRecMapper.xml
  25. 31
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml
  26. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java
  27. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java
  28. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  29. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  30. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java
  31. 404
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java
  32. 81
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  33. 25
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  34. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java
  35. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RaiseHandController.java
  36. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ReviewSheetController.java
  37. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/InspectionTaskMapper.xml
  38. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml
  39. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  40. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ReviewSheetServiceImpl.java
  41. 245
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/FullMergeExcelUtil.java
  42. BIN
      blade-service/blade-desk/src/main/resources/Excel/oem/外协工序模板.xls

@ -1,6 +1,7 @@
package org.springblade.desk.oem.pojo.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
@ -26,6 +27,13 @@ public class OemProcessImport extends BaseEntity {
@ExcelProperty(index = 1)
private String caCodes;
/**
* 是否手动结算0否(自动结算)1是(手动结算)
*/
@ExcelProperty(index = 2)
private String manualStr;
private Long processId;
private String craftIds;
private String manual;
}

@ -0,0 +1,183 @@
package org.springblade.desk.oem.pojo.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 报价单 Excel实体类
*
* @author qyl
* @since 2026年3月12日
*/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class PriceSheetExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 厂家代码
*/
@ColumnWidth(20)
@ExcelProperty("厂家代码")
private String splycode;
/**
* 厂家名称
*/
@ColumnWidth(20)
@ExcelProperty("厂家名称")
private String splyname;
/**
* 物料号
*/
@ColumnWidth(20)
@ExcelProperty("物料号")
private String prtno;
/**
* 物料名称
*/
@ColumnWidth(20)
@ExcelProperty("物料名称")
private String prtdesc;
/**
* 生产标识
*/
@ColumnWidth(20)
@ExcelProperty("生产标识")
private String prtlotno;
/**
* 工序内容
*/
@ColumnWidth(20)
@ExcelProperty("工序内容")
private String gxinfo;
/**
* 阶梯价标识
*/
@ColumnWidth(20)
@ExcelProperty("阶梯价标识")
private String stairflag;
/**
* 阶梯上限
*/
@ColumnWidth(20)
@ExcelProperty("阶梯上限")
private String lower;
/**
* 阶梯下限
*/
@ColumnWidth(20)
@ExcelProperty("阶梯下限")
private String upper;
/**
* 不含税价格
*/
@ColumnWidth(20)
@ExcelProperty("不含税价格")
private String price;
/**
* 计量单位
*/
@ColumnWidth(20)
@ExcelProperty("计量单位")
private String prtum;
/**
* 工作订单号
*/
@ColumnWidth(20)
@ExcelProperty("工作订单号")
private String wono;
/**
* 生效日期
*/
@ColumnWidth(20)
@ExcelProperty("生效日期")
private String startdat;
/**
* 有效日期
*/
@ColumnWidth(20)
@ExcelProperty("有效日期")
private String validdat;
/**
* 备注
*/
@ColumnWidth(20)
@ExcelProperty("备注")
private String remark;
/**
* 报价单号
*/
@ColumnWidth(20)
@ExcelProperty("报价单号")
private String seqid;
/**
* 制单人
*/
@ColumnWidth(20)
@ExcelProperty("制单人")
private String inputman;
/**
* 制单时间
*/
@ColumnWidth(20)
@ExcelProperty("制单时间")
private String inputdat;
/**
* 价格类型
*/
@ColumnWidth(20)
@ExcelProperty("价格类型")
private String pricetype;
/**
* 报价单状态
*/
@ColumnWidth(20)
@ExcelProperty("报价单状态")
private String validflag;
/**
* 镀种描述
*/
@ColumnWidth(20)
@ExcelProperty("镀种描述")
private String coating_desc;
/**
* 阶梯价计量单位
*/
@ColumnWidth(20)
@ExcelProperty("阶梯价计量单位")
private String stairunit;
}

@ -16,7 +16,7 @@ public class OemApprovalQuery {
/**
* 审核状态
*/
@Schema(description = "审核状态(字符串1,2,3)")
@Schema(description = "审核状态,字符串2,3(2-待审批,3-不通过,4-通过)")
private String approvalStatus;
/**
* 车间订单号

@ -2,11 +2,9 @@ package org.springblade.desk.oem.pojo.request;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.util.date.DateUtils;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.util.Date;
/**
* 外协订单检索请求入参
@ -17,8 +15,13 @@ public class OemOrderQuery {
/**
* 订单状态
*/
@Schema(description = "订单状态")
@Schema(description = "订单状态集合,传1,2,3")
private String orderStatus;
/**
* 外协状态
*/
@Schema(description = "外协状态集合,传1,2,3(外协状态(1-待外协、2-外协中、3-已完成))")
private String oemStatusList;
/**
* 订单单号
*/

@ -1,10 +1,12 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.enums.WorkOrderEnum;
import java.io.Serializable;
import java.util.Date;
@ -15,151 +17,154 @@ import java.util.Date;
* @author lyj
* @date 2022-11-01 10:16
*/
@Builder
@Data
public class WorkPlanDto implements Serializable {
/**
* 下级B号
*/
@Schema(description = "下级B号")
private String nextRoam;
/**
* 生产单号
*/
@Schema(description = "生产单号")
private String yoCode;
/**
* 计划单号
*/
@Schema(description = "计划单号")
private String poCode;
/**
* 零件号
*/
@Schema(description = "零件号")
private String partCode;
/**
* 产品型号
*/
@Schema(description = "产品型号")
private String productType;
/**
* 名称
*/
@Schema(description = "名称")
private String partName;
/**
* 镀种
*/
@Schema(description = "镀种")
private String plate;
/**
* 生产标识
*/
@Schema(description = "生产标识")
private String prodIdent;
/**
* 使用部门
*/
@Schema(description = "使用部门")
private String useDept;
/**
* 面积
*/
@Schema(description = "面积(㎡)")
private Double poArea;
/**
* 需求交期
*/
@Schema(description = "需求交期")
private Date demandDate;
/**
* 计划员
*/
@Schema(description = "计划员")
private String planUser;
/**
* 计划下达时间
*/
@Schema(description = "下级B号")
private Date releaseDate;
/**
* 一级工艺线路
*/
@Schema(description = "一级工艺线路")
private String primaryCraft;
/**
* 路线卡号
*/
@Schema(description = "路线卡号")
private String cardNo;
/**
* 批次号
*/
@Schema(description = "批次号")
private String batchNo;
/**
* 订单编号
*/
@Schema(description = "订单编号")
private String woCode;
/**
* 加工数量
*/
@Schema(description = "加工数量")
private Double makeQty;
/**
* 未报工数量
*/
@Schema(description = "未报工数量")
private Double notWorkQty;
/**
* 已报工数量
*/
@Schema(description = "已报工数量")
private Double workQty;
/**
* 报废
*/
@Schema(description = "报废")
private Double scrapQty;
/**
* 计划完工日期
*/
private Date planEndDate;
/**
* 已入库数量
*/
@Schema(description = "计划完工日期")
private String planEndDate;
@Schema(description = "计划开始日期")
private String planStartDate;
@Schema(description = "已入库数量")
private Double inventoryQty;
/**
* 已入库数量
*/
@Schema(description = "已入库数量")
private Double notInQty;
/**
* 运行状态
*/
@Schema(description = "运行状态")
public String runStatusTitle;
/**
* 工序状态
*/
public Short status;
/**
* 优先级
*/
@Schema(description = "工序状态")
public Integer status;
@Schema(description = "优先级")
public String priorityTitle;
/**
* 领料状态
*/
@Schema(description = "领料状态")
public String pickingStatusTitle;
/**
* 是否绑定挂次号
*/
@Schema(description = "是否绑定挂次号")
public Boolean isBinging;
/**
* 当前工序
*/
@Schema(description = "当前工序")
public Long currentWpId;
public Long wpId;
@Schema(description = "当前工序内容")
public String currentWpTitle;
@Schema(description = "当前工序班组")
public String currentMakeTeam;
/**
* 上序
*/
@Schema(description = "上序内容")
public String frontWpTitle;
@Schema(description = "上序班组")
public String frontMakeTeam;
/**
* 下序
*/
public String nextWpTitle;
public String nextMakeTeam;
private YieldOrder yieldOrder;
@Schema(description = "下序内容")
public String nextWpTitle;
private WorkOrder workOrder;
@Schema(description = "下序班组")
public String nextMakeTeam;
private WorkPlan workPlan;
public WorkPlanDto(YieldOrder yo, WorkOrder wo, WorkPlan currentWP,Boolean isBinging) {
this.nextRoam = yo.getRoamNoNext();
this.yoCode = yo.getYoCode();
this.poCode = yo.getYpCode();
this.partCode = yo.getPartCode();
this.productType = yo.getProductType();
this.partName = yo.getPartName();
this.plate = yo.getPlate();
this.prodIdent = yo.getProductIdent();
this.useDept = yo.getUseDept();
this.poArea = yo.getYpArea();
this.demandDate = yo.getDemandDate();
this.planUser = yo.getPlanUser();
this.releaseDate = yo.getReleaseDate();
this.primaryCraft = yo.getPrimaryCraft();
this.cardNo = wo.getCardNo();
this.batchNo = wo.getBatchNo();
this.woCode = wo.getWoCode();
this.makeQty = currentWP.getQualifiedQty();
this.notWorkQty = currentWP.getQualifiedQty() - currentWP.getWorkQty() - currentWP.getScrapQty();
this.workQty = currentWP.getWorkQty();
this.scrapQty = currentWP.getScrapQty();
this.planStartDate = wo.getPlanStartDate();
this.planEndDate = wo.getPlanEndDate();
this.inventoryQty = wo.getInventoryQty();
this.notInQty = wo.getMakeQty() - wo.getInventoryQty();
this.runStatusTitle = WorkOrderEnum.getName(wo.getRunStatus());
this.priorityTitle = WorkOrder.priorityMap.get(wo.getPriority());
this.pickingStatusTitle = WorkOrder.pickingStatusMap.get(wo.getPickingStatus());
this.isBinging = isBinging;
this.currentWpId = currentWP.getId();
this.wpId = currentWP.getId();
this.status = currentWP.getStatus();
}
}

@ -25,6 +25,19 @@ public class WorkOrderRun extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 待外协
*/
public static Short OEM_STATUS_TO = 1;
/**
* 外协中
*/
public static Short OEM_STATUS_IN = 2;
/**
* 外协完成
*/
public static Short OEM_STATUS_END = 3;
/**
* 外协
*/
@ -75,8 +88,19 @@ public class WorkOrderRun extends BaseEntity {
public String getRunStatusTitle() {
return runStatusMap.get(runStatus);
}
}
public static Map<Short, String> oemStatusMap = new HashMap<>(4);
static {
oemStatusMap.put(OEM_STATUS_TO, "待外协");
oemStatusMap.put(OEM_STATUS_IN, "外协中");
oemStatusMap.put(OEM_STATUS_END, "外协完成");
}
public String getOemStatusTitle() {
return oemStatusMap.get(oemStatus);
}
/**
* 车间订单
*/
@ -171,5 +195,6 @@ public class WorkOrderRun extends BaseEntity {
@Schema(description = "分批原因")
private String batchReason;
@Schema(description = "外协状态(1-待外协、2-外协中、3-已完成)")
private Short oemStatus;
}

@ -1,10 +1,12 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.produce.pojo.entity.MakeRec;
import java.io.Serial;
import java.util.Date;
/**
* 加工记录 视图实体类
@ -13,9 +15,86 @@ import java.io.Serial;
* @since 2026-02-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MesMakeRecVO extends MakeRec {
@Serial
private static final long serialVersionUID = 1L;
public class MesMakeRecVO {
@Schema(description = "报工记录ID")
private Long mrId;
@Schema(description = "报工时间")
private Date makeTime;
@Schema(description = "加工数量")
private Double workQty;
@Schema(description = "报废数量")
private Double scrapQty;
@Schema(description = "报工人")
private Long worker;
@Schema(description = "报工人姓名")
private String workerName;
@Schema(description = "本序ID")
private Long ppsId;
@Schema(description = "本序名称")
private String ppsName;
@Schema(description = "本序加工班组")
private Long makeTeam;
@Schema(description = "本序加工班组")
private String makeTeamName;
@Schema(description = "上序ID")
private Long frontPpsId;
@Schema(description = "上序名称")
private String frontPpsName;
@Schema(description = "上序加工班组")
private Long frontMakeTeam;
@Schema(description = "上序加工班组")
private String frontMakeTeamName;
@Schema(description = "下序ID")
private Long nextPpsId;
@Schema(description = "下序名称")
private String nextPpsName;
@Schema(description = "下序加工班组")
private Long nextMakeTeam;
@Schema(description = "下序加工班组")
private String nextMakeTeamName;
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "流程卡号")
private String cardNo;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "零件名称")
private String partName;
@Schema(description = "产品型号")
private String productType;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "镀种")
private String plate;
@Schema(description = "生产标识")
private String productIdent;
@Schema(description = "面积(㎡)")
private Double ypArea;
}

@ -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;
}

@ -130,7 +130,7 @@
ct.astronaut_validity_period as astronaut_validity_period
FROM MES_POST_HANDLE ph
LEFT JOIN BLADE_USER bu ON ph.USER_ID = bu.ID
LEFT JOIN BA_TEAM_SET bd ON ph.DEPT_ID = bd.ID
LEFT JOIN BS_TEAM_SET bd ON ph.DEPT_ID = bd.ID
LEFT JOIN MES_CERTIFICATE_MAINTENANCE cm ON ph.id = cm.ph_id AND cm.is_deleted = 0
LEFT JOIN MES_CERTIFICATE_TYPE ct ON cm.certificate_id = ct.id AND ct.is_deleted = 0
WHERE ph.is_deleted = 0 and ph.staff_type != 1

@ -12,6 +12,8 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
@ -22,6 +24,7 @@ import org.springblade.core.tool.utils.DateUtil;
import org.springblade.desk.basic.pojo.entity.Oem;
import org.springblade.desk.basic.service.IOemService;
import org.springblade.desk.oem.pojo.excel.OemOrderExcel;
import org.springblade.desk.oem.pojo.excel.PriceSheetExcel;
import org.springblade.desk.oem.pojo.request.*;
import org.springblade.desk.oem.pojo.vo.*;
import org.springblade.desk.order.pojo.entity.YieldOrder;
@ -63,9 +66,6 @@ public class OemOrderController extends BladeController {
@Autowired
IYieldOrderService yieldOrderService;
@Autowired
IOemService oemService;
@Resource
private IErpDataOemClient erpDataOemClient;
@ -218,19 +218,33 @@ public class OemOrderController extends BladeController {
@ApiOperationSupport(order = 12)
@Operation(summary = "领料单打印", description = "")
public String printOemMaterialRequisition(@Valid @RequestBody MaterialRequisitionQuery materialRequisitionQuery, Query query) {
IPage<MaterialRequisitionVO> pages = workOrderRunService.exportOemMaterialRequisition(Condition.getPage(query), materialRequisitionQuery);
Oem oem = oemService.getById(materialRequisitionQuery.getOcId());
User user = UserCache.getUser(AuthUtil.getUser().getUserId());
Map<String, Object> result = new HashMap<>();
result.put("title", "外协计划明细");
result.put("picture", "");
result.put("printNo", "");
result.put("printUser", user.getRealName());
result.put("printDate", DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
result.put("oemName", oem.getAbbreviation());
result.put("data", pages.getRecords());
Map<String, Object> result = workOrderRunService.printOemMaterialRequisition(Condition.getPage(query), materialRequisitionQuery);
//todo:qyl打印后需更改相关车间订单信息,后续确认具体方案
return JSONObject.toJSONString(result);
}
/**
* 报价单导出
*
* @param priceSheetQuery
* @param query
* @param response
*/
@GetMapping("/export-priceSheetData")
@ApiOperationSupport(order = 14)
@Operation(summary = "报价单导出数据", description = "")
public void exportPriceSheetData(PriceSheetQuery priceSheetQuery, Query query, HttpServletResponse response) {
query.setSize(99999);
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(priceSheetQuery, query);
Page<PriceSheetVO> data = pageR.getData();
List<PriceSheetVO> list = data.getRecords();
List<PriceSheetExcel> excels = new ArrayList<>();
for (PriceSheetVO priceSheetVO : list) {
PriceSheetExcel excel = new PriceSheetExcel();
BeanUtils.copyProperties(priceSheetVO, excel);
excels.add(excel);
}
ExcelUtil.export(response, "报价单" + DateUtil.time(), "报价单", excels, PriceSheetExcel.class);
}
}

@ -20,6 +20,7 @@ import org.springblade.desk.oem.pojo.request.StatementQuery;
import org.springblade.desk.oem.pojo.vo.OemMeritsVO;
import org.springblade.desk.oem.pojo.vo.StatementVO;
import org.springframework.beans.BeanUtils;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -31,6 +32,7 @@ import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Map;
import java.util.List;
@ -118,16 +120,32 @@ public class OemStatementController extends BladeController {
*/
@PostMapping("/oemSettleAccounts")
@ApiOperationSupport(order = 8)
@Operation(summary = "外协结算", description = "")
@Operation(summary = "外协手动结算", description = "")
public R oemSettleAccounts(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) {
return mesOemStatementService.oemSettleAccounts(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice(), oemSettleAccountsSave.getPutStoreDate());
}
/**
* 外协自动结算
*/
@GetMapping("/autoSettlement")
@ApiOperationSupport(order = 9)
@Operation(summary = "外协自动结算", description = "")
public R autoSettlement(
@Parameter(description = "车间订单号", required = true)
@RequestParam String woCode,
@Parameter(description = "镀后入库日期", required = true) // 添加必填备注
@DateTimeFormat(pattern = "yyyy-MM-dd")
@RequestParam LocalDate date) {
return mesOemStatementService.autoSettlement(woCode, date);
}
/**
* 外协预结算-预览
*/
@PostMapping("/preSettlement")
@ApiOperationSupport(order = 8)
@ApiOperationSupport(order = 10)
@Operation(summary = "外协预结算-预览", description = "")
public R<List<StatementVO>> preSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) {
return R.data(mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()));
@ -137,7 +155,7 @@ public class OemStatementController extends BladeController {
* 外协结算批量审核
*/
@PostMapping("/approval")
@ApiOperationSupport(order = 9)
@ApiOperationSupport(order = 11)
@Operation(summary = "外协结算批量审核", description = "")
public R approval(@Valid @RequestBody OemSettleAccountsApproval oemSettleAccountsApproval) {
return mesOemStatementService.approval(oemSettleAccountsApproval);
@ -147,7 +165,7 @@ public class OemStatementController extends BladeController {
* 外协结算无需结算
*/
@PostMapping("/noSettlement")
@ApiOperationSupport(order = 10)
@ApiOperationSupport(order = 12)
@Operation(summary = "外协结算无需结算", description = "")
public R noSettlement(@RequestBody List<StatementVO> list) {
return mesOemStatementService.notNeedSettlement(list);
@ -157,7 +175,7 @@ public class OemStatementController extends BladeController {
* 导出数据
*/
@GetMapping("/export-mesOemStatement")
@ApiOperationSupport(order = 12)
@ApiOperationSupport(order = 13)
@Operation(summary = "导出数据", description = "传入mesOemStatement")
public void exportOemStatement(StatementQuery mesOemStatement, Query query, BladeUser bladeUser, HttpServletResponse response) {
query.setSize(9999);
@ -176,7 +194,7 @@ public class OemStatementController extends BladeController {
* 外协预结算导出数据
*/
@PostMapping("/export-preSettlement")
@ApiOperationSupport(order = 13)
@ApiOperationSupport(order = 14)
@Operation(summary = "外协预结算-导出", description = "传入mesOemStatement")
public void exportPreSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave, BladeUser bladeUser, HttpServletResponse response) {
List<StatementVO> list = mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice());

@ -11,6 +11,7 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.util.ExcelExtUtil;
@ -80,6 +81,7 @@ public class PlatingTypeRulesController extends BladeController {
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入mesPlatingTypeRules")
public R save(@Valid @RequestBody PlatingTypeRulesEntity mesPlatingTypeRules) {
mesPlatingTypeRules.setCreateUser(AuthUtil.getUserId());
return R.status(mesPlatingTypeRulesService.save(mesPlatingTypeRules));
}
@ -100,6 +102,7 @@ public class PlatingTypeRulesController extends BladeController {
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入mesPlatingTypeRules")
public R submit(@Valid @RequestBody PlatingTypeRulesEntity mesPlatingTypeRules) {
mesPlatingTypeRules.setCreateUser(AuthUtil.getUserId());
return R.status(mesPlatingTypeRulesService.saveOrUpdate(mesPlatingTypeRules));
}

@ -118,7 +118,7 @@
MAX( h.UPDATE_TIME) AS UPDATE_TIME,
wm_concat(to_char(NVL(h.ROS_STATUS, 1))) AS ROS_STATUS,
wm_concat(to_char(p.plate_code)) AS plate_code,
wm_concat(to_char(p.plate_goods_code)) AS plateGoodsCode,
wm_concat(to_char(p.plate_goods_code)) AS plate_goods_code,
c.code as OC_CODE,
a.HOUR_QUOTA,
wm_concat(to_char(a.scrap_qty)) AS scrap_qty,

@ -50,6 +50,15 @@ public interface IOemStatementService extends BaseService<OemStatementEntity> {
*/
R oemSettleAccounts(List<StatementVO> statementVOS, BigDecimal price, LocalDate putStoreDate);
/**
* 外协自动结算
*
* @param woCode 车间订单号
* @param date 镀后入库日期
* @return
*/
R autoSettlement(String woCode, LocalDate date);
/**
* 预结算
*

@ -76,6 +76,8 @@ public class OemMeritsServiceImpl extends BaseServiceImpl<OemMeritsMapper, OemMe
entity.setCreateTime(new Date());
entity.setEndScore(0D);
}
entity.setProduceStatus(OemMeritsEntity.PRODUCT_NO);
entity.setQualityStatus(OemMeritsEntity.QUALITY_NO);
saves.add(entity);
}
if (saves.size() > 0) {

@ -87,6 +87,7 @@ public class OemProcessServiceImpl extends BaseServiceImpl<OemProcessMapper, Oem
if (processSetMap.containsKey(oemProcessImport.getPaCode())) {
oemProcessImport.setProcessId(processSetMap.get(oemProcessImport.getPaCode()));
oemProcessImport.setCraftIds(caIds);
oemProcessImport.setManual("否".equals(oemProcessImport.getManualStr()) ? "0" : "1");
OemProcessEntity oemProcessEntity = new OemProcessEntity();
BeanUtils.copyProperties(oemProcessImport, oemProcessEntity);
oemProcessEntity.setOemProcessCode(oemProcessImport.getPaCode());

@ -3,8 +3,10 @@ package org.springblade.desk.oem.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import org.springblade.core.mp.support.Query;
@ -31,6 +33,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@ -65,6 +68,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
@Override
public R oemSettleAccounts(List<StatementVO> statementVOS, BigDecimal price, LocalDate putStoreDate) {
// 定义计数器
AtomicInteger countSuccess = new AtomicInteger(0);
AtomicInteger countError = new AtomicInteger(0);
//1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表>
Map<String, List<StatementVO>> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName));
for (Map.Entry<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) {
@ -73,72 +79,72 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//2.以外协名称,日期查出的全部报价单
String oemName = listEntry.getKey();
// List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName, putStoreDate);
List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName, putStoreDate);
//假数据测试用
List<PriceSheetVO> priceSheetAllList = new ArrayList<>();
PriceSheetVO priceSheet1 = new PriceSheetVO();
priceSheet1.setPrice("60");
priceSheet1.setSplyname(oemName);
priceSheet1.setPrtum("件");
priceSheet1.setWono("WO-N2510424439-R002");
priceSheet1.setSeqid("GXJG-20250228018");
priceSheet1.setGxinfo("玻璃封接电化学抛光");
priceSheetAllList.add(priceSheet1);
PriceSheetVO priceSheet2 = new PriceSheetVO();
priceSheet2.setPrice("26");
priceSheet2.setSplyname(oemName);
priceSheet2.setPrtum("件");
priceSheet2.setSeqid("GXJG-20250228012");
priceSheet2.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet2.setPrtlotno("JI和JHT");
priceSheet2.setStairflag("单批阶梯价(按单件面积)");
priceSheet2.setLower("5");
priceSheet2.setUpper("0");
priceSheet2.setPrtno("21E6-575-10724-%螺母");
priceSheetAllList.add(priceSheet2);
PriceSheetVO priceSheet3 = new PriceSheetVO();
priceSheet3.setPrice("34");
priceSheet3.setSplyname(oemName);
priceSheet3.setPrtum("件");
priceSheet3.setSeqid("GXJG-20250228012");
priceSheet3.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet3.setPrtlotno("JI和JHT");
priceSheet3.setStairflag("单批阶梯价(按单件面积)");
priceSheet3.setLower("10");
priceSheet3.setUpper("5.00001");
priceSheet3.setPrtno("21E6-575-10724-%螺母");
priceSheetAllList.add(priceSheet3);
PriceSheetVO priceSheet4 = new PriceSheetVO();
priceSheet4.setPrice("15");
priceSheet4.setSplyname(oemName);
priceSheet4.setPrtum("件");
priceSheet4.setSeqid("GXJG-20250228012");
priceSheet4.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet4.setPrtlotno("JHT");
priceSheet4.setStairflag("非阶梯价");
priceSheet4.setPrtno("21E6-575-10724-%螺母");
priceSheetAllList.add(priceSheet4);
PriceSheetVO priceSheet5 = new PriceSheetVO();
priceSheet5.setPrice("99");
priceSheet5.setSplyname(oemName);
priceSheet5.setPrtum("件");
priceSheet5.setSeqid("GXJG-20250228012");
priceSheet5.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet5.setStairflag("非阶梯价");
priceSheet5.setPrtno("21E6-575-10724-%螺母");
priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)");
priceSheetAllList.add(priceSheet5);
PriceSheetVO priceSheet6 = new PriceSheetVO();
priceSheet6.setPrice("200");
priceSheet6.setSplyname(oemName);
priceSheet6.setPrtum("件");
priceSheet6.setSeqid("GXJG-20250228012");
priceSheet6.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet6.setStairflag("非阶梯价");
priceSheet6.setPrtno("21E6-575-10724-%螺母");
priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)");
priceSheetAllList.add(priceSheet6);
// List<PriceSheetVO> priceSheetAllList = new ArrayList<>();
// PriceSheetVO priceSheet1 = new PriceSheetVO();
// priceSheet1.setPrice("60");
// priceSheet1.setSplyname(oemName);
// priceSheet1.setPrtum("件");
// priceSheet1.setWono("WO-N2510424439-R002");
// priceSheet1.setSeqid("GXJG-20250228018");
// priceSheet1.setGxinfo("玻璃封接电化学抛光");
// priceSheetAllList.add(priceSheet1);
// PriceSheetVO priceSheet2 = new PriceSheetVO();
// priceSheet2.setPrice("26");
// priceSheet2.setSplyname(oemName);
// priceSheet2.setPrtum("件");
// priceSheet2.setSeqid("GXJG-20250228012");
// priceSheet2.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet2.setPrtlotno("JI和JHT");
// priceSheet2.setStairflag("单批阶梯价(按单件面积)");
// priceSheet2.setLower("5");
// priceSheet2.setUpper("0");
// priceSheet2.setPrtno("21E6-575-10724-%螺母");
// priceSheetAllList.add(priceSheet2);
// PriceSheetVO priceSheet3 = new PriceSheetVO();
// priceSheet3.setPrice("34");
// priceSheet3.setSplyname(oemName);
// priceSheet3.setPrtum("件");
// priceSheet3.setSeqid("GXJG-20250228012");
// priceSheet3.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet3.setPrtlotno("JI和JHT");
// priceSheet3.setStairflag("单批阶梯价(按单件面积)");
// priceSheet3.setLower("10");
// priceSheet3.setUpper("5.00001");
// priceSheet3.setPrtno("21E6-575-10724-%螺母");
// priceSheetAllList.add(priceSheet3);
// PriceSheetVO priceSheet4 = new PriceSheetVO();
// priceSheet4.setPrice("15");
// priceSheet4.setSplyname(oemName);
// priceSheet4.setPrtum("件");
// priceSheet4.setSeqid("GXJG-20250228012");
// priceSheet4.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet4.setPrtlotno("JHT");
// priceSheet4.setStairflag("非阶梯价");
// priceSheet4.setPrtno("21E6-575-10724-%螺母");
// priceSheetAllList.add(priceSheet4);
// PriceSheetVO priceSheet5 = new PriceSheetVO();
// priceSheet5.setPrice("99");
// priceSheet5.setSplyname(oemName);
// priceSheet5.setPrtum("件");
// priceSheet5.setSeqid("GXJG-20250228012");
// priceSheet5.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet5.setStairflag("非阶梯价");
// priceSheet5.setPrtno("21E6-575-10724-%螺母");
// priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)");
// priceSheetAllList.add(priceSheet5);
// PriceSheetVO priceSheet6 = new PriceSheetVO();
// priceSheet6.setPrice("200");
// priceSheet6.setSplyname(oemName);
// priceSheet6.setPrtum("件");
// priceSheet6.setSeqid("GXJG-20250228012");
// priceSheet6.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet6.setStairflag("非阶梯价");
// priceSheet6.setPrtno("21E6-575-10724-%螺母");
// priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)");
// priceSheetAllList.add(priceSheet6);
if (priceSheetAllList.isEmpty()) {
//【结算异常】
@ -193,6 +199,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//保存
List<OemStatementEntity> saves = statementVOList.stream()
.map(statementVO -> {
// 统计数量
if (Objects.equals(OemStatementEntity.IN_SETTLEMENT, statementVO.getRosStatus())) {
countSuccess.incrementAndGet();
} else if (Objects.equals(OemStatementEntity.ERR_SETTLEMENT, statementVO.getRosStatus())) {
countError.incrementAndGet();
}
OemStatementEntity entity = new OemStatementEntity();
BeanUtils.copyProperties(statementVO, entity);
entity.setUpdateTime(new Date());
@ -202,10 +214,31 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
.collect(Collectors.toList());
baseMapper.insertOrUpdate(saves);
}
return R.success("操作完成");
return R.data(Map.of(
"success", countSuccess,
"error", countError
));
}
@Override
public R autoSettlement(String woCode, LocalDate date) {
if (StringUtils.isEmpty(woCode) || null == date) {
return R.fail("车间订单号和镀后入库日期不能为空");
}
StatementQuery query = new StatementQuery();
query.setWoCode(woCode);
query.setRosStatusList("1");
query.setManual("0");
IPage<StatementVO> page = new Page<>();
page.setSize(999);
List<StatementVO> statementVOS = baseMapper.selectOemStatementPage(page, query);
if (statementVOS == null || statementVOS.isEmpty()) {
return R.fail(String.format("【%】无未结算的结算单", woCode));
}
return oemSettleAccounts(statementVOS, BigDecimal.ZERO, date);
}
@Override
public List<StatementVO> preSettlement(List<StatementVO> statementVOS, BigDecimal price) {
//1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表>
@ -216,78 +249,78 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//2.以外协名称查出的全部报价单
String oemName = listEntry.getKey();
// List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName);
List<PriceSheetVO> priceSheetAllList = getPriceSheets(oemName);
//假数据测试用
List<PriceSheetVO> priceSheetAllList = new ArrayList<>();
PriceSheetVO priceSheet1 = new PriceSheetVO();
priceSheet1.setPrice("60");
priceSheet1.setSplyname(oemName);
priceSheet1.setPrtum("件");
priceSheet1.setWono("WO-N2510424439-R002");
priceSheet1.setSeqid("GXJG-20250228018");
priceSheet1.setGxinfo("玻璃封接电化学抛光");
priceSheet1.setStartdat("2026-01-15");
priceSheetAllList.add(priceSheet1);
PriceSheetVO priceSheet2 = new PriceSheetVO();
priceSheet2.setPrice("26");
priceSheet2.setSplyname(oemName);
priceSheet2.setPrtum("件");
priceSheet2.setSeqid("GXJG-20250228012");
priceSheet2.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet2.setPrtlotno("JI和JHT");
priceSheet2.setStairflag("单批阶梯价(按单件面积)");
priceSheet2.setLower("5");
priceSheet2.setUpper("0");
priceSheet2.setPrtno("21E6-575-10724-%螺母");
priceSheet2.setStartdat("2026-01-15");
priceSheetAllList.add(priceSheet2);
PriceSheetVO priceSheet3 = new PriceSheetVO();
priceSheet3.setPrice("34");
priceSheet3.setSplyname(oemName);
priceSheet3.setPrtum("件");
priceSheet3.setSeqid("GXJG-20250228012");
priceSheet3.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet3.setPrtlotno("JI和JHT");
priceSheet3.setStairflag("单批阶梯价(按单件面积)");
priceSheet3.setLower("10");
priceSheet3.setUpper("5.00001");
priceSheet3.setPrtno("21E6-575-10724-%螺母");
priceSheet3.setStartdat("2026-01-15");
priceSheetAllList.add(priceSheet3);
PriceSheetVO priceSheet4 = new PriceSheetVO();
priceSheet4.setPrice("15");
priceSheet4.setSplyname(oemName);
priceSheet4.setPrtum("件");
priceSheet4.setSeqid("GXJG-20250228012");
priceSheet4.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet4.setPrtlotno("JHT");
priceSheet4.setStairflag("非阶梯价");
priceSheet4.setPrtno("21E6-575-10724-%螺母");
priceSheet4.setStartdat("2026-01-15");
priceSheetAllList.add(priceSheet4);
PriceSheetVO priceSheet5 = new PriceSheetVO();
priceSheet5.setPrice("99");
priceSheet5.setSplyname(oemName);
priceSheet5.setPrtum("件");
priceSheet5.setSeqid("GXJG-20250228012");
priceSheet5.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet5.setStairflag("非阶梯价");
priceSheet5.setPrtno("21E6-575-10724-%螺母");
priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)");
priceSheet5.setStartdat("2026-01-15");
priceSheetAllList.add(priceSheet5);
PriceSheetVO priceSheet6 = new PriceSheetVO();
priceSheet6.setPrice("200");
priceSheet6.setSplyname(oemName);
priceSheet6.setPrtum("件");
priceSheet6.setSeqid("GXJG-20250228012");
priceSheet6.setGxinfo("玻璃封接电镀去氧化皮");
priceSheet6.setStairflag("非阶梯价");
priceSheet6.setPrtno("21E6-575-10724-%螺母");
priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)");
priceSheet6.setStartdat("2026-01-16");
priceSheetAllList.add(priceSheet6);
// List<PriceSheetVO> priceSheetAllList = new ArrayList<>();
// PriceSheetVO priceSheet1 = new PriceSheetVO();
// priceSheet1.setPrice("60");
// priceSheet1.setSplyname(oemName);
// priceSheet1.setPrtum("件");
// priceSheet1.setWono("WO-N2510424439-R002");
// priceSheet1.setSeqid("GXJG-20250228018");
// priceSheet1.setGxinfo("玻璃封接电化学抛光");
// priceSheet1.setStartdat("2026-01-15");
// priceSheetAllList.add(priceSheet1);
// PriceSheetVO priceSheet2 = new PriceSheetVO();
// priceSheet2.setPrice("26");
// priceSheet2.setSplyname(oemName);
// priceSheet2.setPrtum("件");
// priceSheet2.setSeqid("GXJG-20250228012");
// priceSheet2.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet2.setPrtlotno("JI和JHT");
// priceSheet2.setStairflag("单批阶梯价(按单件面积)");
// priceSheet2.setLower("5");
// priceSheet2.setUpper("0");
// priceSheet2.setPrtno("21E6-575-10724-%螺母");
// priceSheet2.setStartdat("2026-01-15");
// priceSheetAllList.add(priceSheet2);
// PriceSheetVO priceSheet3 = new PriceSheetVO();
// priceSheet3.setPrice("34");
// priceSheet3.setSplyname(oemName);
// priceSheet3.setPrtum("件");
// priceSheet3.setSeqid("GXJG-20250228012");
// priceSheet3.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet3.setPrtlotno("JI和JHT");
// priceSheet3.setStairflag("单批阶梯价(按单件面积)");
// priceSheet3.setLower("10");
// priceSheet3.setUpper("5.00001");
// priceSheet3.setPrtno("21E6-575-10724-%螺母");
// priceSheet3.setStartdat("2026-01-15");
// priceSheetAllList.add(priceSheet3);
// PriceSheetVO priceSheet4 = new PriceSheetVO();
// priceSheet4.setPrice("15");
// priceSheet4.setSplyname(oemName);
// priceSheet4.setPrtum("件");
// priceSheet4.setSeqid("GXJG-20250228012");
// priceSheet4.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet4.setPrtlotno("JHT");
// priceSheet4.setStairflag("非阶梯价");
// priceSheet4.setPrtno("21E6-575-10724-%螺母");
// priceSheet4.setStartdat("2026-01-15");
// priceSheetAllList.add(priceSheet4);
// PriceSheetVO priceSheet5 = new PriceSheetVO();
// priceSheet5.setPrice("99");
// priceSheet5.setSplyname(oemName);
// priceSheet5.setPrtum("件");
// priceSheet5.setSeqid("GXJG-20250228012");
// priceSheet5.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet5.setStairflag("非阶梯价");
// priceSheet5.setPrtno("21E6-575-10724-%螺母");
// priceSheet5.setRemark("氰化亚金钾380.01-400元/克(未税)");
// priceSheet5.setStartdat("2026-01-15");
// priceSheetAllList.add(priceSheet5);
// PriceSheetVO priceSheet6 = new PriceSheetVO();
// priceSheet6.setPrice("200");
// priceSheet6.setSplyname(oemName);
// priceSheet6.setPrtum("件");
// priceSheet6.setSeqid("GXJG-20250228012");
// priceSheet6.setGxinfo("玻璃封接电镀去氧化皮");
// priceSheet6.setStairflag("非阶梯价");
// priceSheet6.setPrtno("21E6-575-10724-%螺母");
// priceSheet6.setRemark("氰化亚金钾400.01-500元/克(未税)");
// priceSheet6.setStartdat("2026-01-16");
// priceSheetAllList.add(priceSheet6);
if (priceSheetAllList.isEmpty()) {
//【结算异常】
statementVOList.forEach(statementVO -> {
@ -370,6 +403,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
updateWrapper
.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA)
.set("memo", "无需结算")
.set("total_price", null)
.set("unit_price", null)
.set("quotation", "")
.set("ros_status", OemStatementEntity.NOT_NEED_SETTLEMENT)
.in("id", ids);
} else {
@ -394,11 +430,36 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
entity.setApprovalStatus(OemStatementEntity.APPROVAL_STATUS_VIA);
entity.setRosStatus(OemStatementEntity.NOT_NEED_SETTLEMENT);
entity.setMemo("无需结算");
entity.setTotalPrice(null);
entity.setUnitPrice(null);
entity.setQuotation("");
entity.setUpdateTime(new Date());
return entity;
})
.collect(Collectors.toList());
baseMapper.insertOrUpdate(saves);
// baseMapper.insertOrUpdate(saves);
// 逐条处理
for (OemStatementEntity entity : saves) {
if (entity.getId() == null) {
// 新增
baseMapper.insert(entity);
} else {
// 更新,使用UpdateWrapper确保null值被更新
LambdaUpdateWrapper<OemStatementEntity> wrapper = Wrappers.lambdaUpdate();
wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice())
.set(OemStatementEntity::getUnitPrice, entity.getUnitPrice())
.set(OemStatementEntity::getQuotation, entity.getQuotation())
.set(OemStatementEntity::getApprovalStatus, entity.getApprovalStatus())
.set(OemStatementEntity::getRosStatus, entity.getRosStatus())
.set(OemStatementEntity::getMemo, entity.getMemo())
.set(OemStatementEntity::getUpdateTime, entity.getUpdateTime())
.eq(OemStatementEntity::getId, entity.getId());
baseMapper.update(null, wrapper);
}
}
return R.success("操作完成");
}
return R.fail("未选取结算单");
}

@ -1,5 +1,6 @@
package org.springblade.desk.oem.service.impl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.oem.pojo.entity.OemProcessEntity;
import org.springblade.desk.oem.pojo.entity.PlatingTypeRulesEntity;
@ -49,6 +50,7 @@ public class PlatingTypeRulesServiceImpl extends BaseServiceImpl<PlatingTypeRule
PlatingTypeRulesEntity mesPlatingTypeRulesEntity = new PlatingTypeRulesEntity();
BeanUtils.copyProperties(platingTypeRulesImport, mesPlatingTypeRulesEntity);
mesPlatingTypeRulesEntity.setCreateTime(new Date());
mesPlatingTypeRulesEntity.setCreateUser(AuthUtil.getUserId());
saves.add(mesPlatingTypeRulesEntity);
});
baseMapper.insertOrUpdate(saves);

@ -16,7 +16,7 @@ import org.springblade.desk.produce.service.IMakeRecService;
import org.springframework.web.bind.annotation.*;
/**
* 加工记录 控制器
* 工作台 控制器
*
* @author BladeX
* @since 2025-11-28
@ -24,42 +24,43 @@ import org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor
@RequestMapping("/prMakeRec")
@Tag(name = "加工记录", description = "接口")
@Tag(name = "工作台", description = "接口")
public class PrMakeRecController extends BladeController {
private final IMakeRecService makeRecService;
@GetMapping(value = "/loadCurrentWp/{cardNo}")
@ApiOperationSupport(order = 1)
@Operation(summary = "加载当前工序", description = "传入cardNo")
@Operation(summary = "工序报工-加载当前工序", description = "传入cardNo")
public R loadSubOrder(@PathVariable String cardNo) {
return R.data(makeRecService.loadCurrentWp(cardNo));
}
@Operation(summary = "增加加工记录")
@Operation(summary = "报工提交")
@PostMapping("/saveMakeRec")
public R saveMakeRec(@RequestBody MakeRecDTO makeRecDTO) {
makeRecService.saveMakeRec(makeRecDTO);
return R.success() ;
return R.status(makeRecService.saveMakeRec(makeRecDTO)) ;
}
@GetMapping("/queryMakeRec")
@ApiOperationSupport(order = 3)
@Operation(summary = "工记录", description = "传入mesMakeRec")
@Operation(summary = "工记录", description = "传入mesMakeRec")
public R<IPage<MesMakeRecVO>> page(MesMakeRecVO mesMakeRec, Query query) {
IPage<MesMakeRecVO> pages = makeRecService.selectMesMakeRecPage(Condition.getPage(query), mesMakeRec);
return R.data(pages);
return R.data(makeRecService.selectMesMakeRecPage(Condition.getPage(query), mesMakeRec));
}
@GetMapping(value = "/loadNotReceived/{cardNo}")
@Operation(summary = "任务接收查询", description = "传入cardNo")
public R loadNotReceived(@PathVariable String cardNo) {
return R.data(makeRecService.loadNotReceived(cardNo));
}
@GetMapping(value = "/afterPlaReceive/{cardNo}")
@Operation(summary = "加载镀后接收数据", description = "传入cardNo")
public R afterPlaReceive(@PathVariable String cardNo) {
return R.data(makeRecService.afterPlaReceive(cardNo));
}
@Operation(summary = "手动维护生产追溯")
@PostMapping("/saveRetrospectDefend")
public R saveRetrospectDefend(@RequestBody RetrospectDefendDTO retrospectDefendDTO) {

@ -98,11 +98,7 @@ public class RbProduceManageController extends BladeController {
@ApiOperationSupport(order = 8)
@Operation(summary = "更改车间订单优先级", description = "传入WorkOrder")
public R updatePriority(@RequestBody UpdatePriorityDTO updatePriorityDTO) {
WorkOrder wo = workOrderService.getById(updatePriorityDTO.getWoId());
// wo.setPriority(WorkOrder.PRIORITY_SCH_IMP);
wo.setPriority(updatePriorityDTO.getPriority());
wo.setDemandDate(updatePriorityDTO.getDemandDate());
return R.data(workOrderService.updateById(wo));
return R.data(workOrderService.updatePriority(updatePriorityDTO));
}
@GetMapping(value = "/getWorkOrderCache/{woId}")

@ -22,4 +22,6 @@ public interface MacToolUseMapper extends BaseMapper<MacToolUse> {
List<ProduceMonitorSlotListVO> listSlotInfo(Long id, int isGr, int isCx);
MesQcProduceRunEntity getBoxInfoByWpIdMtnCode(Long id);
MacToolUse queryByParams(Long wpId, Integer rsBool, Integer fsBool, Integer ecBool);
}

@ -84,6 +84,13 @@
ORDER BY
c.IN_DATE DESC
</select>
<select id="queryByParams" resultType="org.springblade.desk.produce.pojo.entity.MacToolUse">
select * from (select * from MES_MAC_TOOL_USE where IS_DELETED = 0 and WP_ID = #{wpId}
<if test="rsBool == 1">and BS_RACK_SET is not null</if>
<if test="fsBool == 1">and BS_FEI_BA_SET is not null</if>
<if test="ecBool == 1">and EQUIPMENT_CARD is not null</if>
order by MTN_CODE) where rownum = 1
</select>
</mapper>

@ -29,10 +29,60 @@
<result column="FLAG_QTY" property="flagQty"/>
<result column="FLAG_COLOUR_ONE" property="flagColourOne"/>
</resultMap>
<select id="selectMesMakeRecPage" resultType="org.springblade.desk.produce.pojo.vo.MesMakeRecVO">
select
mr.id AS mrId,
mr.MAKE_TIME AS makeTime,
mr.WORK_QTY AS workQty,
mr.SCRAP_QTY AS scrapQty,
mr.WORKER AS worker,
wp.PPS_ID AS ppsId,
wp.MAKE_TEAM AS makeTeam,
fwp.PPS_ID AS frontPpsId,
fwp.MAKE_TEAM AS frontMakeTeam,
nwp.PPS_ID AS nextPpsId,
nwp.MAKE_TEAM AS nextMakeTeam,
wo.WO_CODE AS woCode,
wo.CARD_NO AS cardNo,
yo.PART_CODE AS partCode,
yo.PART_NAME AS partName,
yo.PRODUCT_TYPE AS productType,
yo.BATCH_NO AS batchNo,
yo.PLATE AS plate,
yo.PRODUCT_IDENT AS productIdent,
yo.YP_AREA AS ypArea
FROM MES_MAKE_REC mr
LEFT JOIN MES_WORK_PLAN wp ON mr.WP_ID = wp.ID
LEFT JOIN MES_WORK_PLAN fwp ON wp.FRONT_WP_ID = fwp.ID
LEFT JOIN MES_WORK_PLAN nwp ON wp.NEXT_WP_ID = nwp.ID
LEFT JOIN MES_WORK_ORDER wo ON wp.WO_ID = wo.ID
LEFT JOIN MES_YIELD_ORDER yo ON wo.YO_ID = yo.ID
<where>
mr.IS_DELETED = 0 and a.worker = #{mesMakeRec.worker}
<if test="mesMakeRec.woCode != null and mesMakeRec.woCode != ''">
AND wo.WO_CODE LIKE concat(concat('%', #{mesMakeRec.worker}),'%')
</if>
<if test="mesMakeRec.cardNo != null and mesMakeRec.cardNo != ''">
AND wo.CARD_NO LIKE concat(concat('%', #{mesMakeRec.cardNo}),'%')
</if>
<if test="mesMakeRec.partCode != null and mesMakeRec.partCode != ''">
AND yo.PART_CODE LIKE concat(concat('%', #{mesMakeRec.partCode}),'%')
</if>
<if test="mesMakeRec.partName != null and mesMakeRec.partName != ''">
AND yo.PART_NAME LIKE concat(concat('%', #{mesMakeRec.partName}),'%')
</if>
<if test="mesMakeRec.batchNo != null and mesMakeRec.batchNo != ''">
AND yo.BATCH_NO LIKE concat(concat('%', #{mesMakeRec.batchNo}),'%')
</if>
<if test="mesMakeRec.productType != null and mesMakeRec.productType != ''">
AND yo.PRODUCT_TYPE LIKE concat(concat('%', #{mesMakeRec.productType}),'%')
</if>
<if test="mesMakeRec.productIdent != null and mesMakeRec.productIdent != ''">
AND yo.PRODUCT_IDENT LIKE concat(concat('%', #{mesMakeRec.productIdent}),'%')
</if>
</where>
<select id="selectMesMakeRecPage" resultMap="mesMakeRecResultMap">
select * from MES_MAKE_REC where is_deleted = 0
</select>
</mapper>

@ -19,6 +19,7 @@
<result column="run_status" property="runStatus"/>
<result column="approval_time" property="approvalTime"/>
<result column="batch_reason" property="batchReason"/>
<result column="oem_status" property="oemStatus"/>
<!-- OemOrderVO自身字段 -->
<result column="memo" property="memo"/>
@ -66,9 +67,10 @@
mwor.run_status,
mwor.approval_time,
mwor.batch_reason,
mwor.oem_status,
mwor.wo_code,
-- 车间订单表字段
two.wo_code,
two.card_no,
two.batch_no,
two.priority,
@ -187,6 +189,13 @@
<if test="query.demandDateEnd != null">
AND two.demand_date &lt; #{query.demandDateEnd}+ 1
</if>
<if test="query.oemStatusList != null and query.oemStatusList != ''">
AND mwor.oem_status IN
<foreach collection="query.oemStatusList.split(',')" item="status"
open="(" separator="," close=")" index="index">
#{status}
</foreach>
</if>
<choose>
<when test='query.orderStatus != null and query.orderStatus != ""'>
AND two.run_status IN
@ -310,11 +319,21 @@
</if>
<choose>
<when test='query.approvalStatus != null and query.approvalStatus != ""'>
AND mwor.run_status IN
<foreach collection="query.approvalStatus.split(',')" item="status"
open="(" separator="," close=")" index="index">
#{status}
</foreach>
<choose>
<when test='query.approvalStatus.contains("4")'>
AND (
mwor.approval_time IS NOT NULL
AND mwor.run_status NOT IN (2, 3)
)
</when>
<otherwise>
AND mwor.run_status IN
<foreach collection="query.approvalStatus.split(',')" item="status"
open="(" separator="," close=")" index="index">
#{status}
</foreach>
</otherwise>
</choose>
</when>
<otherwise>
AND mwor.run_status = 2

@ -50,4 +50,6 @@ public interface IMacToolUseService extends BaseService<MacToolUse> {
MacToolUse getDataByWpIdAndIndex(Long id, String number);
MacToolUse getHangNumIsNull(Long id);
MacToolUse queryByParams(Long id, Integer rsBool, Integer fsBool, Integer ecBool);
}

@ -26,7 +26,7 @@ public interface IMakeRecService extends BaseService<MakeRec> {
* 增加工序记录
* @param makeRecDTO
*/
void saveMakeRec(MakeRecDTO makeRecDTO);
boolean saveMakeRec(MakeRecDTO makeRecDTO);
IPage<MesMakeRecVO> selectMesMakeRecPage(IPage<MesMakeRecVO> page, MesMakeRecVO mesMakeRec);

@ -10,6 +10,8 @@ import org.springblade.desk.oem.pojo.vo.OemApprovalVO;
import org.springblade.desk.oem.pojo.vo.OemOrderVO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import java.util.Map;
/**
* 车间订单运行记录表 服务类
*
@ -61,11 +63,19 @@ public interface IWorkOrderRunService extends BaseService<WorkOrderRun> {
R changeOemManufacturer(Long worId, Long ocId);
/**
* 领料单打印
* 领料单打印列表
*
* @param page
* @param materialRequisitionQuery
* @return
*/
IPage<MaterialRequisitionVO> exportOemMaterialRequisition(IPage<MaterialRequisitionVO> page, MaterialRequisitionQuery materialRequisitionQuery);
/**
* 打印数据
*
* @param page
* @param materialRequisitionQuery
*/
Map<String, Object> printOemMaterialRequisition(IPage<MaterialRequisitionVO> page, MaterialRequisitionQuery materialRequisitionQuery);
}

@ -2,10 +2,7 @@ package org.springblade.desk.produce.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.InBatchesDTO;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.dto.*;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
@ -190,4 +187,6 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
* @param workOrder 订单
*/
void updateHostWorkUnit(WorkOrder workOrder);
boolean updatePriority(UpdatePriorityDTO updatePriorityDTO);
}

@ -127,6 +127,11 @@ public class MacToolUseServiceImpl extends BaseServiceImpl<MacToolUseMapper, Mac
return CollectionUtils.isNotEmpty(macToolUses) ? macToolUses.get(0) : null;
}
@Override
public MacToolUse queryByParams(Long wpId, Integer rsBool, Integer fsBool, Integer ecBool) {
return baseMapper.queryByParams(wpId, rsBool, fsBool, ecBool);
}
public static final int time2Integer(Date d) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);

@ -7,12 +7,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jodd.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.basic.pojo.entity.RelTeamSetUser;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.pojo.entity.UserRight;
import org.springblade.desk.basic.service.IRelTeamSetUserService;
import org.springblade.desk.basic.service.IUserRightService;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
@ -36,14 +39,14 @@ import org.springblade.desk.produce.pojo.vo.WorkPlanLoadVO;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.AuditFile;
import org.springblade.desk.quality.service.IAuditFileService;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.DataScope;
import org.springblade.system.pojo.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -80,6 +83,12 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
private final IMesEquipmentCardService mesEquipmentCardService;
private final IUserRightService userRightService;
private final IMesRbFilePreserveSlotService mesRbFilePreserveSlotService;
private final IMesRbFilePreserveDetailService mesRbFilePreserveDetailService;
@Override
public WorkPlanDto loadCurrentWp(String cardNo) {
WorkOrder wo = workOrderMapper.getWorkOrderByCardNo(cardNo, (short) 0);
@ -95,7 +104,7 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
if (!WorkPlan.STATUS_START.equals(wp.getStatus())) {
throw new ServiceException("当前工序已报工完成!");
}
// this.checkTeamWorkPlan(wp, prWorkPlanService.getTeamId(userInfo.getUserId()));
this.checkTeamWorkPlan(wp, this.getTeamId(AuthUtil.getUserId()));
boolean isBinging = false;
// 查询当前工序是否绑定了挂次号
long count = macToolUseService.count(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId()).isNotNull(MacToolUse::getHangNum));
@ -103,89 +112,105 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
isBinging = true;
}
YieldOrder yieldOrder = yieldOrderService.getById(wo.getYoId());
return WorkPlanDto.builder().workPlan(wp).workOrder(wo).yieldOrder(yieldOrder).isBinging(isBinging).build();
WorkPlanDto workPlanDto = new WorkPlanDto(yieldOrder, wo, wp, isBinging);
workPlanDto.setCurrentWpTitle("");
workPlanDto.setCurrentMakeTeam("");
workPlanDto.setFrontWpTitle("");
workPlanDto.setFrontMakeTeam("");
workPlanDto.setNextWpTitle("");
workPlanDto.setNextMakeTeam("");
return workPlanDto;
}
private void checkTeamWorkPlan(WorkPlan wp, List<Long> teamId) {
Long tsId;
//判断是否特殊工序,如果是特殊工序验证附属班组,反之则为分派班组
//20260304 逻辑更改,若存在附属班组,则验证附属班组,不存在附属班组,验证加工班组
if (wp.getSubsidiaryTeam() != null) {
tsId = wp.getSubsidiaryTeam();
} else {
tsId = wp.getMakeTeam();
}
if (teamId == null) {
throw new ServiceException("当前登录人无对应班组!");
}
if (!teamId.contains(tsId)) {
throw new ServiceException("当前工序不是登录人所在班组工序,不能操作!");
}
}
private List<Long> getTeamId(Long userId) {
List<UserRight> bsTeamSet = userRightService.list(Wrappers.lambdaQuery(UserRight.class).eq(UserRight::getUserId, userId).eq(UserRight::getUrType, "bs_team_set"));
if (CollectionUtils.isEmpty(bsTeamSet)) {
return null;
}
return bsTeamSet.stream().map(UserRight::getTheId).toList();
}
@Override
public void saveMakeRec(MakeRecDTO makeRecDTO) {
public boolean saveMakeRec(MakeRecDTO makeRecDTO) {
WorkPlan wp = workPlanMapper.selectById(makeRecDTO.getWpId());
if (!WorkPlan.STATUS_START.equals(wp.getStatus())) {
throw new ServiceException("product.prWorkPlan.workOk");
throw new ServiceException("当前工序已报工完成!");
}
MacToolUse mtu = null;
MacToolUse mtu;
DsProcessEntity dsProcess = dsProcessService.getById(wp.getPpsId());
DsProcessEntity frontProcess = dsProcessService.getById(wp.getFrontWpId());
//如果是上挂工序,需判定是否绑定挂具
if (dsProcess.getProcessName().equals("上挂")) {
mtu = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId())
.isNotNull(MacToolUse::getBsRackSet));
if ("上挂".equals(dsProcess.getProcessName())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 0, 0);
if (mtu == null) {
throw new ServiceException("product.prWorkPlan.not.bing.bsRackSet");
throw new ServiceException("上挂工序未绑定挂具!");
}
// 如果上序是上挂工序、并且本序是主工序,则代表本序是 需要绑定飞靶及设备的工序 或者手动维护生产追溯信息
} else if (wp.getFrontWpId() != null && dsProcess.getProcessName().equals("上挂") && wp.getCruxProcess().equals("是")) {
mtu = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId())
.isNotNull(MacToolUse::getBsRackSet).isNotNull(MacToolUse::getBsFeiBaSet).isNotNull(MacToolUse::getEquipmentCard));
} else if (wp.getFrontWpId() != null && "上挂".equals(frontProcess.getProcessName()) && "1".equals(wp.getCruxProcess())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
// 验证是否维护了生产追溯信息
List<String> mtnCodeList = macToolUseService.listObjs(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId()).select(MacToolUse::getMtnCode));
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.list(Wrappers.<MesQcProduceRunEntity>lambdaQuery()
.in(MesQcProduceRunEntity::getMtnCode, mtnCodeList));
if (!(qcProduceRunList != null && qcProduceRunList.size() > 0)) {
throw new ServiceException("product.prWorkPlan.not.bing");
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.listPrByWpId(wp.getId());
if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) {
throw new ServiceException("此工序卡未绑定飞靶或设备!");
}
}
} else if (dsProcess.getProcessName().contains("镀金")) {
mtu = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId())
.isNotNull(MacToolUse::getBsFeiBaSet));
mtu = macToolUseService.queryByParams(wp.getId(), 0, 1, 0);
if (mtu == null) {
throw new ServiceException("此工序未绑定飞跋,请绑定飞跋!!!");
}
//验证是否绑定设备
mtu = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId())
.isNotNull(MacToolUse::getBsRackSet).isNotNull(MacToolUse::getBsFeiBaSet).isNotNull(MacToolUse::getEquipmentCard));
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
List<MesQcProduceRunEntity> produceRunList = null;
List<String> mtnCodeList = macToolUseService.listObjs(Wrappers.<MacToolUse>lambdaQuery()
.eq(MacToolUse::getWpId, wp.getId()).eq(MacToolUse::getMtuIndex, 1).select(MacToolUse::getMtnCode));
produceRunList = mesQcProduceRunService.list(Wrappers.<MesQcProduceRunEntity>lambdaQuery()
.in(MesQcProduceRunEntity::getMtnCode, mtnCodeList).ne(MesQcProduceRunEntity::getWorkSlot, "烘箱"));
if (produceRunList == null || produceRunList.size() == 0) {
List<String> mtnCodeList2 = macToolUseService.listObjs(Wrappers.<MacToolUse>lambdaQuery()
.eq(MacToolUse::getWpId, wp.getId()).eq(MacToolUse::getMtuIndex, 2).select(MacToolUse::getMtnCode));
produceRunList = mesQcProduceRunService.list(Wrappers.<MesQcProduceRunEntity>lambdaQuery()
.in(MesQcProduceRunEntity::getMtnCode, mtnCodeList2).ne(MesQcProduceRunEntity::getWorkSlot, "烘箱"));
produceRunList = mesQcProduceRunService.listPrByWpIdIndex(wp.getId(), 1, Boolean.FALSE);
if (produceRunList == null || produceRunList.isEmpty()) {
produceRunList = mesQcProduceRunService.listPrByWpIdIndex(wp.getId(), 2, Boolean.FALSE);
}
if (!(produceRunList != null && produceRunList.size() > 0)) {
if (!(produceRunList != null && !produceRunList.isEmpty())) {
throw new ServiceException("未绑定飞跋和设备或未维护生产追溯信息!!!");
}
}
} else if (dsProcess.getProcessName().equals("玻璃封接清洗") || dsProcess.getProcessName().equals("玻璃封接退火") ||
dsProcess.getProcessName().equals("玻璃封接预氧化(箱式炉)") || dsProcess.getProcessName().equals("玻璃封接预氧化(链式炉)") ||
dsProcess.getProcessName().equals("玻璃封接(链式炉)") || dsProcess.getProcessName().equals("玻璃封接(真空炉)") ||
dsProcess.getProcessName().equals("玻璃封接灌胶") || dsProcess.getProcessName().equals("玻璃饼压制") ||
dsProcess.getProcessName().equals("玻璃饼排蜡玻化") || dsProcess.getProcessName().equals("玻璃饼振光") ||
dsProcess.getProcessName().equals("石墨模烘干") || dsProcess.getProcessName().equals("石墨模焙烧") ||
dsProcess.getProcessName().equals("真空炉灌胶") || dsProcess.getProcessName().equals("玻璃封接电镀去氧化皮") ||
dsProcess.getProcessName().equals("玻璃封接电化学抛光") || dsProcess.getProcessName().equals("玻璃封接湿喷砂") ||
dsProcess.getProcessName().equals("玻璃封接电镀") || dsProcess.getProcessName().equals("玻璃封接插针电镀") ||
dsProcess.getProcessName().equals("玻璃封接壳体电镀") || dsProcess.getProcessName().equals("玻璃封接电镀下挂") ||
dsProcess.getProcessName().equals("烧结浸保护剂")) {
mtu = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId())
.isNotNull(MacToolUse::getBsRackSet).isNotNull(MacToolUse::getBsFeiBaSet).isNotNull(MacToolUse::getEquipmentCard));
} else if ("玻璃封接清洗".equals(dsProcess.getProcessName()) || "玻璃封接退火".equals(dsProcess.getProcessName()) ||
"玻璃封接预氧化(箱式炉)".equals(dsProcess.getProcessName()) || "玻璃封接预氧化(链式炉)".equals(dsProcess.getProcessName()) ||
"玻璃封接(链式炉)".equals(dsProcess.getProcessName()) || "玻璃封接(真空炉)".equals(dsProcess.getProcessName()) ||
"玻璃封接灌胶".equals(dsProcess.getProcessName()) || "玻璃饼压制".equals(dsProcess.getProcessName()) ||
"玻璃饼排蜡玻化".equals(dsProcess.getProcessName()) || "玻璃饼振光".equals(dsProcess.getProcessName()) ||
"石墨模烘干".equals(dsProcess.getProcessName()) || "石墨模焙烧".equals(dsProcess.getProcessName()) ||
"真空炉灌胶".equals(dsProcess.getProcessName()) || "玻璃封接电镀去氧化皮".equals(dsProcess.getProcessName()) ||
"玻璃封接电化学抛光".equals(dsProcess.getProcessName()) || "玻璃封接湿喷砂".equals(dsProcess.getProcessName()) ||
"玻璃封接电镀".equals(dsProcess.getProcessName()) || "玻璃封接插针电镀".equals(dsProcess.getProcessName()) ||
"玻璃封接壳体电镀".equals(dsProcess.getProcessName()) || "玻璃封接电镀下挂".equals(dsProcess.getProcessName()) ||
"烧结浸保护剂".equals(dsProcess.getProcessName())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
// 验证是否维护了生产追溯信息
List<MesQcProduceRunEntity> qcProduceRunList = null;
List<String> mtnCodeList = macToolUseService.listObjs(Wrappers.<MacToolUse>lambdaQuery()
.eq(MacToolUse::getWpId, wp.getId()).select(MacToolUse::getMtnCode));
qcProduceRunList = mesQcProduceRunService.list(Wrappers.<MesQcProduceRunEntity>lambdaQuery()
.in(MesQcProduceRunEntity::getMtnCode, mtnCodeList));
if (!(qcProduceRunList != null && qcProduceRunList.size() > 0)) {
throw new ServiceException("product.prWorkPlan.not.bing");
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.listPrByWpId(wp.getId());
if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) {
throw new ServiceException("此工序卡未绑定飞靶或设备!");
}
}
}
//周新昊 20241114 验证手动维护设备使用记录的工序电子档案数据是否维护完备
Boolean aBoolean = true; //this.chkRfpDetail(wp);
boolean aBoolean = this.chkRfpDetail(wp.getId());
if (!aBoolean) {
throw new ServiceException("生产记录未填写完整,不允许报工!!!!");
}
@ -197,8 +222,9 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
baseMapper.insertOrUpdate(mr);
if (mr.getScrapQty() > 0) {
wp.setScrapQty(wp.getScrapQty() + mr.getScrapQty());
WorkOrder wo = null;//workOrderService.getById(wp.getWoId());
WorkOrder wo = workOrderMapper.selectById(wp.getWoId());
wo.setMakeQty(wo.getMakeQty() - mr.getScrapQty());
workOrderMapper.updateById(wo);
}
wp.setWorkQty(wp.getWorkQty() + mr.getWorkQty());
if (wp.getQualifiedQty().equals(wp.getScrapQty() + wp.getWorkQty())) {
@ -206,7 +232,6 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
}
if ("热处理".equals(dsProcess.getProcessName())) {
wp.setPrintType((short) 1);
//workPlanService.saveOrUpdate(wp);
String code = macToolUseService.nextCode(2);
MacToolUse prMacToolUse = new MacToolUse();
prMacToolUse.setWpId(wp.getId());
@ -232,61 +257,230 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
qcProduceRun.setDataSeven(makeRecDTO.getShape());
mesQcProduceRunService.save(qcProduceRun);
}
// 保存引用文件或版本号
WorkOrder prWorkOrder = null; //workOrderService.getById(wp.getWoId());
if (prWorkOrder != null && prWorkOrder.getId() != null) {
YieldOrder pjYieldOrder = yieldOrderService.getById(prWorkOrder.getYoId());
if (pjYieldOrder != null && pjYieldOrder.getId() != null) {
BsProcessSetEntity procedureSet = bsProcessSetService.getById(wp.getPpsId());
AuditFile dsAuditFile = null;
// 如果本序是涂色标或喷砂,直接查维护的数据
if ("涂色标".equals(procedureSet.getName()) || "喷砂".equals(procedureSet.getName())) {
dsAuditFile = auditFileService.getOne(Wrappers.<AuditFile>lambdaQuery()
.eq(AuditFile::getPpsId, procedureSet.getId()));
} else {
// 如果不是优先判断是否有生产标识
String prodIdent = pjYieldOrder.getProductIdent();
BsTeamSetEntity bsTeamSet = teamSetService.getOne(Wrappers.<BsTeamSetEntity>lambdaQuery()
.eq(BsTeamSetEntity::getId, wp.getMakeTeam()));
if (!"AH".equals(prodIdent)) {
prodIdent = null;
}
if (bsTeamSet != null && bsTeamSet.getId() != null) {
// BsCenterTeamEntity bsCenterTeam = bsCenterTeamService.getByTsId(bsTeamSet.getTsId());
DsPartEntity dsPart = partService.getOne(Wrappers.<DsPartEntity>lambdaQuery().eq(DsPartEntity::getPartCode, pjYieldOrder.getPartCode()));
String productApparea = null;
if (dsPart != null && dsPart.getId() != null) {
productApparea = dsPart.getProductSeries();
workPlanMapper.updateById(wp);
// 2025-07-23 线上迁移修改
MacToolUse macToolUse = macToolUseService.getDataByWpIdAndIndex(wp.getId(), "2");
if (macToolUse != null && macToolUse.getRfpId() != null && macToolUse.getFinished() != 1) {
macToolUse.setFinished(1);
String deviceCode = macToolUse.getEquipmentCard() != null ? macToolUse.getMtnCode() : "";
log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, macToolUse.getHangNum(), macToolUse.getMtnCode(), macToolUse.getFinished());
macToolUseService.updateById(macToolUse);
}
return true;
}
private boolean chkRfpDetail(Long wpId) {
List<MacToolUse> macToolUses = macToolUseService.list(Wrappers.lambdaQuery(MacToolUse.class).isNotNull(MacToolUse::getRfpId).ne(MacToolUse::getMtuIndex, "2").eq(MacToolUse::getWpId, wpId));
if (CollectionUtils.isNotEmpty(macToolUses)) {
for (MacToolUse macToolUs : macToolUses) {
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.list(Wrappers.lambdaQuery(MesQcProduceRunEntity.class).eq(MesQcProduceRunEntity::getMtnCode, macToolUs.getMtnCode())
.and(wrapper -> wrapper.isNull(MesQcProduceRunEntity::getWorkSlot).or().notLike(MesQcProduceRunEntity::getWorkSlot, "入料区")).orderByAsc(MesQcProduceRunEntity::getId));
Map<String, MesQcProduceRunEntity> qcProduceRunMap = qcProduceRunList.stream().collect(Collectors.toMap(MesQcProduceRunEntity::getWorkSlot, Function.identity()));
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlots = mesRbFilePreserveSlotService.list(Wrappers.lambdaQuery(MesRbFilePreserveSlotEntity.class).eq(MesRbFilePreserveSlotEntity::getRfpId, macToolUs.getRfpId()).orderByAsc(MesRbFilePreserveSlotEntity::getSlotIndex));
if (CollectionUtils.isNotEmpty(dsRbFilePreserveSlots)) {
for (MesRbFilePreserveSlotEntity dsRbFilePreserveSlot : dsRbFilePreserveSlots) {
MesQcProduceRunEntity qcProduceRun = qcProduceRunMap.get(dsRbFilePreserveSlot.getSlotName());
if (qcProduceRun != null) {
List<MesRbFilePreserveDetailEntity> dsRbFilePreserveDetails = mesRbFilePreserveDetailService.getByRfpsId(dsRbFilePreserveSlot.getId());
if (CollectionUtils.isNotEmpty(dsRbFilePreserveDetails)) {
if (dsRbFilePreserveSlot.getRfpsType() == 1) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 2) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 3 || dsRbFilePreserveSlot.getRfpsType() == 11) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 4 || dsRbFilePreserveSlot.getRfpsType() == 12) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 5 || dsRbFilePreserveSlot.getRfpsType() == 22) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 6) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 7 || dsRbFilePreserveSlot.getRfpsType() == 18) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 8) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 9) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 13) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())
|| StringUtils.isBlank(qcProduceRun.getDataSeven())
|| StringUtils.isBlank(qcProduceRun.getDataEight())
|| StringUtils.isBlank(qcProduceRun.getDataNine())
|| StringUtils.isBlank(qcProduceRun.getDataTen())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 14) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())
|| StringUtils.isBlank(qcProduceRun.getDataSeven())
|| StringUtils.isBlank(qcProduceRun.getDataEight())
|| StringUtils.isBlank(qcProduceRun.getDataNine())
|| StringUtils.isBlank(qcProduceRun.getDataTen())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 15) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())
|| StringUtils.isBlank(qcProduceRun.getDataSeven())
|| StringUtils.isBlank(qcProduceRun.getDataEight())
|| StringUtils.isBlank(qcProduceRun.getDataNine())
|| StringUtils.isBlank(qcProduceRun.getDataTen())
|| StringUtils.isBlank(qcProduceRun.getDataEleven())
|| StringUtils.isBlank(qcProduceRun.getDataTwelve())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 16) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())
|| StringUtils.isBlank(qcProduceRun.getDataSeven())
|| StringUtils.isBlank(qcProduceRun.getDataEight())
|| StringUtils.isBlank(qcProduceRun.getDataNine())
|| StringUtils.isBlank(qcProduceRun.getDataTen())
|| StringUtils.isBlank(qcProduceRun.getDataEleven())
|| StringUtils.isBlank(qcProduceRun.getDataTwelve())
|| StringUtils.isBlank(qcProduceRun.getDataThirteen())
|| StringUtils.isBlank(qcProduceRun.getDataFourteen())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 17) {
if (StringUtils.isBlank(qcProduceRun.getInDate())
|| StringUtils.isBlank(qcProduceRun.getOutDate())
|| StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())) {
return false;
}
} else if (dsRbFilePreserveSlot.getRfpsType() == 21) {
if (StringUtils.isBlank(qcProduceRun.getDataOne())
|| StringUtils.isBlank(qcProduceRun.getDataTwo())
|| StringUtils.isBlank(qcProduceRun.getDataThree())
|| StringUtils.isBlank(qcProduceRun.getDataFour())
|| StringUtils.isBlank(qcProduceRun.getDataFive())
|| StringUtils.isBlank(qcProduceRun.getDataSix())
|| StringUtils.isBlank(qcProduceRun.getDataSeven())
|| StringUtils.isBlank(qcProduceRun.getDataEight())
|| StringUtils.isBlank(qcProduceRun.getDataNine())) {
return false;
}
}
}
}
// if (productApparea!=null){
// dsAuditFile = dsAuditFileDao.getDataByPpsIdAndApparea(procedureSet.getPpsId(), bsCenterTeam.getBsWorkCenter().getWcId(),productApparea);
// }
// if (bsCenterTeam != null && bsCenterTeam.getCtId() != null && dsAuditFile == null) {
// dsAuditFile = dsAuditFileDao.getDataByPpsIdAndPqName(procedureSet.getPpsId(), bsCenterTeam.getBsWorkCenter().getWcId(), prodIdent);
// }
}
}
if (dsAuditFile != null && dsAuditFile.getId() != null) {
wp.setPapers(dsAuditFile.getPapers());
wp.setReferenceFile(dsAuditFile.getReferenceFile());
//workPlanService.updateById(wp);
}
// 2025-07-23 线上迁移修改
MacToolUse macToolUse = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery()
.eq(MacToolUse::getWpId, wp.getId()));
if (macToolUse != null && macToolUse.getRfpId() != null && macToolUse.getFinished() != 1) {
macToolUse.setFinished(1);
String deviceCode = macToolUse.getEquipmentCard() != null ? macToolUse.getMtnCode() : "";
log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, macToolUse.getHangNum(), macToolUse.getMtnCode(), macToolUse.getFinished());
macToolUseService.updateById(macToolUse);
}
}
}
return true;
}
@Override
public IPage<MesMakeRecVO> selectMesMakeRecPage(IPage<MesMakeRecVO> page, MesMakeRecVO mesMakeRec) {
return page.setRecords(baseMapper.selectMesMakeRecPage(page, mesMakeRec));
IPage<MesMakeRecVO> mesMakeRecVOIPage = page.setRecords(baseMapper.selectMesMakeRecPage(page, mesMakeRec));
List<MesMakeRecVO> records = mesMakeRecVOIPage.getRecords();
if (CollectionUtils.isNotEmpty(records)) {
List<Long> ppsIds = new ArrayList<>();
List<Long> makeTeams = new ArrayList<>();
for (MesMakeRecVO record : records) {
ppsIds.add(record.getPpsId());
if (record.getFrontPpsId() != null) {
ppsIds.add(record.getFrontPpsId());
}
if (record.getNextPpsId() != null) {
ppsIds.add(record.getNextPpsId());
}
if (record.getMakeTeam() != null) {
makeTeams.add(record.getMakeTeam());
}
if (record.getFrontMakeTeam() != null) {
makeTeams.add(record.getFrontMakeTeam());
}
if (record.getNextMakeTeam() != null) {
makeTeams.add(record.getNextMakeTeam());
}
}
List<BsProcessSetEntity> processSets = bsProcessSetService.list(Wrappers.lambdaQuery(BsProcessSetEntity.class).in(BsProcessSetEntity::getId, ppsIds));
Map<Long, String> processSetMap = processSets.stream().collect(Collectors.toMap(BsProcessSetEntity::getId, BsProcessSetEntity::getName));
List<BsTeamSetEntity> teams = teamSetService.list(Wrappers.lambdaQuery(BsTeamSetEntity.class).in(BsTeamSetEntity::getId, makeTeams));
Map<Long, String> teamMap = teams.stream().collect(Collectors.toMap(BsTeamSetEntity::getId, BsTeamSetEntity::getTsName));
for (MesMakeRecVO record : records) {
User user = UserCache.getUser(record.getWorker());
record.setWorkerName(user != null ? user.getRealName() : "");
record.setPpsName(processSetMap.get(record.getPpsId()));
record.setMakeTeamName(teamMap.get(record.getMakeTeam()));
record.setFrontPpsName(processSetMap.get(record.getFrontPpsId()));
record.setFrontMakeTeamName(teamMap.get(record.getFrontMakeTeam()));
record.setNextPpsName(processSetMap.get(record.getNextPpsId()));
record.setNextMakeTeamName(teamMap.get(record.getNextMakeTeam()));
}
mesMakeRecVOIPage.setRecords(records);
}
return mesMakeRecVOIPage;
}
@Override

@ -4,9 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.BarcodeImageHandler;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.ibatis.executor.BatchResult;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
@ -35,19 +41,22 @@ import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.erpdata.feign.IErpDataOemClient;
import org.springblade.system.cache.DictCache;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
import org.springblade.system.pojo.enums.DictEnum;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 车间订单运行记录表 服务实现类
@ -151,7 +160,9 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//记录订单号和供应商,用于退货时使用
String wxCode = workOrderRun.getWoCode();
Oem oldOemCustomer = oemMapper.selectById(workOrderRun.getInCustomer());
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED);
WorkOrderRun oldWorkOrderRun = workOrderRunMapper.selectById(wo.getWorId());
oldWorkOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED);
workOrderRunMapper.updateById(oldWorkOrderRun);
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getWoId, wo.getId()));
wo.setCollaborate(workOrderRun.getCollaborate());
@ -440,8 +451,28 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return page.setRecords(oemMaterialRequisition);
}
@Override
public Map<String, Object> printOemMaterialRequisition(IPage<MaterialRequisitionVO> page, MaterialRequisitionQuery materialRequisitionQuery) {
IPage<MaterialRequisitionVO> pages = exportOemMaterialRequisition(page, materialRequisitionQuery);
Oem oem = oemMapper.selectById(materialRequisitionQuery.getOcId());
User user = UserCache.getUser(AuthUtil.getUser().getUserId());
String printNo = generateOrderNoSync();
String picture = generateBarcodeAsBase64(printNo, 200, 25);
Map<String, Object> result = new HashMap<>();
result.put("title", "外协计划明细");
result.put("picture", picture);
result.put("printNo", printNo);
result.put("printUser", user.getRealName());
result.put("printDate", DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
result.put("oemName", oem.getAbbreviation());
result.put("data", pages.getRecords());
return result;
}
@Override
public IPage<OemOrderVO> queryOemOrder(IPage<OemOrderVO> page, OemOrderQuery oemOrderQuery) {
oemOrderQuery.setRunType(WorkOrderRun.RUN_TYPE_1);
oemOrderQuery.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL);
List<OemOrderVO> oemOrderVOS = baseMapper.selectOemOrderPage(page, oemOrderQuery);
return page.setRecords(oemOrderVOS);
}
@ -586,6 +617,46 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return "FE-" + dateStr + "0001"; // 简化实现
}
/**
* 生成单号yyMMdd + 8位时间戳
*/
public static String generateOrderNo() {
// 获取当前日期
SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
String datePart = dateFormat.format(new Date());
// 获取8位时间戳(毫秒的后8位)
long timestamp = System.currentTimeMillis();
String timePart = String.format("%08d", timestamp % 100000000);
return datePart + timePart;
}
/**
* 生成单号防止重复
*/
public static synchronized String generateOrderNoSync() {
return generateOrderNo();
}
private String generateBarcodeAsBase64(String content, int width, int height) {
try {
// 1. 创建条形码(Code128 类型)
Barcode barcode = BarcodeFactory.createCode128(content);
// 2. 生成 BufferedImage(关键:使用 BarcodeImageHandler)
BufferedImage image = BarcodeImageHandler.getImage(barcode);
// 3. 转换为 PNG 字节数组
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
byte[] imageBytes = baos.toByteArray();
// 4. 转换为 Base64 字符串(添加 data URL 前缀)
return "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes);
} catch (Exception e) {
throw new ServiceException("生成条形码失败: " + e.getMessage());
}
}
/*protected void validateSameYield(Long yoId) throws BusinessException {
List<WorkOrder> woList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>()
.eq(WorkOrder::getYoId, yoId));

@ -43,10 +43,7 @@ import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.PlateAroundMapper;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.dto.InBatchesDTO;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.dto.*;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.enums.WorkOrderEnum;
import org.springblade.desk.produce.pojo.enums.ProcessCycleEnum;
@ -1635,6 +1632,26 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
@Override
public boolean updatePriority(UpdatePriorityDTO updatePriorityDTO) {
WorkOrder wo = this.getById(updatePriorityDTO.getWoId());
wo.setPriority(WorkOrder.PRIORITY_SCH_IMP);
wo.setPriority(updatePriorityDTO.getPriority());
wo.setDemandDate(updatePriorityDTO.getDemandDate());
boolean b = this.updateById(wo);
if (b && (WorkOrder.PRIORITY_NORMAL.equals(updatePriorityDTO.getPriority())
|| WorkOrder.PRIORITY_PRO_IMP.equals(updatePriorityDTO.getPriority())
|| WorkOrder.PRIORITY_PACT_IMP.equals(updatePriorityDTO.getPriority())) && wo.getRunStatus() < WorkOrder.RUN_STATUS_RECEIVE) {
// 修改生产订单为待排产
log.info("修改优先级后重新排产");
YieldOrder yieldOrder = new YieldOrder();
yieldOrder.setId(wo.getYoId());
yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode());
yieldOrderService.updateById(yieldOrder);
}
return true;
}
private void workPlanEnd(WorkPlan workPlan, Date newDate, Double makeQty) {
if (workPlan == null) {
return;

@ -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