diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java index 1b077ef6..aef9737a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java @@ -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; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/PriceSheetExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/PriceSheetExcel.java new file mode 100644 index 00000000..3bff26eb --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/PriceSheetExcel.java @@ -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; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemApprovalQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemApprovalQuery.java index ca4bb63d..81931c61 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemApprovalQuery.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemApprovalQuery.java @@ -16,7 +16,7 @@ public class OemApprovalQuery { /** * 审核状态 */ - @Schema(description = "审核状态(字符串1,2,3)") + @Schema(description = "审核状态,字符串2,3(2-待审批,3-不通过,4-通过)") private String approvalStatus; /** * 车间订单号 diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemOrderQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemOrderQuery.java index c6a5a5a8..85fe5fcb 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemOrderQuery.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemOrderQuery.java @@ -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; /** * 订单单号 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java index f57f01bd..99fb3a7a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java @@ -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 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; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/CertificateMaintenanceMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/CertificateMaintenanceMapper.xml index 46f4aac4..357d7700 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/CertificateMaintenanceMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/CertificateMaintenanceMapper.xml @@ -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 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java index 689cf778..116b51ed 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java @@ -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 pages = workOrderRunService.exportOemMaterialRequisition(Condition.getPage(query), materialRequisitionQuery); - Oem oem = oemService.getById(materialRequisitionQuery.getOcId()); - User user = UserCache.getUser(AuthUtil.getUser().getUserId()); - Map 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 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> pageR = erpDataOemClient.priceSheetData(priceSheetQuery, query); + Page data = pageR.getData(); + List list = data.getRecords(); + List 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); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java index 03b3a407..a87c4bec 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java @@ -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> 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 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 list = mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/PlatingTypeRulesController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/PlatingTypeRulesController.java index 183f4b57..189e0105 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/PlatingTypeRulesController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/PlatingTypeRulesController.java @@ -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)); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml index 966cfc78..bb03b721 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml @@ -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, diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java index 4c2a4ee9..45485a51 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java @@ -50,6 +50,15 @@ public interface IOemStatementService extends BaseService { */ R oemSettleAccounts(List statementVOS, BigDecimal price, LocalDate putStoreDate); + /** + * 外协自动结算 + * + * @param woCode 车间订单号 + * @param date 镀后入库日期 + * @return + */ + R autoSettlement(String woCode, LocalDate date); + /** * 预结算 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java index 24157c93..f901ab93 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java @@ -76,6 +76,8 @@ public class OemMeritsServiceImpl extends BaseServiceImpl 0) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java index be3d70f6..a163a5f6 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java @@ -87,6 +87,7 @@ public class OemProcessServiceImpl extends BaseServiceImpl statementVOS, BigDecimal price, LocalDate putStoreDate) { + // 定义计数器 + AtomicInteger countSuccess = new AtomicInteger(0); + AtomicInteger countError = new AtomicInteger(0); //1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表> Map> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName)); for (Map.Entry> listEntry : oemAndStatementMap.entrySet()) { @@ -73,72 +79,72 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetAllList = getPriceSheets(oemName, putStoreDate); + List priceSheetAllList = getPriceSheets(oemName, putStoreDate); //假数据测试用 - List 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 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 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 page = new Page<>(); + page.setSize(999); + List 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 preSettlement(List statementVOS, BigDecimal price) { //1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表> @@ -216,78 +249,78 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetAllList = getPriceSheets(oemName); + List priceSheetAllList = getPriceSheets(oemName); //假数据测试用 - List 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 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 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("未选取结算单"); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/PlatingTypeRulesServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/PlatingTypeRulesServiceImpl.java index 8812c907..02a03bf2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/PlatingTypeRulesServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/PlatingTypeRulesServiceImpl.java @@ -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 + @@ -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 @@ AND two.demand_date < #{query.demandDateEnd}+ 1 + + AND mwor.oem_status IN + + #{status} + + AND two.run_status IN @@ -310,11 +319,21 @@ - AND mwor.run_status IN - - #{status} - + + + AND ( + mwor.approval_time IS NOT NULL + AND mwor.run_status NOT IN (2, 3) + ) + + + AND mwor.run_status IN + + #{status} + + + AND mwor.run_status = 2 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java index ce9d3162..be38760c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java @@ -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 { R changeOemManufacturer(Long worId, Long ocId); /** - * 领料单打印 + * 领料单打印列表 * * @param page * @param materialRequisitionQuery * @return */ IPage exportOemMaterialRequisition(IPage page, MaterialRequisitionQuery materialRequisitionQuery); + + /** + * 打印数据 + * + * @param page + * @param materialRequisitionQuery + */ + Map printOemMaterialRequisition(IPage page, MaterialRequisitionQuery materialRequisitionQuery); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index 438d087c..0d3a76c3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -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() .eq(WorkPlan::getWoId, wo.getId())); wo.setCollaborate(workOrderRun.getCollaborate()); @@ -440,8 +451,28 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl printOemMaterialRequisition(IPage page, MaterialRequisitionQuery materialRequisitionQuery) { + IPage 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 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 queryOemOrder(IPage page, OemOrderQuery oemOrderQuery) { + oemOrderQuery.setRunType(WorkOrderRun.RUN_TYPE_1); + oemOrderQuery.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL); List oemOrderVOS = baseMapper.selectOemOrderPage(page, oemOrderQuery); return page.setRecords(oemOrderVOS); } @@ -586,6 +617,46 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl woList = workOrderMapper.selectList(new LambdaQueryWrapper() .eq(WorkOrder::getYoId, yoId)); diff --git a/blade-service/blade-desk/src/main/resources/Excel/oem/外协工序模板.xls b/blade-service/blade-desk/src/main/resources/Excel/oem/外协工序模板.xls index 01a138c7..ca5dc6d7 100644 Binary files a/blade-service/blade-desk/src/main/resources/Excel/oem/外协工序模板.xls and b/blade-service/blade-desk/src/main/resources/Excel/oem/外协工序模板.xls differ