外协工序增加是否手动结算选项;

外协自动结算接口以供镀后入库调用;
车间运行订单表加入外协状态,查询增加选项;
外协审批查询增加审批通过逻辑;
报价单导出。
liweidong
qinyulong 1 month ago
parent 0c67b0f7ae
commit b27ba100aa
  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. 27
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java
  6. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/CertificateMaintenanceMapper.xml
  7. 42
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  8. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java
  9. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/PlatingTypeRulesController.java
  10. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  11. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java
  12. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java
  13. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java
  14. 333
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  15. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/PlatingTypeRulesServiceImpl.java
  16. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml
  17. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  18. 81
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  19. 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;
/**
* 订单单号
*/

@ -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;
/**
* 外协
*/
@ -77,6 +90,17 @@ public class WorkOrderRun extends BaseEntity {
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;
}

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

@ -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 != ""'>
<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

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

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

Loading…
Cancel
Save