Compare commits

..

No commits in common. 'master' and 'liweidong' have entirely different histories.

  1. 33
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/oem/OemStatementTaskProcessor.java
  2. 18
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/feign/IOemStatementClient.java
  3. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java
  4. 30
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementTaskLogEntity.java
  5. 15
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java
  6. 11
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java
  7. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasurementRecordsServiceImpl.java
  8. 19
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/feign/OemStatementClient.java
  9. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java
  10. 80
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  11. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementTaskLogMapper.java
  12. 23
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementTaskLogMapper.xml
  13. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java
  14. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementTaskLogService.java
  15. 901
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  16. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementTaskLogServiceImpl.java
  17. 5
      blade-service/blade-system/src/main/java/org/springblade/system/controller/UserController.java
  18. 3
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java
  19. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml
  20. 11
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireRecordServiceImpl.java
  21. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java

@ -1,33 +0,0 @@
package org.springblade.job.processor.oem;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.oem.feign.IOemStatementClient;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
/**
* 外协结算单生成定时任务
*
* @author BladeX
* @since 2026-05-08
*/
@Component
@Data
@Slf4j
public class OemStatementTaskProcessor implements BasicProcessor {
@Resource
private IOemStatementClient oemStatementClient;
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("========== 开始外协结算单生成定时任务 ==========");
oemStatementClient.generateSettlement();
log.info("========== 结束外协结算单生成定时任务 ==========");
return new ProcessResult(true);
}
}

@ -1,18 +0,0 @@
package org.springblade.desk.oem.feign;
import org.springblade.core.launch.constant.AppConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(
value = AppConstant.APPLICATION_DESK_NAME
)
public interface IOemStatementClient {
String API_PREFIX = "/feign/client/oem-statement";
String GENERATE_SETTLEMENT = API_PREFIX + "/generate-settlement";
@GetMapping(GENERATE_SETTLEMENT)
void generateSettlement();
}

@ -134,7 +134,4 @@ public class OemStatementEntity extends BaseEntity {
@Schema(description = "备注") @Schema(description = "备注")
private String memo; private String memo;
@Schema(description = "标准工序代码")
private String standardProcessCode;
} }

@ -1,30 +0,0 @@
package org.springblade.desk.oem.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.util.Date;
/**
* 外协结算任务日志 实体类
*
* @author maxg
* @since 2026-05-08
*/
@Data
@TableName("MES_OEM_STATEMENT_TASK_LOG")
@Schema(description = "OemStatementTaskLog对象")
@EqualsAndHashCode(callSuper = true)
public class OemStatementTaskLogEntity extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "镀后入库时间")
private Date putStoreTime;
}

@ -107,19 +107,4 @@ public class StatementVO extends OemStatementEntity {
* 同外协厂家下有效期内的全部该工序报价 * 同外协厂家下有效期内的全部该工序报价
*/ */
private List<PriceSheetVO> priceSheetList; private List<PriceSheetVO> priceSheetList;
@Schema(description = "需结算工艺能力")
private String craftIds;
@Schema(description = "返工单号")
private String reworkCode;
@Schema(description = "返工顺序")
private String reworkNo;
@Schema(description = "计划部门")
private String planDeptcode;
@Schema(description = "工艺能力类型")
private String wxLimit;
} }

@ -97,15 +97,4 @@ public class PriceMatcher {
.filter(remark -> containsPrice(remark, targetPrice)) .filter(remark -> containsPrice(remark, targetPrice))
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
/**
* 判断价格是否匹配
*
* @param remark
* @param targetPrice
* @return
*/
public static boolean isContainsPrice(String remark, BigDecimal targetPrice) {
return containsPrice(remark, targetPrice);
}
} }

@ -51,8 +51,7 @@ public class IMeasurementRecordsServiceImpl extends BaseServiceImpl<MeasurementR
// 2. 动态添加条件(核心!) // 2. 动态添加条件(核心!)
// 根据实体对象 entity 中字段是否为空,来动态拼接WHERE条件 // 根据实体对象 entity 中字段是否为空,来动态拼接WHERE条件
wrapper.like(Objects.nonNull(mesMeasurementRecords.getMcCode()), MeasurementRecordsEntity::getMcCode, mesMeasurementRecords.getMcCode()) wrapper.eq(Objects.nonNull(mesMeasurementRecords.getMcCode()), MeasurementRecordsEntity::getMcCode, mesMeasurementRecords.getMcCode());
.like(Objects.nonNull(mesMeasurementRecords.getMcName()), MeasurementRecordsEntity::getMcName, mesMeasurementRecords.getMcName());
// 3. 执行分页查询 // 3. 执行分页查询
IPage<MeasurementRecordsEntity> measurementRecordsEntityIPage = baseMapper.selectPage(page, wrapper); IPage<MeasurementRecordsEntity> measurementRecordsEntityIPage = baseMapper.selectPage(page, wrapper);

@ -1,19 +0,0 @@
package org.springblade.desk.oem.feign;
import io.swagger.v3.oas.annotations.Hidden;
import jakarta.annotation.Resource;
import org.springblade.desk.oem.service.IOemStatementService;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Hidden
public class OemStatementClient implements IOemStatementClient {
@Resource
private IOemStatementService oemStatementService;
@Override
public void generateSettlement() {
oemStatementService.generateSettlement();
}
}

@ -37,12 +37,4 @@ public interface OemStatementMapper extends BaseMapper<OemStatementEntity> {
*/ */
List<OemStatementExcel> exportOemStatement(@Param("ew") Wrapper<OemStatementEntity> queryWrapper); List<OemStatementExcel> exportOemStatement(@Param("ew") Wrapper<OemStatementEntity> queryWrapper);
/**
* 获取未结算计划订单
*
* @param query
* @return
*/
List<StatementVO> selectUnsettled(StatementQuery query);
} }

@ -86,12 +86,6 @@
<result column="tsb_num" property="tsbNum"/> <result column="tsb_num" property="tsbNum"/>
<result column="tsd_num" property="tsdNum"/> <result column="tsd_num" property="tsdNum"/>
<result column="tjt_num" property="tjtNum"/> <result column="tjt_num" property="tjtNum"/>
<result column="CRAFT_IDS" property="craftIds"/>
<result column="REWORK_CODE" property="reworkCode"/>
<result column="REWORK_NO" property="reworkNo"/>
<result column="PLAN_DEPTCODE" property="planDeptcode"/>
<result column="WX_LIMIT" property="wxLimit"/>
</resultMap> </resultMap>
<select id="selectOemStatementPage" resultMap="StatementVOResultMap"> <select id="selectOemStatementPage" resultMap="StatementVOResultMap">
@ -224,78 +218,4 @@
FROM MES_OEM_STATEMENT ${ew.customSqlSegment} FROM MES_OEM_STATEMENT ${ew.customSqlSegment}
</select> </select>
<select id="selectUnsettled" resultMap="StatementVOResultMap">
SELECT
a.id AS WP_ID,
a.wo_id,
a.ca_id,
a.OC_ID,
a.pps_id as ps_id,
b.name as ps_name,
c.code as OC_CODE,
d.REWORK_CODE,
d.REWORK_NO,
d.wo_code,
to_char(d.PUT_STORE_TIME, 'yyyy-MM-dd') AS PUT_STORE_TIME,
d.MAKE_QTY,
e.PLATE_THICKNESS1 as ROS_THICKNESS,
e.PLATE_THICKNESS1 as PLATE_THICKNESS,
e.PLAN_DEPTCODE,
e.plate,
e.PART_CODE,
e.PRODUCT_IDENT as PROD_IDENT,
e.tsb_num AS tsb_num,
e.tsd_num AS tsd_num,
e.tjt_num AS tjt_num,
e.YP_AREA AS YP_AREA,
d.MAKE_QTY * e.YP_AREA AS total_area,
g.manual,
g.CRAFT_IDS,
i.WX_LIMIT,
p.part_name
FROM
MES_WORK_PLAN a
INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0
INNER JOIN BS_OEM c ON a.OC_ID = c.ID AND c.IS_DELETED = 0
INNER JOIN MES_WORK_ORDER d ON a.WO_ID = d.ID AND d.IS_DELETED = 0
INNER JOIN MES_YIELD_ORDER e ON d.YO_ID = e.ID AND e.IS_DELETED = 0
INNER JOIN MES_OEM_PROCESS g ON b.ID = g.PROCESS_ID AND g.IS_DELETED = 0
LEFT JOIN MES_OEM_STATEMENT h ON h.WP_ID = a.ID AND h.IS_DELETED = 0
INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0
INNER JOIN DS_PART_VERSION pv ON e.part_code = pv.part_code AND e.part_version = pv.part_version AND pv.IS_DELETED = 0
INNER JOIN DS_PART p ON pv.PART_ID = p.ID AND p.IS_DELETED = 0
<where>
d.PUT_STORE_TIME IS NOT NULL AND ( a.ID NOT IN ( SELECT WP_ID FROM MES_OEM_STATEMENT ) OR d.PUT_STORE_TIME &gt; h.CREATE_TIME )
<if test="postPlatingStorageTimeStart != null">
AND d.PUT_STORE_TIME &gt;= #{postPlatingStorageTimeStart}
</if>
</where>
GROUP BY
a.id,
a.wo_id,
a.OC_ID,
a.pps_id,
a.ca_id,
b.name,
c.code,
d.REWORK_CODE,
d.REWORK_NO,
d.wo_code,
d.PUT_STORE_TIME,
d.MAKE_QTY,
e.PLATE_THICKNESS1,
e.PLAN_DEPTCODE,
e.plate,
e.PART_CODE,
e.PRODUCT_IDENT,
e.tsb_num,
e.tsd_num,
e.tjt_num,
e.YP_AREA,
g.manual,
g.CRAFT_IDS,
i.WX_LIMIT,
p.part_name
</select>
</mapper> </mapper>

@ -1,18 +0,0 @@
package org.springblade.desk.oem.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.oem.pojo.entity.OemStatementTaskLogEntity;
import java.util.Date;
/**
* 外协结算任务日志 Mapper 接口
*
* @author maxg
* @since 2026-05-08
*/
public interface OemStatementTaskLogMapper extends BaseMapper<OemStatementTaskLogEntity> {
Date getLastMaxPutStoreTime();
}

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.oem.mapper.OemStatementTaskLogMapper">
<!-- 通用查询映射结果 -->
<resultMap id="mesOemStatementTaskLogResultMap" type="org.springblade.desk.oem.pojo.entity.OemStatementTaskLogEntity">
<result column="ID" property="id"/>
<result column="PUT_STORE_TIME" property="putStoreTime"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
<select id="getLastMaxPutStoreTime" resultType="java.util.Date">
SELECT MAX(PUT_STORE_TIME) FROM MES_OEM_STATEMENT_TASK_LOG WHERE IS_DELETED = 0
</select>
</mapper>

@ -84,9 +84,4 @@ public interface IOemStatementService extends BaseService<OemStatementEntity> {
*/ */
R notNeedSettlement(List<StatementVO> list); R notNeedSettlement(List<StatementVO> list);
/**
* 生成结算数据
*/
void generateSettlement();
} }

@ -1,24 +0,0 @@
package org.springblade.desk.oem.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.oem.pojo.entity.OemStatementTaskLogEntity;
import java.util.Date;
public interface IOemStatementTaskLogService extends BaseService<OemStatementTaskLogEntity> {
/**
* 获取最大镀后入库时间
*
* @return
*/
Date getLastMaxPutStoreTime();
/**
* 保存最大镀后入库时间
*
* @param putStoreTime
*/
void saveMaxPutStoreTime(Date putStoreTime);
}

@ -1,26 +0,0 @@
package org.springblade.desk.oem.service.impl;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.oem.mapper.OemStatementTaskLogMapper;
import org.springblade.desk.oem.pojo.entity.OemStatementTaskLogEntity;
import org.springblade.desk.oem.service.IOemStatementTaskLogService;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class OemStatementTaskLogServiceImpl extends BaseServiceImpl<OemStatementTaskLogMapper, OemStatementTaskLogEntity> implements IOemStatementTaskLogService {
@Override
public Date getLastMaxPutStoreTime() {
return baseMapper.getLastMaxPutStoreTime();
}
@Override
public void saveMaxPutStoreTime(Date putStoreTime) {
OemStatementTaskLogEntity entity = new OemStatementTaskLogEntity();
entity.setPutStoreTime(putStoreTime);
this.save(entity);
}
}

@ -28,7 +28,6 @@ package org.springblade.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -530,10 +529,6 @@ public class UserController {
@Operation(summary = "根据角色别名查询所有用户", description = "传入roleAlias") @Operation(summary = "根据角色别名查询所有用户", description = "传入roleAlias")
public R<List<UserVO>> listAllByRole(@Parameter(description = "角色别名") String roleAlias) { public R<List<UserVO>> listAllByRole(@Parameter(description = "角色别名") String roleAlias) {
List<User> list = userExtService.listAllByRole(roleAlias); List<User> list = userExtService.listAllByRole(roleAlias);
if(ObjectUtils.isEmpty(list)){
List<UserVO> list1 = new ArrayList<>();
return R.data(list1);
}
return R.data(UserWrapper.build().listVO(list)); return R.data(UserWrapper.build().listVO(list));
} }

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.wms.excel.StGlassCakeOutExcel; import org.springblade.wms.excel.StGlassCakeOutExcel;
import org.springblade.wms.pojo.entity.StGlassCakeOut; import org.springblade.wms.pojo.entity.StGlassCakeOut;
import org.springblade.wms.pojo.vo.StGlassCakeOutVO; import org.springblade.wms.pojo.vo.StGlassCakeOutVO;
@ -44,7 +43,5 @@ public interface StGlassCakeOutMapper extends BaseMapper<StGlassCakeOut> {
List<StGlassCakeOutExcel> exportStGlassCakeOut(@Param("ew") Wrapper<StGlassCakeOut> queryWrapper); List<StGlassCakeOutExcel> exportStGlassCakeOut(@Param("ew") Wrapper<StGlassCakeOut> queryWrapper);
StGlassCakeOut getBySirId(Long sirId); StGlassCakeOut getBySirId(Long sirId);
WorkOrder getByWoCode(String cardNo);
} }

@ -198,10 +198,4 @@
SELECT * FROM ST_GLASS_CAKE_OUT ${ew.customSqlSegment} SELECT * FROM ST_GLASS_CAKE_OUT ${ew.customSqlSegment}
</select> </select>
<select id="getByWoCode" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT *
FROM MES_WORK_ORDER
WHERE card_no = #{cardNo}
</select>
</mapper> </mapper>

@ -107,6 +107,7 @@ public class StExpireRecordServiceImpl extends BaseServiceImpl<StExpireRecordMap
} else { } else {
stock.setOutQuantity(stock.getQuantity()); stock.setOutQuantity(stock.getQuantity());
} }
stock.setIsScrap(1L);
stRealtimeStockService.updateById(stock); stRealtimeStockService.updateById(stock);
List<StRealtimeStock> stockList = Collections.singletonList(stock); List<StRealtimeStock> stockList = Collections.singletonList(stock);
@ -118,17 +119,15 @@ public class StExpireRecordServiceImpl extends BaseServiceImpl<StExpireRecordMap
record.setBfCode(bfCode); record.setBfCode(bfCode);
if (bfType == 1) { if (bfType == 1) {
stock.setIsScrap(1L);
stRealtimeStockService.updateById(stock);
// 到期维护报废:无需审批,直接设为「已审批」状态 // 到期维护报废:无需审批,直接设为「已审批」状态
record.setApprovalStatus(StOtherOutRecord.APPROVAL_STATUS_CHECKED); record.setApprovalStatus(StOtherOutRecord.APPROVAL_STATUS_CHECKED); // 审批字段在该表
record.setApprovalTime(new Date()); record.setApprovalTime(new Date()); // 可选:补充审批时间(已审批则赋值当前时间)
record.setApprover(user.getUserId()); record.setApprover(user.getUserId()); // 可选:补充审批人(当前用户)
record.setBfType(bfType); record.setBfType(bfType);
stOtherOutRecordService.addOtherOutRecord(record, stockList, user); stOtherOutRecordService.addOtherOutRecord(record, stockList, user);
} else { } else {
// 玻璃饼/归还报废:需要审批,设为「待审批」状态 // 玻璃饼/归还报废:需要审批,设为「待审批」状态
record.setApprovalStatus(StOtherOutRecord.APPROVAL_STATUS_CHECKING); record.setApprovalStatus(StOtherOutRecord.APPROVAL_STATUS_CHECKING); // 审批字段在该表
// 待审批状态:审批时间/审批人暂为空,审批通过后再赋值 // 待审批状态:审批时间/审批人暂为空,审批通过后再赋值
if(bfType == 2){ if(bfType == 2){
StReturnRecord stReturnRecord = stReturnRecordMapper.selectById(rrId); StReturnRecord stReturnRecord = stReturnRecordMapper.selectById(rrId);

@ -123,7 +123,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
// 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤) // 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤)
if (!CollectionUtils.isEmpty(allChildPartList)) { if (!CollectionUtils.isEmpty(allChildPartList)) {
glassCakePartList = allChildPartList.stream() glassCakePartList = allChildPartList.stream()
.filter(part -> "1".equals(part.getIsGlassCake())) .filter(part -> Boolean.TRUE.equals(part.getIsGlassCake()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }
@ -362,11 +362,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
// ============ 第三步:无数据 → 新增一条待出库数据 ============ // ============ 第三步:无数据 → 新增一条待出库数据 ============
StGlassCakeOutDTO dto = new StGlassCakeOutDTO(); StGlassCakeOutDTO dto = new StGlassCakeOutDTO();
dto.setCardNo(cardNo); dto.setCardNo(cardNo);
WorkOrder workOrder = baseMapper.getByWoCode(dto.getCardNo());
dto.setWoCode(workOrder.getWoCode());
List<StGlassCakeOut> stGlassCakeOutList = this.generatePreOutOrder(dto); List<StGlassCakeOut> stGlassCakeOutList = this.generatePreOutOrder(dto);
if (!CollectionUtils.isEmpty(stGlassCakeOutList)) { if (!CollectionUtils.isEmpty(stGlassCakeOutList)) {
for (StGlassCakeOut waitOut : stGlassCakeOutList) { for (StGlassCakeOut waitOut : stGlassCakeOutList) {

Loading…
Cancel
Save