外协结算预结算预览;

外协结算预结算导出;
外协结算审核;
外协结算无需结算;
外协工序加入是否自动结算;
部分基础数据表表名变更;
liweidong
qinyulong 2 months ago
parent 73ecd41f41
commit 1fe1bd9c68
  1. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemProcessEntity.java
  2. 35
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java
  3. 123
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java
  4. 26
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/ApplyOemMeritsSave.java
  5. 21
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemAndAbilitySave.java
  6. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemMeritsQuery.java
  7. 34
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/OemSettleAccountsApproval.java
  8. 12
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java
  9. 8
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java
  10. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java
  11. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/mapper/EquipmentMapper.xml
  12. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/EquipmentMaintenanceMapper.xml
  13. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/mapper/PostHandleMapper.xml
  14. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemAndAbilityController.java
  15. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemMeritsController.java
  16. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemProcessController.java
  17. 70
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java
  18. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemMeritsMapper.xml
  19. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml
  20. 17
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  21. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemMeritsService.java
  22. 27
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java
  23. 23
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemAndAbilityServiceImpl.java
  24. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemMeritsServiceImpl.java
  25. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java
  26. 382
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  27. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java
  28. 23
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java
  29. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java

@ -43,5 +43,10 @@ public class OemProcessEntity extends BaseEntity {
*/
@Schema(description = "工艺IDS")
private String craftIds;
/**
* 是否手动结算0否(自动结算)1是(手动结算)
*/
@Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)")
private String manual;
}

@ -31,7 +31,7 @@ public class OemStatementEntity extends BaseEntity {
/**
* 无需结算
*/
public static Integer NOT_NEED_SETTLEMENT = -1;
public static Integer NOT_NEED_SETTLEMENT = 5;
/**
* 未结算
*/
@ -59,6 +59,25 @@ public class OemStatementEntity extends BaseEntity {
rosStatusMap.put(OK_SETTLEMENT, "已结算");
}
/**
* 1:待审批
*/
public static Integer APPROVAL_STATUS_UNDER = 1;
/**
* 2:不通过
*/
public static Integer APPROVAL_STATUS_FAIL = 2;
/**
* 3:通过
*/
public static Integer APPROVAL_STATUS_VIA = 3;
public static Map<Integer, String> approvalStatusMap = new HashMap<Integer, String>(4);
static {
approvalStatusMap.put(APPROVAL_STATUS_UNDER, "待审批");
approvalStatusMap.put(APPROVAL_STATUS_FAIL, "审批不通过");
approvalStatusMap.put(APPROVAL_STATUS_VIA, "审批通过");
}
/**
* 车间作业计划ID
*/
@ -92,13 +111,23 @@ public class OemStatementEntity extends BaseEntity {
/**
* 状态
*/
@Schema(description = "状态")
@Schema(description = "状态5无需结算,1未结算,2结算中,3结算异常,4已结算")
private Integer rosStatus;
public String getRosStatusName() {
return rosStatusMap.get(rosStatus);
}
/**
* 状态
*/
@Schema(description = "审批状态(1待审批,2审批不通过,3审批通过)")
private Integer approvalStatus;
public String getApprovalStatusName() {
return approvalStatusMap.get(approvalStatus);
}
/**
* 备注
*/

@ -3,7 +3,6 @@ package org.springblade.desk.oem.pojo.excel;
import lombok.Data;
import java.util.Date;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelProperty;
@ -12,14 +11,13 @@ import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import java.io.Serializable;
import java.io.Serial;
/**
* 外协结算单 Excel实体类
*
* @author qyl
* @since 2026-02-12
* @since 2026-03-12
*/
@Data
@ColumnWidth(25)
@ -27,33 +25,94 @@ import java.io.Serial;
@ContentRowHeight(18)
public class OemStatementExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ColumnWidth(20)
@ExcelProperty("")
private Long id;
/**
*
*/
@ExcelProperty("外协单号")
private String oemCode;
@ColumnWidth(20)
@ExcelProperty("")
private String tenantId;
/**
* 删除标记;1:删除0:正常
*/
@ExcelProperty("车间订单单号")
private String woCode;
@ColumnWidth(20)
@ExcelProperty("删除标记;1:删除,0:正常")
private Long isDeleted;
/**
* 车间作业计划ID
*/
@ExcelProperty("零件号")
private String partCode;
@ColumnWidth(20)
@ExcelProperty("零件名称")
private String partName;
@ColumnWidth(20)
@ExcelProperty("镀层物料")
private String plateGoodsCode;
@ColumnWidth(20)
@ExcelProperty("批次号")
private String batchNo;
@ColumnWidth(20)
@ExcelProperty("生产标识")
private String prodIdent;
@ColumnWidth(20)
@ExcelProperty("工序编码")
private String psCode;
@ColumnWidth(20)
@ExcelProperty("车间作业计划ID")
private Long wpId;
@ExcelProperty("工序名称")
private String psName;
@ColumnWidth(20)
@ExcelProperty("工艺能力")
private String caName;
@ColumnWidth(20)
@ExcelProperty("镀后入库时间")
private String putStoreTime;
@ColumnWidth(20)
@ExcelProperty("生产数量")
private String makeQty;
@ColumnWidth(20)
@ExcelProperty("单位面积(dm²)")
private String ypArea;
@ColumnWidth(20)
@ExcelProperty("总面积(dm²)")
private String totalArea;
@ColumnWidth(20)
@ExcelProperty("外协厂商")
private String ocCode;
@ColumnWidth(20)
@ExcelProperty("外协厂商名称")
private String ocName;
@ColumnWidth(20)
@ExcelProperty("镀种")
private String plate;
@ColumnWidth(20)
@ExcelProperty("镀种厚度")
private String plateThickness;
@ColumnWidth(20)
@ExcelProperty("涂色标个数")
private String tsbNum;
@ColumnWidth(20)
@ExcelProperty("涂色带个数")
private String tsdNum;
@ColumnWidth(20)
@ExcelProperty("涂箭个数")
private String tjtNum;
@ColumnWidth(20)
@ExcelProperty("是否手动结算")
private String manual;
/**
* 镀层厚度
*/
@ -89,6 +148,18 @@ public class OemStatementExcel implements Serializable {
*/
@ColumnWidth(20)
@ExcelProperty("状态")
private Integer rosStatus;
private String rosStatusName;
/**
* 状态
*/
@ColumnWidth(20)
@ExcelProperty("审批状态")
private String approvalStatusName;
/**
* 状态
*/
@ColumnWidth(20)
@ExcelProperty("备注")
private String memo;
}

@ -0,0 +1,26 @@
package org.springblade.desk.oem.pojo.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springblade.desk.oem.pojo.entity.OemMeritsEntity;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.util.List;
/**
* 申请厂家绩效入参
*/
@Data
public class ApplyOemMeritsSave {
@NotNull(message = "月份不能为空")
@DateTimeFormat(pattern = "yyyy-MM")
private String date;
@Schema(description = "绩效集合")
@NotNull(message = "申请列表不能为空")
private List<OemMeritsEntity> oemMeritsEntities;
}

@ -0,0 +1,21 @@
package org.springblade.desk.oem.pojo.request;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.oem.pojo.entity.OemAndAbilityEntity;
import java.util.List;
/**
* 外协绩效模板保存
*/
@Data
public class OemAndAbilitySave {
@Schema(description = "厂家名称")
private List<OemAndAbilityEntity> oemAndAbilityEntities;
@Schema(description = "删除主键字符串集合1,2,3")
private String deleteIds;
}

@ -26,19 +26,19 @@ public class OemMeritsQuery {
/**
* 状态
*/
@Schema(description = "状态集合(传字符串1,2,3,4)")
@Schema(description = "状态集合(传字符串1,2,3,4)1新建,2填写中,3已评审,4已审核")
private String statusList;
/**
* 生产填写状态集合
*/
@Schema(description = "生产填写状态集合(传字符串1,2)")
@Schema(description = "生产填写状态集合(传字符串1,2,31生产未填写,2生产已维护,3生产已校对")
private String produceStatusList;
/**
* 质量填写状态
*/
@Schema(description = "质量填写状态集合(传字符串1,2)")
@Schema(description = "质量填写状态集合(传字符串1,2,31质量未填写,2质量已维护,3质量已校对")
private String qualityStatusList;
@Schema(description = "月份(格式:yyyy-MM)")

@ -0,0 +1,34 @@
package org.springblade.desk.oem.pojo.request;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
/**
* 外协结算审核请求入参
*/
@Data
public class OemSettleAccountsApproval {
/**
* 结算单IDList
*/
@Schema(description = "结算单IDList", required = true)
@NotNull(message = "结算单ID不能为空")
private List<Long> ids;
/**
* 审批意见
*/
@Schema(description = "驳回原因(1不需要结算,2基础数据有误)", required = true)
@NotNull(message = "驳回原因不能为空")
private Short reason;
/**
* 审批结果
*/
@Schema(description = "审批结果(1待审批,2审批不通过,3审批通过)", required = true)
@NotNull(message = "审批结果不能为空")
private Short approvalStatus;
}

@ -63,7 +63,17 @@ public class StatementQuery {
/**
* 结算单状态
*/
@Schema(description = "结算单状态(传字符串1,2,3,4)-1无需结算,1未结算,2结算中,3结算异常,4已结算")
@Schema(description = "结算单状态(传字符串1,2,3,4)5无需结算,1未结算,2结算中,3结算异常,4已结算。*注意*未结算状态不可与其他状态同时查询")
@NotNull(message = "结算单状态不能为空")
private String rosStatusList;
/**
* 审批状态
*/
@Schema(description = "审批状态(传字符串1,2,3)1待审批,2审批不通过,3审批通过")
private String approvalStatusList;
/**
* 是否手动结算
*/
@Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)")
private String manual;
}

@ -29,8 +29,14 @@ public class OemProcessVO extends OemProcessEntity {
@Schema(description = "工序IDStr,前端用")
private String processIdStr;
public String getProcessIdStr() {
return this.getProcessId().toString();
}
@Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)")
private String manualName;
public String getManualName() {
return "0".equals(this.getManual()) ? "否" : "是";
}
}

@ -100,6 +100,9 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "涂箭个数")
private String tjtNum;
@Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)")
private String manual;
/**
* 同外协厂家下有效期内的全部该工序报价
*/

@ -42,7 +42,7 @@
select
e.*,
wc.WC_NAME as workCenterName
from MES_EQUIPMENT e LEFT JOIN BA_WORK_CENTER wc ON e.WORK_CENTER_ID = wc.ID
from MES_EQUIPMENT e LEFT JOIN BS_WORK_CENTER wc ON e.WORK_CENTER_ID = wc.ID
WHERE e.IS_DELETED = 0
<if test="equipment.deviceCode != null and equipment.deviceCode != ''">
AND e.DEVICE_CODE LIKE CONCAT('%', CONCAT(#{equipment.deviceCode}, '%'))

@ -109,7 +109,7 @@
equipment.mac_spec
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_EQUIPMENT_MAINTENANCE em ON ph.id = em.ph_id AND em.is_deleted = 0
LEFT JOIN MES_EQUIPMENT equipment ON em.equipment_id = equipment.id AND equipment.is_deleted = 0
WHERE ph.is_deleted = 0 and ph.staff_type != 1

@ -105,7 +105,7 @@
bd.TS_NAME as DEPT_NAME -- 班组名称
FROM MES_POST_HANDLE mph
LEFT JOIN BLADE_USER bu ON mph.USER_ID = bu.ID -- 关联用户表
LEFT JOIN BA_TEAM_SET bd ON mph.DEPT_ID = bd.ID -- 关联部门表
LEFT JOIN BS_TEAM_SET bd ON mph.DEPT_ID = bd.ID -- 关联部门表
WHERE mph.IS_DELETED = 0
<if test="postHandle.userCode != null and postHandle.userCode != ''">
AND bu.CODE = #{postHandle.userCode}

@ -19,6 +19,7 @@ import org.springblade.desk.jobtransfer.pojo.excel.EquipmentMaintenanceImport;
import org.springblade.desk.oem.pojo.excel.OemAndAbilityExcel;
import org.springblade.desk.oem.pojo.excel.OemAndAbilityImport;
import org.springblade.desk.oem.pojo.request.OemAndAbilityQuery;
import org.springblade.desk.oem.pojo.request.OemAndAbilitySave;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -33,6 +34,7 @@ import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import java.util.ArrayList;
import java.util.Map;
import java.util.List;
@ -121,7 +123,9 @@ public class OemAndAbilityController extends BladeController {
@PostMapping("/submit-list")
@ApiOperationSupport(order = 8)
@Operation(summary = "批量增删改", description = "")
public R submitList(@Valid @RequestBody List<OemAndAbilityEntity> oemAndAbilityEntities, @Parameter(description = "删除主键字符串集合1,2,3") String deleteIds) {
public R submitList(@Valid @RequestBody OemAndAbilitySave oemAndAbilitySave) {
List<OemAndAbilityEntity> oemAndAbilityEntities = oemAndAbilitySave.getOemAndAbilityEntities();
String deleteIds = oemAndAbilitySave.getDeleteIds();
return mesOemAndAbilityService.saveOrUpdateOrDelBatch(oemAndAbilityEntities, Func.toLongList(deleteIds));
}

@ -16,6 +16,7 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.desk.oem.pojo.entity.OemAndAbilityEntity;
import org.springblade.desk.oem.pojo.excel.OemMeritsExcel;
import org.springblade.desk.oem.pojo.excel.OemOrderExcel;
import org.springblade.desk.oem.pojo.request.ApplyOemMeritsSave;
import org.springblade.desk.oem.pojo.request.MaintenanceSave;
import org.springblade.desk.oem.pojo.request.OemMeritsQuery;
import org.springblade.desk.oem.pojo.request.ProofreadSave;
@ -71,7 +72,8 @@ public class OemMeritsController extends BladeController {
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入mesOemMerits")
@Operation(summary = "分页,申请页面statusList传1;计算页面statusList传1,2并且produceStatusList或qualityStatusList传1,2;" +
"评审页面statusList传2并且produceStatusList传3并且qualityStatusList传3;审核页面statusList传3,4", description = "传入mesOemMerits")
public R<IPage<OemMeritsVO>> page(OemMeritsQuery mesOemMerits, Query query) {
IPage<OemMeritsVO> pages = mesOemMeritsService.selectOemMeritsPage(Condition.getPage(query), mesOemMerits);
return R.data(pages);
@ -123,8 +125,10 @@ public class OemMeritsController extends BladeController {
@PostMapping("/applyOemMerits")
@ApiOperationSupport(order = 8)
@Operation(summary = "外协绩效申请", description = "")
public R applyOemMerits(@Valid @RequestBody List<OemMeritsEntity> oemMeritsEntities, @DateTimeFormat(pattern = "yyyy-MM") LocalDate date) {
return mesOemMeritsService.applyOemMerits(oemMeritsEntities, date);
public R applyOemMerits(@Valid @RequestBody ApplyOemMeritsSave applyOemMeritsSave) {
String dateStr = applyOemMeritsSave.getDate();
List<OemMeritsEntity> oemMeritsEntities = applyOemMeritsSave.getOemMeritsEntities();
return mesOemMeritsService.applyOemMerits(oemMeritsEntities, DateUtil.parse(dateStr, "yyyy-MM"));
}
@ -176,7 +180,7 @@ public class OemMeritsController extends BladeController {
*/
@PostMapping("/processSubmit")
@ApiOperationSupport(order = 13)
@Operation(summary = "厂家绩效审保存", description = "")
@Operation(summary = "厂家绩效审保存", description = "")
public R processSubmit(@Valid @RequestBody List<OemMeritsEntity> oemMeritsEntities) {
return mesOemMeritsService.processSubmit(oemMeritsEntities);
}

@ -1,5 +1,6 @@
package org.springblade.desk.oem.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -14,6 +15,7 @@ import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.device.pojo.entity.MeasurementRecordsEntity;
import org.springblade.desk.oem.pojo.excel.OemAndAbilityImport;
import org.springblade.desk.oem.pojo.excel.OemMeritsExcel;
import org.springblade.desk.oem.pojo.excel.OemProcessExcel;
@ -84,6 +86,10 @@ public class OemProcessController extends BladeController {
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入mesOemProcess")
public R save(@Valid @RequestBody OemProcessEntity mesOemProcess) {
OemProcessEntity one = mesOemProcessService.getOne(Wrappers.<OemProcessEntity>lambdaQuery().eq(OemProcessEntity::getProcessId, mesOemProcess.getProcessId()));
if (one != null) {
return R.fail("外协工序已存在");
}
return R.status(mesOemProcessService.save(mesOemProcess));
}
@ -94,6 +100,10 @@ public class OemProcessController extends BladeController {
@ApiOperationSupport(order = 5)
@Operation(summary = "修改", description = "传入mesOemProcess")
public R update(@Valid @RequestBody OemProcessEntity mesOemProcess) {
OemProcessEntity one = mesOemProcessService.getOne(Wrappers.<OemProcessEntity>lambdaQuery().eq(OemProcessEntity::getProcessId, mesOemProcess.getProcessId()));
if (one != null && !one.getId().equals(mesOemProcess.getId())) {
return R.fail("外协工序已存在");
}
return R.status(mesOemProcessService.updateById(mesOemProcess));
}
@ -104,6 +114,10 @@ public class OemProcessController extends BladeController {
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入mesOemProcess")
public R submit(@Valid @RequestBody OemProcessEntity mesOemProcess) {
OemProcessEntity one = mesOemProcessService.getOne(Wrappers.<OemProcessEntity>lambdaQuery().eq(OemProcessEntity::getProcessId, mesOemProcess.getProcessId()));
if (one != null && !one.getId().equals(mesOemProcess.getId())) {
return R.fail("外协工序已存在");
}
return R.status(mesOemProcessService.saveOrUpdate(mesOemProcess));
}

@ -12,10 +12,14 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.oem.pojo.excel.OemMeritsExcel;
import org.springblade.desk.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.OemSettleAccountsApproval;
import org.springblade.desk.oem.pojo.request.OemSettleAccountsSave;
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.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -27,6 +31,7 @@ import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import java.util.ArrayList;
import java.util.Map;
import java.util.List;
@ -62,7 +67,7 @@ public class OemStatementController extends BladeController {
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入mesOemStatement")
@Operation(summary = "分页", description = "【未结算】rosStatusList传1;【结算中】rosStatusList传2;【结算异常】rosStatusList传3;【结算完成】rosStatusList传-1,4")
public R<IPage<StatementVO>> page(StatementQuery mesOemStatement, Query query) {
IPage<StatementVO> pages = mesOemStatementService.selectOemStatementPage(Condition.getPage(query), mesOemStatement);
return R.data(pages);
@ -118,17 +123,70 @@ public class OemStatementController extends BladeController {
return mesOemStatementService.oemSettleAccounts(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice(), oemSettleAccountsSave.getPutStoreDate());
}
/**
* 外协预结算-预览
*/
@PostMapping("/preSettlement")
@ApiOperationSupport(order = 8)
@Operation(summary = "外协预结算-预览", description = "")
public R<List<StatementVO>> preSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) {
return R.data(mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()));
}
/**
* 外协结算批量审核
*/
@PostMapping("/approval")
@ApiOperationSupport(order = 9)
@Operation(summary = "外协结算批量审核", description = "")
public R approval(@Valid @RequestBody OemSettleAccountsApproval oemSettleAccountsApproval) {
return mesOemStatementService.approval(oemSettleAccountsApproval);
}
/**
* 外协结算无需结算
*/
@PostMapping("/noSettlement")
@ApiOperationSupport(order = 10)
@Operation(summary = "外协结算无需结算", description = "")
public R noSettlement(@RequestBody List<StatementVO> list) {
return mesOemStatementService.notNeedSettlement(list);
}
/**
* 导出数据
*/
@GetMapping("/export-mesOemStatement")
@ApiOperationSupport(order = 9)
@ApiOperationSupport(order = 12)
@Operation(summary = "导出数据", description = "传入mesOemStatement")
public void exportOemStatement(@Parameter(hidden = true) @RequestParam Map<String, Object> mesOemStatement, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<OemStatementEntity> queryWrapper = Condition.getQueryWrapper(mesOemStatement, OemStatementEntity.class);
List<OemStatementExcel> list = mesOemStatementService.exportOemStatement(queryWrapper);
ExcelUtil.export(response, "外协结算单数据" + DateUtil.time(), "外协结算单数据表", list, OemStatementExcel.class);
public void exportOemStatement(StatementQuery mesOemStatement, Query query, BladeUser bladeUser, HttpServletResponse response) {
query.setSize(9999);
IPage<StatementVO> pages = mesOemStatementService.selectOemStatementPage(Condition.getPage(query), mesOemStatement);
List<StatementVO> list = pages.getRecords();
List<OemStatementExcel> excels = new ArrayList<>();
for (StatementVO statementVO : list) {
OemStatementExcel excel = new OemStatementExcel();
BeanUtils.copyProperties(statementVO, excel);
excels.add(excel);
}
ExcelUtil.export(response, "外协结算单数据" + DateUtil.time(), "外协结算单数据表", excels, OemStatementExcel.class);
}
/**
* 外协预结算导出数据
*/
@PostMapping("/export-preSettlement")
@ApiOperationSupport(order = 13)
@Operation(summary = "外协预结算-导出", description = "传入mesOemStatement")
public void exportPreSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave, BladeUser bladeUser, HttpServletResponse response) {
List<StatementVO> list = mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice());
List<OemStatementExcel> excels = new ArrayList<>();
for (StatementVO statementVO : list) {
OemStatementExcel excel = new OemStatementExcel();
BeanUtils.copyProperties(statementVO, excel);
excels.add(excel);
}
ExcelUtil.export(response, "外协预结算单数据" + DateUtil.time(), "外协预结算单数据表", excels, OemStatementExcel.class);
}
}

@ -71,8 +71,8 @@
om.*,
oem.oc_name AS oem_name,
oem.code AS oem_code,
ca.code AS ca_code,
ca.name AS ca_name
ca.ca_code,
ca.ca_name
from MES_OEM_MERITS om
LEFT JOIN BS_OEM oem ON om.oc_id = oem.id
LEFT JOIN BS_CRAFT_ABILITY ca ON om.ca_id = ca.id

@ -16,6 +16,7 @@
<result column="OEM_PROCESS_CODE" property="oemProcessCode"/>
<result column="PROCESS_ID" property="processId"/>
<result column="CRAFT_IDS" property="craftIds"/>
<result column="MANUAL" property="manual"/>
<!-- VO 扩展字段 -->
<result column="pa_name" property="paName"/>
<result column="ca_names" property="caNames"/>
@ -44,6 +45,9 @@
<if test="query.oemProcessCode != null and query.oemProcessCode != ''">
AND mop.OEM_PROCESS_CODE LIKE CONCAT('%', CONCAT(#{query.oemProcessCode}, '%'))
</if>
<if test="query.manual != null and query.manual != ''">
AND mop.MANUAL = #{query.manual}
</if>
ORDER BY mop.CREATE_TIME DESC
</select>

@ -20,6 +20,7 @@
<result column="UNIT" property="unit"/>
<result column="QUOTATION" property="quotation"/>
<result column="ROS_STATUS" property="rosStatus"/>
<result column="APPROVAL_STATUS" property="approvalStatus"/>
<result column="MEMO" property="memo"/>
</resultMap>
@ -41,6 +42,7 @@
<result column="UNIT" property="unit"/>
<result column="QUOTATION" property="quotation"/>
<result column="ROS_STATUS" property="rosStatus"/>
<result column="APPROVAL_STATUS" property="approvalStatus"/>
<result column="MEMO" property="memo"/>
<result column="wo_id" property="woId"/>
@ -59,6 +61,7 @@
<result column="batch_no" property="batchNo"/>
<result column="prod_ident" property="prodIdent"/>
<result column="quotation" property="quotation"/>
<result column="manual" property="manual"/>
<!-- 名称描述字段 -->
<result column="part_name" property="partName"/>
@ -92,6 +95,7 @@
d.BATCH_NO,
wm_concat(to_char(e.PRODUCT_IDENT)) AS PROD_IDENT,
-- g.BOP_NAME,
wm_concat(g.MANUAL) AS MANUAL,
wm_concat(to_char(d.PUT_STORE_TIME, 'yyyy-MM-dd')) AS PUT_STORE_TIME,
wm_concat(d.MAKE_QTY) AS MAKE_QTY,
wm_concat(to_char(e.YP_AREA, 'fm99999999999999999990.9999999999')) AS YP_AREA,
@ -102,7 +106,7 @@
wm_concat(to_char(p.plate_thickness)) AS plate_thickness,
d.id as WO_ID,
c.id as OC_ID,
g.id as BOP_ID,
g.id as OP_ID,
a.id as WP_ID,
h.id,
wm_concat(to_char(h.UNIT_PRICE)) AS UNIT_PRICE,
@ -110,6 +114,7 @@
wm_concat(to_char(h.TOTAL_PRICE)) AS TOTAL_PRICE,
wm_concat(to_char(h.QUOTATION)) AS QUOTATION,
wm_concat(to_char(h.MEMO)) AS MEMO,
wm_concat(to_char(h.APPROVAL_STATUS)) AS APPROVAL_STATUS,
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,
@ -169,6 +174,9 @@
<if test="query.prodIdent != null and query.prodIdent != ''">
AND e.PRODUCT_IDENT = #{query.prodIdent}
</if>
<if test="query.manual != null and query.manual != ''">
AND g.manual = #{query.manual}
</if>
<if test="query.woCode != null and query.woCode != ''">
AND (f.WO_CODE LIKE CONCAT('%', CONCAT(#{query.woCode}, '%')) OR d.WO_CODE LIKE CONCAT('%',
CONCAT(#{query.woCode}, '%')))
@ -193,6 +201,13 @@
#{id}
</foreach>
</if>
<if test="query.approvalStatusList != null and query.approvalStatusList != ''">
AND h.APPROVAL_STATUS IN
<foreach collection="query.approvalStatusList.split(',')" item="status"
open="(" separator="," close=")" index="index">
#{status}
</foreach>
</if>
GROUP BY g.PROCESS_ID, a.ID, c.OC_NAME, c.ID, g.ID, d.ID, d.BATCH_NO, c.CODE, a.HOUR_QUOTA, e.yo_code,
i.ca_name, e.use_dept,b.name,b.code,h.id
</select>

@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
@ -45,7 +46,7 @@ public interface IOemMeritsService extends BaseService<OemMeritsEntity> {
* @param entities
* @return
*/
R applyOemMerits(List<OemMeritsEntity> entities, LocalDate date);
R applyOemMerits(List<OemMeritsEntity> entities, Date date);
/**
* 维护厂家绩效

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.core.tool.api.R;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.OemSettleAccountsApproval;
import org.springblade.desk.oem.pojo.request.StatementQuery;
import org.springblade.desk.oem.pojo.vo.OemStatementVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -48,4 +49,30 @@ public interface IOemStatementService extends BaseService<OemStatementEntity> {
* @return
*/
R oemSettleAccounts(List<StatementVO> statementVOS, BigDecimal price, LocalDate putStoreDate);
/**
* 预结算
*
* @param statementVOS
* @param price
* @return
*/
List<StatementVO> preSettlement(List<StatementVO> statementVOS, BigDecimal price);
/**
* 结算单审核
*
* @param oemSettleAccountsApproval
* @return
*/
R approval(OemSettleAccountsApproval oemSettleAccountsApproval);
/**
* 无需结算
*
* @param list
* @return
*/
R notNeedSettlement(List<StatementVO> list);
}

@ -62,6 +62,9 @@ public class OemAndAbilityServiceImpl extends BaseServiceImpl<OemAndAbilityMappe
@Transactional(rollbackFor = Exception.class)
@Override
public R saveOrUpdateOrDelBatch(List<OemAndAbilityEntity> list, List<Long> deleteIds) {
if (deleteIds != null && deleteIds.size() > 0) {
baseMapper.deleteByIds(deleteIds);
}
//去重
Set<OemAndAbilityEntity> uniqueSet = new LinkedHashSet<>(list.size());
List<OemAndAbilityEntity> deduplicatedList = new ArrayList<>();
@ -80,20 +83,16 @@ public class OemAndAbilityServiceImpl extends BaseServiceImpl<OemAndAbilityMappe
.eq(OemAndAbilityEntity::getCaId, oemAndAbility.getCaId())
.eq(OemAndAbilityEntity::getOcId, oemAndAbility.getOcId()));
if (null != selectOne) {
//如果数据库中有重复数据,并且有id,则删除
if (oemAndAbility.getId() != null) {
deleteIds.add(oemAndAbility.getId());
}
//如果数据库中有重复数据,更新id
oemAndAbility.setId(selectOne.getId());
saveOrUpdate.add(oemAndAbility);
} else {
//如果数据库中没有重复数据,更新或新增
//如果数据库中没有重复数据,新增或修改
saveOrUpdate.add(oemAndAbility);
}
}
baseMapper.insertOrUpdate(saveOrUpdate);
}
if (deleteIds != null && deleteIds.size() > 0) {
baseMapper.deleteByIds(deleteIds);
}
return R.status(true);
}
@ -115,6 +114,10 @@ public class OemAndAbilityServiceImpl extends BaseServiceImpl<OemAndAbilityMappe
Map<String, Long> oemMap = oems.stream().collect(Collectors.toMap(
entity -> entity.getCode(),
entity -> entity.getId()));
ocCodeSet.removeAll(oemMap.keySet());
if (ocCodeSet.size() > 0) {
return R.fail("外协厂家:" + String.join(",", ocCodeSet) + "不存在。");
}
//根据工艺编码获取相关工艺
LambdaQueryWrapper<CraftAbilityEntity> processAbilityLambdaQueryWrapper = new LambdaQueryWrapper<>();
processAbilityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet); // [8](@ref)
@ -122,6 +125,10 @@ public class OemAndAbilityServiceImpl extends BaseServiceImpl<OemAndAbilityMappe
Map<String, Long> processAbilitiyMap = processAbilities.stream().collect(Collectors.toMap(
entity -> entity.getCaCode(),
entity -> entity.getId()));
caCodeSet.removeAll(processAbilitiyMap.keySet());
if (caCodeSet.size() > 0) {
return R.fail("工艺能力:" + String.join(",", caCodeSet) + "不存在。");
}
//组装外协绩效模板
List<OemAndAbilityImport> validList = importList.stream()
.filter(entity -> entity.getOcCode() != null && entity.getCaCode() != null) // 1. 过滤空代码

@ -52,13 +52,13 @@ public class OemMeritsServiceImpl extends BaseServiceImpl<OemMeritsMapper, OemMe
}
@Override
public R applyOemMerits(List<OemMeritsEntity> entities, LocalDate date) {
public R applyOemMerits(List<OemMeritsEntity> entities, Date date) {
if (null == date) {
return R.fail("无效日期");
}
List<OemMeritsEntity> saves = new ArrayList<>();
for (OemMeritsEntity entity : entities) {
entity.setUpdateTime(DateUtils.toDate(date));
entity.setUpdateTime(date);
entity.setOmStatus(OemMeritsEntity.NEW_DATA);
LambdaQueryWrapper<OemMeritsEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.apply("TO_CHAR(update_time, 'YYYY-MM') = TO_CHAR({0}, 'YYYY-MM')", date)
@ -78,7 +78,9 @@ public class OemMeritsServiceImpl extends BaseServiceImpl<OemMeritsMapper, OemMe
}
saves.add(entity);
}
baseMapper.insertOrUpdate(saves);
if (saves.size() > 0) {
baseMapper.insertOrUpdate(saves);
}
return R.status(true);
}

@ -2,6 +2,7 @@ package org.springblade.desk.oem.service.impl;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil;
@ -89,6 +90,10 @@ public class OemProcessServiceImpl extends BaseServiceImpl<OemProcessMapper, Oem
OemProcessEntity oemProcessEntity = new OemProcessEntity();
BeanUtils.copyProperties(oemProcessImport, oemProcessEntity);
oemProcessEntity.setOemProcessCode(oemProcessImport.getPaCode());
OemProcessEntity one = this.getOne(Wrappers.<OemProcessEntity>lambdaQuery().eq(OemProcessEntity::getProcessId, oemProcessEntity.getProcessId()));
if (one != null) {
oemProcessEntity.setId(one.getId());
}
saves.add(oemProcessEntity);
}
}

@ -1,7 +1,9 @@
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.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
@ -11,6 +13,7 @@ import org.springblade.desk.oem.mapper.PlatingTypeRulesMapper;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.entity.PlatingTypeRulesEntity;
import org.springblade.desk.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.OemSettleAccountsApproval;
import org.springblade.desk.oem.pojo.request.PriceSheetQuery;
import org.springblade.desk.oem.pojo.request.StatementQuery;
import org.springblade.desk.oem.mapper.OemStatementMapper;
@ -70,7 +73,73 @@ 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);
if (priceSheetAllList.isEmpty()) {
//【结算异常】
statementVOList.forEach(statementVO -> {
@ -90,13 +159,13 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//3.为每个结算单匹配报价集合
statementVOList.forEach(statementVO -> {
List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap);
if (matchedPriceSheets.isEmpty()) {
if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) {
return;
}
statementVO.setPriceSheetList(matchedPriceSheets);
//4.匹配规则,过滤出唯一报价
//①.匹配车间订单号
if (ruleWoNo(statementVO)) {
if (ruleWoNo(statementVO, true)) {
return;
}
//②.匹配物料名称和质量等级
@ -108,7 +177,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return;
}
//④.涂色标、涂色带、涂箭头
if (ruleColor(statementVO)) {
if (ruleColor(statementVO, true)) {
return;
}
//⑤.物料号匹配
@ -116,7 +185,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return;
}
//⑥.阶梯价匹配
if (ruleTieredPricing(statementVO)) {
if (ruleTieredPricing(statementVO, true)) {
return;
}
});
@ -127,6 +196,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
OemStatementEntity entity = new OemStatementEntity();
BeanUtils.copyProperties(statementVO, entity);
entity.setUpdateTime(new Date());
entity.setIsDeleted(0);
return entity;
})
.collect(Collectors.toList());
@ -136,6 +206,203 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
@Override
public List<StatementVO> preSettlement(List<StatementVO> statementVOS, BigDecimal price) {
//1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表>
Map<String, List<StatementVO>> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName));
for (Map.Entry<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) {
//外协厂商下全部需要结算的结算单
List<StatementVO> statementVOList = listEntry.getValue();
//2.以外协名称查出的全部报价单
String oemName = listEntry.getKey();
// 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);
if (priceSheetAllList.isEmpty()) {
//【结算异常】
statementVOList.forEach(statementVO -> {
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】匹配无报价记录", oemName));
});
} else {
//工序分组Map<工序, 报价列表>
Map<String, List<PriceSheetVO>> priceSheetMap = priceSheetAllList.stream()
.collect(Collectors.groupingBy(
PriceSheetVO::getGxinfo,
() -> new TreeMap<>(Collections.reverseOrder()), // 按键的倒序排序
Collectors.collectingAndThen(
Collectors.toList(),
list -> {
// 对每个分组内的列表按生效日期倒序排序
return list.stream()
.sorted(Comparator.comparing(PriceSheetVO::getStartdat).reversed())
.collect(Collectors.toList());
}
)
));
//3.为每个结算单匹配报价集合
statementVOList.forEach(statementVO -> {
List<PriceSheetVO> matchedPriceSheets = MatchTheQuotations(statementVO, priceSheetMap);
if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) {
return;
}
statementVO.setPriceSheetList(matchedPriceSheets);
//4.匹配规则,过滤出唯一报价
//①.匹配车间订单号
if (ruleWoNo(statementVO, false)) {
return;
}
//②.匹配物料名称和质量等级
if (rulePartNameAndProdIdent(statementVO)) {
return;
}
//③.匹配金价银价
if (ruleGoldAndSilverPrices(statementVO, price)) {
return;
}
//④.涂色标、涂色带、涂箭头
if (ruleColor(statementVO, false)) {
return;
}
//⑤.物料号匹配
if (ruleGoods(statementVO)) {
return;
}
//⑥.阶梯价匹配
if (ruleTieredPricing(statementVO, false)) {
return;
}
});
}
}
return statementVOS;
}
@Override
public R approval(OemSettleAccountsApproval oemSettleAccountsApproval) {
List<Long> ids = oemSettleAccountsApproval.getIds();
if (CollectionUtils.isEmpty(ids)) {
return R.fail("未选取结算单");
}
UpdateWrapper<OemStatementEntity> updateWrapper = new UpdateWrapper<>();
if (3 == oemSettleAccountsApproval.getApprovalStatus()) {
//审核通过
updateWrapper
.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA)
.set("memo", "外协结算完成")
.set("ros_status", OemStatementEntity.OK_SETTLEMENT)
.in("id", ids);
} else {
//审核不通过:(1)原因为不需要结算的更新为【无需结算】(2)原因是基础数据有误的更新为【结算异常】
if (1 == oemSettleAccountsApproval.getReason()) {
updateWrapper
.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA)
.set("memo", "无需结算")
.set("ros_status", OemStatementEntity.NOT_NEED_SETTLEMENT)
.in("id", ids);
} else {
updateWrapper
.set("approval_status", OemStatementEntity.APPROVAL_STATUS_FAIL)
.set("memo", "基础数据有误")
.set("ros_status", OemStatementEntity.ERR_SETTLEMENT)
.in("id", ids);
}
}
return R.status(baseMapper.update(null, updateWrapper) > 0);
}
@Override
public R notNeedSettlement(List<StatementVO> list) {
if (null != list && list.size() > 0) {
List<OemStatementEntity> saves = list.stream()
.map(statementVO -> {
OemStatementEntity entity = new OemStatementEntity();
BeanUtils.copyProperties(statementVO, entity);
entity.setApprovalStatus(OemStatementEntity.APPROVAL_STATUS_VIA);
entity.setRosStatus(OemStatementEntity.NOT_NEED_SETTLEMENT);
entity.setMemo("无需结算");
entity.setUpdateTime(new Date());
return entity;
})
.collect(Collectors.toList());
baseMapper.insertOrUpdate(saves);
}
return R.fail("未选取结算单");
}
/**
* 获取报价单列表
*/
@ -145,13 +412,30 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
query.setInDateStart(putStoreDate);
query.setInDateEnd(putStoreDate);
// R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{
// setSize(99999);
// }});
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{
setSize(99999);
}});
if (pageR != null && pageR.getData() != null) {
return pageR.getData().getRecords();
}
return Collections.emptyList();
}
/**
* 获取报价单列表
*/
private List<PriceSheetVO> getPriceSheets(String oemName) {
PriceSheetQuery query = new PriceSheetQuery();
query.setOcName(oemName);
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{
setSize(99999);
}});
// if (pageR != null && pageR.getData() != null) {
// return pageR.getData().getRecords();
// }
if (pageR != null && pageR.getData() != null) {
return pageR.getData().getRecords();
}
return Collections.emptyList();
}
@ -177,9 +461,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* 规则匹配车间订单号
*
* @param statementVO
* @param flag 结算true,预结算false
* @return
*/
private boolean ruleWoNo(StatementVO statementVO) {
private boolean ruleWoNo(StatementVO statementVO, boolean flag) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
//取出匹配车间订单号的报价和无车间订单号的报价
Map<String, List<PriceSheetVO>> woNoPriceSheetMap = priceSheetList.stream()
@ -194,7 +479,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (woNoPriceSheetMap.containsKey(statementVO.getWoCode())) {
List<PriceSheetVO> woNoPriceSheetList = woNoPriceSheetMap.get(statementVO.getWoCode());
//多条【结算异常】
if (woNoPriceSheetList.size() > 1) {
if (woNoPriceSheetList.size() > 1 && flag) {
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,工作订单号【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), statementVO.getWoCode()));
//结算异常:多条报价记录结算结果
@ -205,6 +490,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = new BigDecimal(statementVO.getMakeQty());
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER);
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
@ -263,7 +549,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
String plateGoodsCode = statementVO.getPlateGoodsCode();
//判断传入参数的当前金价银价 > 0 && 零件镀层物料编码不为空,则需匹配规则
if (price.compareTo(BigDecimal.ZERO) > 0 && StringUtils.isEmpty(plateGoodsCode)) {
if (price.compareTo(BigDecimal.ZERO) > 0 && !StringUtils.isEmpty(plateGoodsCode)) {
//取出所有备注
Map<String, List<PriceSheetVO>> remarkPriceSheetMap = priceSheetList.stream()
.filter(priceSheet -> {
@ -297,9 +583,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* 涂色标涂色带涂箭头匹配规则
*
* @param statementVO
* @param flag 结算true,预结算false
* @return
*/
private boolean ruleColor(StatementVO statementVO) {
private boolean ruleColor(StatementVO statementVO, boolean flag) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
//结算单色标色带箭头数量>0,需要匹配报价里色标色带箭头
//如果结算单没有数量,直接返回false进入下个规则
@ -336,7 +623,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String quotation = "";
if (tjtNum > 0 && prtnoPriceSheetMap.containsKey("涂箭头")) {
List<PriceSheetVO> tjtPriceSheetList = prtnoPriceSheetMap.get("涂箭头");
if (tjtPriceSheetList.size() > 1) {
if (tjtPriceSheetList.size() > 1 && flag) {
//结算异常:多条报价记录结算结果
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,涂箭头数量【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), tjtNum));
@ -350,7 +637,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
if (tsdNum > 0 && prtnoPriceSheetMap.containsKey("涂色带")) {
List<PriceSheetVO> tsdPriceSheetList = prtnoPriceSheetMap.get("涂色带");
if (tsdPriceSheetList.size() > 1) {
if (tsdPriceSheetList.size() > 1 && flag) {
//结算异常:多条报价记录结算结果
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,涂色带数量【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), tsdNum));
@ -364,7 +651,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
if (tsbNum > 0 && prtnoPriceSheetMap.containsKey("涂色标")) {
List<PriceSheetVO> tsbPriceSheetList = prtnoPriceSheetMap.get("涂色标");
if (tsbPriceSheetList.size() > 1) {
if (tsbPriceSheetList.size() > 1 && flag) {
//结算异常:多条报价记录结算结果
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,涂色标数量【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), tsbNum));
@ -379,12 +666,13 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//如总价大于0,则报价成功
if (totalPrice.compareTo(BigDecimal.ZERO) > 0) {
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER);
statementVO.setTotalPrice(totalPrice);
statementVO.setMemo("结算中");
statementVO.setQuotation(quotation);
return true;
} else {
//结算异常:多条报价记录结算结果
//结算异常:报价记录结算结果
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】涂色标、涂色带、涂箭头匹配无报价记录", statementVO.getOcName(), statementVO.getPartName()));
return true;
@ -446,7 +734,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (StringUtils.isEmpty(plate)) {
return false;
}
Map<String, List<PriceSheetVO>> map = priceSheetList.stream().collect(Collectors.groupingBy(PriceSheetVO::getPrtno));
Map<String, List<PriceSheetVO>> map = priceSheetList.stream()
.filter(vo -> vo.getPrtno() != null) // 过滤掉prtno为null的对象
.collect(Collectors.groupingBy(PriceSheetVO::getPrtno));
//1.精确匹配,完整的镀种
if (map.containsKey(plate)) {
statementVO.setPriceSheetList(map.get(plate));
@ -454,9 +744,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
//2.使用模糊查询。根据订单中的镀种,到镀种映射表中查询对应的代码,再根据代码查找报价,适用于:Ap.Ni15、Ap.Ni20有同一个报价Ap.Ni%Cu%Xn%
LambdaQueryWrapper<PlatingTypeRulesEntity> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(PlatingTypeRulesEntity::getOrderPlat, plate)
.orderByDesc(PlatingTypeRulesEntity::getCreateTime) // 按创建时间降序
.last("AND ROWNUM = 1"); // 只取第一条
queryWrapper.apply("ROWNUM = 1").eq(PlatingTypeRulesEntity::getOrderPlat, plate)
.orderByDesc(PlatingTypeRulesEntity::getCreateTime);
PlatingTypeRulesEntity platingTypeRulesEntity = platingTypeRulesMapper.selectOne(queryWrapper);
if (platingTypeRulesEntity == null || StringUtils.isBlank(platingTypeRulesEntity.getQuotationPlat())) {
return false;
@ -481,7 +770,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (StringUtils.isEmpty(partCode)) {
return false;
}
Map<String, List<PriceSheetVO>> map = priceSheetList.stream().collect(Collectors.groupingBy(PriceSheetVO::getPrtno));
Map<String, List<PriceSheetVO>> map = priceSheetList.stream()
.filter(vo -> vo.getPrtno() != null) // 过滤掉prtno为null的对象
.collect(Collectors.groupingBy(PriceSheetVO::getPrtno));
//1.精确匹配,完整的零件号
if (map.containsKey(partCode)) {
statementVO.setPriceSheetList(map.get(partCode));
@ -491,7 +782,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
Map<String, List<PriceSheetVO>> newMap = map.entrySet().stream()
.filter(entry -> entry.getKey().contains("-%"))
.collect(Collectors.toMap(
entry -> entry.getKey().split("%")[0], // 只保留%之前的部分
entry -> entry.getKey().split("-%")[0], // 只保留%之前的部分
Map.Entry::getValue
));
List<PriceSheetVO> priceSheetVOList = newMap.entrySet().stream()
@ -519,7 +810,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (StringUtils.isEmpty(plateThickness)) {
return false;
}
Map<String, List<PriceSheetVO>> map = priceSheetList.stream().collect(Collectors.groupingBy(PriceSheetVO::getPrtno));
Map<String, List<PriceSheetVO>> map = priceSheetList.stream()
.filter(vo -> vo.getPrtno() != null) // 过滤掉prtno为null的对象
.collect(Collectors.groupingBy(PriceSheetVO::getPrtno));
//镀层厚度值相等,保存报价集合
if (map.containsKey(plateThickness)) {
statementVO.setPriceSheetList(map.get(plateThickness));
@ -532,9 +825,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* 规则阶梯价匹配
*
* @param statementVO
* @param flag 结算true,预结算false
* @return
*/
private boolean ruleTieredPricing(StatementVO statementVO) {
private boolean ruleTieredPricing(StatementVO statementVO, boolean flag) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
//如果无报价,结算异常:无报价记录结算结果
if (null == priceSheetList || priceSheetList.isEmpty()) {
@ -549,6 +843,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = new BigDecimal(statementVO.getMakeQty());
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER);
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
@ -577,11 +872,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
List<PriceSheetVO> priceSheetVOS = StairPriceSheetMap.get("非阶梯价");
if (null == priceSheetVOS || priceSheetVOS.isEmpty()) {
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【】匹配无报价记录", statementVO.getOcName(), statementVO.getPartName(), "非阶梯价"));
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【%s】匹配无报价记录", statementVO.getOcName(), statementVO.getPartName(), "非阶梯价"));
return true;
} else if (null != priceSheetVOS && priceSheetVOS.size() > 1) {
} else if (null != priceSheetVOS && priceSheetVOS.size() > 1 && flag) {
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), "非阶梯价"));
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), "非阶梯价"));
return true;
}
//唯一使用此报价单**结算**
@ -589,6 +884,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = new BigDecimal(statementVO.getMakeQty());
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER);
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
@ -607,20 +903,22 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (null != priceSheetVOS && priceSheetVOS.size() > 1) {
List<PriceSheetVO> priceSheetVOList = priceSheetVOS.stream()
.filter(vo -> {
//现场数据库里lower是上限,upper反而是下限
double lower = Double.parseDouble(vo.getLower());
double upper = Double.parseDouble(vo.getUpper());
return ypAreaValue >= lower && ypAreaValue <= upper;
return ypAreaValue >= upper && ypAreaValue <= lower;
}).collect(Collectors.toList());
if (null != priceSheetVOList && priceSheetVOList.size() > 1) {
if (null != priceSheetVOList && priceSheetVOList.size() > 1 && flag) {
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单件面积)"));
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单件面积)"));
return true;
} else if (null != priceSheetVOList && priceSheetVOList.size() == 1) {
} else if ((null != priceSheetVOList && priceSheetVOList.size() == 1) || (!flag && null != priceSheetVOList && priceSheetVOList.size() > 1)) {
//唯一使用此报价单**结算**
PriceSheetVO priceSheet = priceSheetVOList.get(0);
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = new BigDecimal(statementVO.getMakeQty());
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER);
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
@ -629,7 +927,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return true;
}
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【】匹配无报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单件面积)"));
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【%s】匹配无报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单件面积)"));
return true;
}
return true;
@ -645,20 +943,22 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (null != priceSheetVOS && priceSheetVOS.size() > 1) {
List<PriceSheetVO> priceSheetVOList = priceSheetVOS.stream()
.filter(vo -> {
//现场数据库里lower是上限,upper反而是下限
double lower = Double.parseDouble(vo.getLower());
double upper = Double.parseDouble(vo.getUpper());
return totalAreaValue >= lower && totalAreaValue <= upper;
return totalAreaValue >= upper && totalAreaValue <= lower;
}).collect(Collectors.toList());
if (null != priceSheetVOList && priceSheetVOList.size() > 1) {
if (null != priceSheetVOList && priceSheetVOList.size() > 1 && flag) {
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单批面积)"));
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【%s】匹配多条报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单批面积)"));
return true;
} else if (null != priceSheetVOList && priceSheetVOList.size() == 1) {
} else if (null != priceSheetVOList && priceSheetVOList.size() == 1 || (!flag && null != priceSheetVOList && priceSheetVOList.size() > 1)) {
//唯一使用此报价单**结算**
PriceSheetVO priceSheet = priceSheetVOList.get(0);
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = new BigDecimal(statementVO.getMakeQty());
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER);
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
@ -667,7 +967,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return true;
}
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【】匹配无报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单批面积)"));
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,阶梯价【%s】匹配无报价记录", statementVO.getOcName(), statementVO.getPartName(), "单批阶梯价(按单批面积)"));
return true;
}
return true;
@ -707,7 +1007,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String prodIdent = statementVO.getProdIdent();
// 如果 prtlotno 是 "/",条件满足
if ("/".equals(prtlotno)) {
if (null == prtlotno || "/".equals(prtlotno)) {
return true;
}

@ -4,6 +4,7 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.core.secure.BladeUser;
import org.springblade.desk.device.pojo.entity.FeiBaSetEntity;
import org.springblade.desk.device.pojo.entity.RackSetEntity;
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.vo.LoadSubOrderVO;
@ -63,5 +64,8 @@ public interface IPdaLoadService extends BaseService<WorkPlan> {
public WorkOrder checkPrWorkOrder(String cardNo);
void handleBaoZhuangWorkPlan(List<WorkPlan> wpList, YieldOrder yo);
boolean saveProCheck(InspectionTask inspectionTask);
}

@ -264,6 +264,29 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
return inspectionTaskService.saveOrUpdate(inspectionTask);
}
@Override
public void handleBaoZhuangWorkPlan(List<WorkPlan> wpList, YieldOrder yo) {
/*if (wpList == null || wpList.size() == 0) {
return;
}
for (WorkPlan wp : wpList) {
// 如果工序是包装,并且工艺能力是包装、加工单位为空
if ("包装".equals(wp.getProcedureSet().getPpsName()) && (wp.getBsCraftAbility() != null && wp.getBsCraftAbility().getCaName().contains("包装"))
&& wp.getMakeTeam() == null && wp.getOemCustomer() == null) {
// 获取当前工序之前的主工序
PrWorkPlan prWorkPlan = prWorkPlanService.fontMainProcess(wp.getPrWorkOrder().getWoId());
if (prWorkPlan != null && prWorkPlan.getWpId() != null) {
if (prWorkPlan.getOemCustomer() != null && prWorkPlan.getOemCustomer().getOcId() != null) {
wp.setOemCustomer(prWorkPlan.getOemCustomer());
wp.setOem("1");
// } else {
// wp.setMakeTeam(prWorkPlan.getMakeTeam());
}
}
}
}*/
}
private WorkOrder checkWo(String cardNo) {
WorkOrder prWorkOrder = workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getCardNo, cardNo));
if (prWorkOrder == null) {

@ -29,6 +29,7 @@ import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.produce.mapper.*;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.enums.ProcessCycleEnum;
import org.springblade.desk.produce.service.IPdaLoadService;
import org.springblade.desk.produce.service.IPlateAroundService;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkOrderService;
@ -81,6 +82,8 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
private IWorkOrderService workOrderService;
private IPdaLoadService pdaLoadService;
private final IErpDataOemClient erpDataOemClient;
@Resource
@ -89,6 +92,12 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
this.plateAroundService = plateAroundService;
}
@Resource
@Lazy
private void setPdaLoadService(IPdaLoadService pdaLoadService) {
this.pdaLoadService = pdaLoadService;
}
@Resource
@Lazy
private void setWorkOrderService(IWorkOrderService workOrderService) {
@ -302,7 +311,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//周新昊 20241015 增加调用下方方法
//处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
//todo 手持移动端数据查询接口类未实现
// pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo);
pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo);
} else {
PlateAround prPlateAround = new PlateAround();
prPlateAround.setWpId(wo.getWpId());

Loading…
Cancel
Save