liweidong
liweidong-hj 23 hours ago
commit b880b1e220
  1. 7
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java
  2. 49
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java
  3. 10
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StRealtimeStock.java
  4. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/mapper/MeasuringUpkeepMapper.xml
  5. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  6. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/mapper/ProjectMilestoneMapper.xml
  7. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml

@ -138,7 +138,7 @@ public class PriceSheetVO {
* 镀种描述 * 镀种描述
*/ */
@Schema(description = "镀种描述") @Schema(description = "镀种描述")
private String coating_desc; private String coatingDesc;
/** /**
* 阶梯价计量单位 * 阶梯价计量单位
*/ */
@ -146,6 +146,9 @@ public class PriceSheetVO {
private String stairunit; private String stairunit;
@Schema(description = "金银价格") @Schema(description = "金银价格")
private String au_ag_price; private String auAgPrice;
@Schema(description = "标准工艺代码")
private String standardProcessCode;
} }

@ -89,6 +89,53 @@ public class PriceMatcher {
return false; return false;
} }
/**
* 判断备注是否包含目标价格
*/
private static boolean containsPriceNew(String remark, BigDecimal targetPrice) {
if(StringUtils.isEmpty(remark)){
return false;
}
// 正则表达式匹配价格范围或单价
// 匹配如:350.01-360、467.5、100.5-200.8
String regex = "(\\d+(?:\\.\\d+)?)(?:,(\\d+(?:\\.\\d+)?))?";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(remark);
while (matcher.find()) {
String startPriceStr = matcher.group(1);
String endPriceStr = matcher.group(2);
try {
if (endPriceStr != null) {
// 价格范围,如 "350.01-360"
BigDecimal startPrice = new BigDecimal(startPriceStr);
BigDecimal endPrice = new BigDecimal(endPriceStr);
// 检查目标价格是否在范围内
if (targetPrice.compareTo(startPrice) >= 0 &&
targetPrice.compareTo(endPrice) <= 0) {
return true;
}
} else {
// 单一价格,如 "467.5"
BigDecimal singlePrice = new BigDecimal(startPriceStr);
// 检查目标价格是否等于这个价格
if (targetPrice.compareTo(singlePrice) == 0) {
return true;
}
}
} catch (NumberFormatException e) {
// 解析失败,跳过这个匹配
continue;
}
}
return false;
}
/** /**
* 使用Stream API的版本 * 使用Stream API的版本
*/ */
@ -111,6 +158,6 @@ public class PriceMatcher {
* @return * @return
*/ */
public static boolean isContainsPrice(String remark, BigDecimal targetPrice) { public static boolean isContainsPrice(String remark, BigDecimal targetPrice) {
return containsPrice(remark, targetPrice); return containsPriceNew(remark, targetPrice);
} }
} }

@ -69,8 +69,8 @@ public class StRealtimeStock extends TenantEntity {
/** /**
* 过期/报废日期 * 过期/报废日期
*/ */
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(description = "过期/报废日期") @Schema(description = "过期/报废日期")
private Date scrapCycle; private Date scrapCycle;
/** /**
@ -194,6 +194,12 @@ public class StRealtimeStock extends TenantEntity {
@Schema(description = "出库数量") @Schema(description = "出库数量")
private Double outQuantity; private Double outQuantity;
/**
* 是否量具保养 0否 1是
*/
@Schema(description = "是否量具保养 0否 1是")
private Integer isMeasureMaintenance;
@TableField(exist = false) @TableField(exist = false)
private Long outRecordId; private Long outRecordId;

@ -93,6 +93,7 @@
<result column="balance_money" property="balanceMoney"/> <result column="balance_money" property="balanceMoney"/>
<result column="sum_num" property="sumNum"/> <result column="sum_num" property="sumNum"/>
<result column="stay_maintain_num" property="stayMaintainNum"/> <result column="stay_maintain_num" property="stayMaintainNum"/>
<result column="is_measure_maintenance" property="isMeasureMaintenance"/>
</resultMap> </resultMap>
<!-- 多表联合查询SQL --> <!-- 多表联合查询SQL -->
@ -104,14 +105,12 @@
st.sl_id, st.sl_id,
st.pi_no, st.pi_no,
st.quantity, st.quantity,
st.quantity_level,
st.balance_money, st.balance_money,
st.sum_num, st.sum_num,
st.stay_maintain_num,
g.goods_name, g.goods_name,
g.goods_code,
g.specifications, g.specifications,
sh.sh_name, sh.sh_name,
sl.location,
<!-- 状态名称可以通过CASE语句或字典表获取 --> <!-- 状态名称可以通过CASE语句或字典表获取 -->
CASE CASE
WHEN mmu.status = 0 THEN '新建' WHEN mmu.status = 0 THEN '新建'

@ -827,9 +827,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
} }
//涂色标、涂色带、涂箭头的报价集合 //涂色标、涂色带、涂箭头的报价集合
Map<String, List<PriceSheetVO>> coatingDescPriceSheetMap = priceSheetList.stream().filter(priceSheet -> { Map<String, List<PriceSheetVO>> coatingDescPriceSheetMap = priceSheetList.stream().filter(priceSheet -> {
String coatingDesc = priceSheet.getCoating_desc(); String coatingDesc = priceSheet.getCoatingDesc();
return coatingDesc != null && !coatingDesc.trim().isEmpty() && ("涂色标".equals(coatingDesc) || "涂色带".equals(coatingDesc) || "涂箭头".equals(coatingDesc)); return coatingDesc != null && !coatingDesc.trim().isEmpty() && ("涂色标".equals(coatingDesc) || "涂色带".equals(coatingDesc) || "涂箭头".equals(coatingDesc));
}).collect(Collectors.groupingBy(PriceSheetVO::getCoating_desc, Collectors.toList())); }).collect(Collectors.groupingBy(PriceSheetVO::getCoatingDesc, Collectors.toList()));
// 如果没有任何报价记录 // 如果没有任何报价记录
if (coatingDescPriceSheetMap.isEmpty()) { if (coatingDescPriceSheetMap.isEmpty()) {
//结算异常:无报价记录结算结果 //结算异常:无报价记录结算结果
@ -1759,7 +1759,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), ypCode); boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), ypCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price); match = PriceMatcher.isContainsPrice(sheet.getAuAgPrice(), price);
} }
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet); return setSettlementInfo(statementVO, sheet);
@ -1788,7 +1788,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getWono(), ypCode); boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getWono(), ypCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price); match = PriceMatcher.isContainsPrice(sheet.getAuAgPrice(), price);
} }
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet); return setSettlementInfo(statementVO, sheet);
@ -1817,7 +1817,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent); boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price); match = PriceMatcher.isContainsPrice(sheet.getAuAgPrice(), price);
} }
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet); return setSettlementInfo(statementVO, sheet);
@ -1845,7 +1845,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode); boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price); match = PriceMatcher.isContainsPrice(sheet.getAuAgPrice(), price);
} }
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet); return setSettlementInfo(statementVO, sheet);
@ -1874,9 +1874,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String prodIdent = statementVO.getProductIdent(); String prodIdent = statementVO.getProductIdent();
String ypCode = statementVO.getYpCode(); String ypCode = statementVO.getYpCode();
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), ypCode) boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), ypCode) && StringUtils.equals(sheet.getStandardProcessCode(), standardProcessCode);
// TODO 报价单标准工艺代码没加
&& StringUtils.equals(sheet.getWono(), standardProcessCode);
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet); return setSettlementInfo(statementVO, sheet);
} }
@ -1903,9 +1901,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String ocCode = statementVO.getOcCode(); String ocCode = statementVO.getOcCode();
String prodIdent = statementVO.getProductIdent(); String prodIdent = statementVO.getProductIdent();
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getStandardProcessCode(), standardProcessCode);
// TODO 报价单标准工艺代码没加
&& StringUtils.equals(sheet.getWono(), standardProcessCode);
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet); return setSettlementInfo(statementVO, sheet);
} }
@ -1933,11 +1929,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String ocCode = statementVO.getOcCode(); String ocCode = statementVO.getOcCode();
List<PriceSheetVO> colorPriceSheetVOS = new ArrayList<>(); List<PriceSheetVO> colorPriceSheetVOS = new ArrayList<>();
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getStandardProcessCode(), standardProcessCode);
// TODO 报价单标准工艺代码没加
&& StringUtils.equals(sheet.getWono(), standardProcessCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price); match = PriceMatcher.isContainsPrice(sheet.getAuAgPrice(), price);
} }
if (match) { if (match) {
if (hasColorCount(statementVO)) { if (hasColorCount(statementVO)) {
@ -2003,9 +1997,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
} }
//涂色标、涂色带、涂箭头的报价集合 //涂色标、涂色带、涂箭头的报价集合
Map<String, List<PriceSheetVO>> coatingDescPriceSheetMap = priceSheetList.stream().filter(priceSheet -> { Map<String, List<PriceSheetVO>> coatingDescPriceSheetMap = priceSheetList.stream().filter(priceSheet -> {
String coatingDesc = priceSheet.getCoating_desc(); String coatingDesc = priceSheet.getCoatingDesc();
return coatingDesc != null && !coatingDesc.trim().isEmpty() && ("涂色标".equals(coatingDesc) || "涂色带".equals(coatingDesc) || "涂箭头".equals(coatingDesc)); return coatingDesc != null && !coatingDesc.trim().isEmpty() && ("涂色标".equals(coatingDesc) || "涂色带".equals(coatingDesc) || "涂箭头".equals(coatingDesc));
}).collect(Collectors.groupingBy(PriceSheetVO::getCoating_desc, Collectors.toList())); }).collect(Collectors.groupingBy(PriceSheetVO::getCoatingDesc, Collectors.toList()));
// 如果没有任何报价记录 // 如果没有任何报价记录
if (coatingDescPriceSheetMap.isEmpty()) { if (coatingDescPriceSheetMap.isEmpty()) {
return false; return false;

@ -75,6 +75,7 @@
<if test = "fmProjectMilestone.milestoneNodeEnd != null and fmProjectMilestone.milestoneNodeEnd != ''"> <if test = "fmProjectMilestone.milestoneNodeEnd != null and fmProjectMilestone.milestoneNodeEnd != ''">
AND a.milestone_node <![CDATA[ <= ]]> to_date(concat(#{fmProjectMilestone.milestoneNodeEnd},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') AND a.milestone_node <![CDATA[ <= ]]> to_date(concat(#{fmProjectMilestone.milestoneNodeEnd},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS')
</if> </if>
and b.APPROVAL_STATUS not in ('0','1','2')
</where> </where>
order by a.update_time desc order by a.update_time desc
</select> </select>

@ -5,7 +5,10 @@
<select id="priceSheetData" resultType="org.springblade.desk.oem.pojo.vo.PriceSheetVO"> <select id="priceSheetData" resultType="org.springblade.desk.oem.pojo.vo.PriceSheetVO">
SELECT SELECT
a.* a.*,
a.coating_desc as coatingDesc,
a.AU_AG_PRICE as auAgPrice,
a.STANDARD_PROCESS_CODE as standardProcessCode
FROM FROM
dba_mgr.v_mes_rb_prtprice a dba_mgr.v_mes_rb_prtprice a
<where> <where>

Loading…
Cancel
Save