opt:优化拣选数量计算

This commit is contained in:
2024-12-07 16:43:31 +08:00
parent 520d5ff283
commit f14147a0eb
4 changed files with 36 additions and 14 deletions

View File

@@ -16,6 +16,7 @@ import java.math.BigDecimal;
@Data
@ToString
public class TaskInfo {
//数量
private BigDecimal qty;
private String vehicle_code;
private String create_time;
@@ -25,7 +26,9 @@ public class TaskInfo {
private String material_name;
private String material_code;
private String material_spec;
//需出数量
private BigDecimal assign_qty;
//单重
private BigDecimal single_weight;
//理论数量
private BigDecimal theory_qty;
@@ -35,4 +38,5 @@ public class TaskInfo {
private BigDecimal remaining_qty;
private String form_data;
private String product_area;
private BigDecimal vehicle_weight;
}

View File

@@ -319,11 +319,17 @@ public class CockpitServiceImpl implements CockpitService {
BigDecimal theoryQty = BigDecimal.ZERO;
BigDecimal actual_weight = BigDecimal.ZERO;
try {
String code1 = code;
if ("1308".equals(code)) {
code1 = "1207";
} else if ("1311".equals(code)) {
code1 = "1210";
}
InteracteDto<Object> dto = InteracteDto.builder()
.service("wmsToAcsService")
.trace_id(MDC.get("trace_id"))
.type("getWeight")
.data(new JSONObject().fluentPut("device_code", code))
.data(new JSONObject().fluentPut("device_code", code1))
.build();
//查询称重重量
TableDataInfo result = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto));
@@ -334,7 +340,6 @@ public class CockpitServiceImpl implements CockpitService {
if (data != null && data.containsKey("weight")) {
String weightStr = data.getString("weight");
if (ObjectUtil.isNotEmpty(weightStr)) {
// 转换为 BigDecimal
actual_weight = new BigDecimal(weightStr.trim());
}
}
@@ -344,9 +349,10 @@ public class CockpitServiceImpl implements CockpitService {
log.error(ex.getMessage());
}
r.setActual_weight(actual_weight);
r.setActual_weight(r.getActual_weight().subtract(r.getVehicle_weight()).max(BigDecimal.ZERO).setScale(0, RoundingMode.DOWN));
//根据称重信息计算理论数量
if (r.getActual_weight().compareTo(BigDecimal.ZERO) > 0) {
//计算理论重量
if (r.getActual_weight().compareTo(BigDecimal.ZERO) > 0&&r.getSingle_weight().compareTo(BigDecimal.ZERO)> 0) {
//计算理论重量:称重-载具重量/单重 = 理论数量,理论数量!=需出数量:称重异常
theoryQty = r.getActual_weight().divide(r.getSingle_weight(), 0, RoundingMode.DOWN);
r.setActual_weight(r.getActual_weight().setScale(2, RoundingMode.DOWN));
}
@@ -354,8 +360,9 @@ public class CockpitServiceImpl implements CockpitService {
//计算剩余数量
BigDecimal remaining_qty = r.getQty().subtract(theoryQty).max(BigDecimal.ZERO).setScale(0, RoundingMode.DOWN);
r.setRemaining_qty(remaining_qty);
//小数点
//单重
r.setSingle_weight(r.getSingle_weight().setScale(2, RoundingMode.DOWN));
//需出数量
r.setAssign_qty(r.getAssign_qty().setScale(0, RoundingMode.DOWN));
r.setQty(r.getQty().setScale(0, RoundingMode.DOWN));
});

View File

@@ -51,6 +51,7 @@
</select>
<select id="getPickingTask" resultType="org.nl.wms.pda_manage.cockpit.service.dao.TaskInfo">
SELECT
b.weight as vehicle_weight,
p.`code` as task_type,
d.vehicle_code,
m.material_name,
@@ -65,6 +66,7 @@
ON d.parent_id = p.id
LEFT JOIN md_me_materialbase m
ON d.material_id = m.material_id
LEFT JOIN bm_vehicle_info b ON b.vehicle_code = d.vehicle_code
WHERE
JSON_UNQUOTE(JSON_EXTRACT(p.form_data, '$.point_code')) = #{code}
AND p.status = '10'

View File

@@ -60,8 +60,9 @@ public class SyncErpBillsScheduleService {
"PRD_PPBOM", "FPrdOrgId",
"PRD_MO", "FPrdOrgId",
"SAL_SaleOrder", "FStockOrgId",
"PUR_ReceiveBill", "FStockOrgId"
, "ka7c19edf9d4b4b39b8cc4a06802163b0", "F_PMSY_PrdOrgId");
"PUR_ReceiveBill", "FStockOrgId",
"PUR_MRAPP", "FPURCHASEORGID",
"ka7c19edf9d4b4b39b8cc4a06802163b0", "F_PMSY_PrdOrgId");
public void run() {
try {
@@ -69,8 +70,9 @@ public class SyncErpBillsScheduleService {
MDC.put("requestIp", "127.0.0.1");
MDC.put("requestTime", DateUtil.now());
LuceneAppender.traceIdTL.set(BaseCode.intToChars(IdUtil.getLongId()));
//List<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "BD_MATERIAL"));
List<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "ka7c19edf9d4b4b39b8cc4a06802163b0", "PRD_MO", "PUR_ReceiveBill", "PRD_PPBOM"));
// List<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "BD_MATERIAL"));
List<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "ka7c19edf9d4b4b39b8cc4a06802163b0","PRD_PPBOM","PRD_MO","SAL_SaleOrder","PUR_ReceiveBill","PUR_MRAPP"));
// List<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "ka7c19edf9d4b4b39b8cc4a06802163b0","PRD_PPBOM","PRD_MO","SAL_SaleOrder","PUR_ReceiveBill","PUR_MRAPP"));
for (SyncFormMapping m : list) {
JSONArray mappingJson = m.getMapping_json();
String mappingString = JSON.toJSONString(mappingJson);
@@ -79,6 +81,7 @@ public class SyncErpBillsScheduleService {
} finally {
LuceneAppender.traceIdTL.remove();
}
}
@@ -90,13 +93,18 @@ public class SyncErpBillsScheduleService {
IdentifyInfo identifyInfo = new IdentifyInfo();
BeanUtils.copyProperties(erpSec, identifyInfo);
K3CloudApi cloudApi = new K3CloudApi(identifyInfo);
//构建查询条件
// 获取当前日期
String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String filterString = BillOrg_Mapping.get(formType) + " ='750572' AND FDocumentStatus='C' ";
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -10);
String sevenDaysAgo = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
String filterString = BillOrg_Mapping.get(formType) + " = '750572' AND FDocumentStatus = 'C' ";
if ("ka7c19edf9d4b4b39b8cc4a06802163b0".equals(formType)) {
filterString += " AND F_PMSY_BillStatus ='A' AND F_PMSY_CreateDate >= '" + today + " 00:00:00' and F_PMSY_CreateDate <= '" + today + " 23:59:59' ";
filterString += " AND F_PMSY_BillStatus = 'A' AND F_PMSY_CreateDate >= '" + sevenDaysAgo + " 00:00:00' AND F_PMSY_CreateDate <= '" + today + " 23:59:59' ";
} else if ("SAL_SaleOrder".equals(formType)) {
filterString += " AND FCloseStatus ='A' AND FCreateDate >= '" + sevenDaysAgo + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59' ";
} else {
filterString += " AND FCreateDate >= '" + today + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59' ";
filterString += " AND FCreateDate >= '" + sevenDaysAgo + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59' ";
}
// if ("ka7c19edf9d4b4b39b8cc4a06802163b0".equals(formType)) {
// filterString += " AND F_PMSY_StockOrgId='750572' AND F_PMSY_BillStatus ='A' AND F_PMSY_CreateDate >= '2024-11-01 00:00:00' and F_PMSY_CreateDate <= '2024-12-04 23:59:59' ";
@@ -177,7 +185,7 @@ public class SyncErpBillsScheduleService {
}
}
public void syncData1(String mappingJson, String formType, Boolean dtlSplit) {
public void syncData2(String mappingJson, String formType, Boolean dtlSplit) {
boolean islock = lock.tryLock();
try {
if (islock) {
@@ -329,6 +337,7 @@ public class SyncErpBillsScheduleService {
List<PmFormData> formDataFilterList = formDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList());
for (PmFormData formData : formDataFilterList) {
formDataService.save(formData);
log.info("数据同步成功!");
}
}