张江玮
2 years ago
13 changed files with 734 additions and 155 deletions
@ -0,0 +1,213 @@ |
|||
package org.nl.wms.sch.task.call.empty; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.nl.modules.common.exception.BadRequestException; |
|||
import org.nl.modules.wql.WQL; |
|||
import org.nl.modules.wql.core.bean.WQLObject; |
|||
import org.nl.wms.basedata.eum.TrueOrFalse; |
|||
import org.nl.wms.ext.acs.service.WmsToAcsService; |
|||
import org.nl.wms.sch.manage.*; |
|||
import org.nl.wms.sch.task.util.TaskUtils; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* @author zhangjiangwei |
|||
* @date 2023/04/28 15:27 |
|||
*/ |
|||
@RequiredArgsConstructor |
|||
@Component |
|||
public class FJCallEmptyTask extends AbstractAcsTask { |
|||
|
|||
private final WmsToAcsService wmsToAcsService; |
|||
|
|||
@Override |
|||
public void updateTaskStatus(JSONObject task, String status) { |
|||
if (TaskStatus.EXECUTING.value().equals(status)) { |
|||
task.put("task_status", TaskStatus.EXECUTING.value()); |
|||
TaskUtils.addACSUpdateColum(task); |
|||
WQLObject.getWQLObject("sch_base_task").update(task); |
|||
} else if (TaskStatus.FINISHED.value().equals(status)) { |
|||
this.finishTask(task, OperationType.AUTO); |
|||
} else if (TaskStatus.CANCELLED.value().equals(status)) { |
|||
this.cancelTask(task, OperationType.AUTO); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public String createTask(JSONObject form) { |
|||
JSONObject point = form.getJSONObject("point"); |
|||
JSONObject work_order = form.getJSONObject("workorder"); |
|||
|
|||
JSONObject task = TaskUtils.buildTask( |
|||
"分拣区叫空", |
|||
TaskType.CALL_EMPTY.value(), |
|||
TaskStatus.SURE_END.value(), |
|||
null, |
|||
point.getString("point_code"), |
|||
null, |
|||
null, |
|||
work_order.getString("vehicle_type"), |
|||
null, |
|||
TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1, |
|||
FJCallEmptyTask.class.getName(), |
|||
form.getString("create_mode"), |
|||
form.getString("request_param"), |
|||
form.getString("create_id"), |
|||
form.getString("create_name") |
|||
); |
|||
WQLObject.getWQLObject("sch_base_task").insert(task); |
|||
|
|||
point.put("lock_type", LockType.TASK_LOCKED.value()); |
|||
point.put("task_code", task.getString("task_code")); |
|||
TaskUtils.addFormUpdateColum(point, form); |
|||
WQLObject.getWQLObject("sch_base_point").update(point); |
|||
|
|||
return task.getString("task_code"); |
|||
} |
|||
|
|||
@Override |
|||
public void findStartPoint() { |
|||
WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); |
|||
JSONArray tasks = task_table |
|||
.query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + FJCallEmptyTask.class.getName() + "'", "priority DESC, create_time ASC") |
|||
.getResultJSONArray(0); |
|||
|
|||
if (ObjectUtil.isNotEmpty(tasks)) { |
|||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); |
|||
|
|||
for (int i = 0; i < tasks.size(); i++) { |
|||
JSONObject task = tasks.getJSONObject(i); |
|||
|
|||
JSONObject point = WQL |
|||
.getWO("CALL_EMPTY_TASK") |
|||
.addParam("flag", "4") |
|||
.addParam("vehicle_type", task.getString("vehicle_type")) |
|||
.process() |
|||
.uniqueResult(0); |
|||
|
|||
if (ObjectUtil.isNotEmpty(point)) { |
|||
JSONArray request_param = new JSONArray(); |
|||
request_param.add(point.getString("point_code")); |
|||
JSONObject result = wmsToAcsService.getTray(request_param); |
|||
if (!"200".equals(result.getString("status"))) { |
|||
continue; |
|||
} |
|||
|
|||
task.put("task_status", TaskStatus.START_AND_END.value()); |
|||
task.put("point_code1", point.getString("device_code")); |
|||
task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); |
|||
task.put("remark", ""); |
|||
TaskUtils.addAutoUpdateColum(task); |
|||
task_table.update(task); |
|||
|
|||
JSONObject update_point = new JSONObject(); |
|||
update_point.put("lock_type", LockType.TASK_LOCKED.value()); |
|||
update_point.put("task_code", task.getString("task_code")); |
|||
TaskUtils.addAutoUpdateColum(update_point); |
|||
point_table.update(update_point, "point_code = '" + point.getString("device_code") + "'"); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void forceFinish(String task_id) { |
|||
JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); |
|||
if (ObjectUtil.isEmpty(task)) { |
|||
throw new BadRequestException("未找到任务!"); |
|||
} |
|||
this.finishTask(task, OperationType.MANUAL); |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void cancel(String task_id) { |
|||
JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); |
|||
if (ObjectUtil.isEmpty(task)) { |
|||
throw new BadRequestException("未找到任务!"); |
|||
} |
|||
this.cancelTask(task, OperationType.MANUAL); |
|||
} |
|||
|
|||
public void cancelTask(JSONObject task, OperationType operation_type) { |
|||
if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { |
|||
task.put("task_status", TaskStatus.CANCELLED.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(task); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(task); |
|||
} |
|||
WQLObject.getWQLObject("sch_base_task").update(task); |
|||
|
|||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); |
|||
JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); |
|||
if (ObjectUtil.isNotEmpty(point1) |
|||
&& LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) |
|||
&& task.getString("task_code").equals(point1.getString("task_code"))) { |
|||
point1.put("lock_type", LockType.UNLOCKED.value()); |
|||
point1.put("task_code", ""); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point1); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point1); |
|||
} |
|||
point_table.update(point1); |
|||
} |
|||
|
|||
JSONObject point2 = new JSONObject(); |
|||
point2.put("lock_type", LockType.UNLOCKED.value()); |
|||
point2.put("task_code", ""); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point2); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point2); |
|||
} |
|||
point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); |
|||
} |
|||
} |
|||
|
|||
public void finishTask(JSONObject task, OperationType operation_type) { |
|||
if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { |
|||
task.put("task_status", TaskStatus.FINISHED.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(task); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(task); |
|||
} |
|||
WQLObject.getWQLObject("sch_base_task").update(task); |
|||
|
|||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); |
|||
JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); |
|||
if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) |
|||
&& task.getString("task_code").equals(point1.getString("task_code"))) { |
|||
point1.put("lock_type", LockType.UNLOCKED.value()); |
|||
point1.put("task_code", ""); |
|||
point1.put("vehicle_type", ""); |
|||
point1.put("vehicle_code", ""); |
|||
point1.put("point_status", PointStatus.EMPTY.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point1); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point1); |
|||
} |
|||
point_table.update(point1); |
|||
} |
|||
|
|||
JSONObject point2 = new JSONObject(); |
|||
point2.put("lock_type", LockType.UNLOCKED.value()); |
|||
point2.put("task_code", ""); |
|||
point2.put("vehicle_type", task.getString("vehicle_type")); |
|||
point2.put("vehicle_code", task.getString("vehicle_code")); |
|||
point2.put("point_status", PointStatus.NOT_EMPTY.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point2); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point2); |
|||
} |
|||
point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,287 @@ |
|||
package org.nl.wms.sch.task.send.material; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.nl.modules.common.exception.BadRequestException; |
|||
import org.nl.modules.wql.WQL; |
|||
import org.nl.modules.wql.core.bean.WQLObject; |
|||
import org.nl.wms.basedata.eum.TrueOrFalse; |
|||
import org.nl.wms.common.PickType; |
|||
import org.nl.wms.ext.acs.service.WmsToAcsService; |
|||
import org.nl.wms.sch.manage.*; |
|||
import org.nl.wms.sch.task.util.TaskUtils; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* @author zhangjiangwei |
|||
* @date 2023/04/28 12:33 |
|||
*/ |
|||
@RequiredArgsConstructor |
|||
@Component |
|||
public class FJSendMaterialTask extends AbstractAcsTask { |
|||
|
|||
private final WmsToAcsService wmsToAcsService; |
|||
|
|||
@Override |
|||
public void updateTaskStatus(JSONObject task, String status) { |
|||
if (TaskStatus.EXECUTING.value().equals(status)) { |
|||
task.put("task_status", TaskStatus.EXECUTING.value()); |
|||
TaskUtils.addACSUpdateColum(task); |
|||
WQLObject.getWQLObject("sch_base_task").update(task); |
|||
} else if (TaskStatus.FINISHED.value().equals(status)) { |
|||
this.finishTask(task, OperationType.AUTO); |
|||
} else if (TaskStatus.CANCELLED.value().equals(status)) { |
|||
this.cancelTask(task, OperationType.AUTO); |
|||
} |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public String createTask(JSONObject form) { |
|||
JSONObject point = form.getJSONObject("point"); |
|||
JSONObject work_order = form.getJSONObject("workorder"); |
|||
int priority = TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1; |
|||
JSONObject vd = form.getJSONObject("vd"); |
|||
|
|||
JSONObject pn = TaskUtils.buildPN(PickType.CP, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); |
|||
WQLObject.getWQLObject("das_produce_number").insert(pn); |
|||
|
|||
JSONObject material_task = TaskUtils.buildTask( |
|||
"分拣区送料", |
|||
TaskType.SEND_MATERIAL.value(), |
|||
TaskStatus.SURE_START.value(), |
|||
point.getString("point_code"), |
|||
null, |
|||
pn.getLongValue("data_id"), |
|||
vd.getString("material_id"), |
|||
vd.getString("vehicle_type"), |
|||
vd.getString("vehicle_code"), |
|||
priority, |
|||
FJSendMaterialTask.class.getName(), |
|||
form.getString("create_mode"), |
|||
form.getString("request_param"), |
|||
form.getString("create_id"), |
|||
form.getString("create_name") |
|||
); |
|||
WQLObject.getWQLObject("sch_base_task").insert(material_task); |
|||
|
|||
if (TrueOrFalse.trueOrFalse(vd.getString("is_full"))) { |
|||
JSONObject empty_task = TaskUtils.buildTask( |
|||
"分拣区叫空", |
|||
TaskType.CALL_EMPTY.value(), |
|||
TaskStatus.SURE_END.value(), |
|||
null, |
|||
point.getString("point_code"), |
|||
null, |
|||
null, |
|||
work_order.getString("vehicle_type"), |
|||
null, |
|||
priority, |
|||
FJSendMaterialTask.class.getName(), |
|||
form.getString("create_mode"), |
|||
form.getString("request_param"), |
|||
form.getString("create_id"), |
|||
form.getString("create_name") |
|||
); |
|||
empty_task.put("task_group_id", material_task.getLongValue("task_id")); |
|||
WQLObject.getWQLObject("sch_base_task").insert(empty_task); |
|||
} |
|||
|
|||
point.put("lock_type", LockType.TASK_LOCKED.value()); |
|||
point.put("task_code", material_task.getString("task_code")); |
|||
TaskUtils.addFormUpdateColum(point, form); |
|||
WQLObject.getWQLObject("sch_base_point").update(point); |
|||
|
|||
return material_task.getString("task_code"); |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void findNextPoint() { |
|||
WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); |
|||
JSONArray tasks = task_table |
|||
.query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + FJSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") |
|||
.getResultJSONArray(0); |
|||
|
|||
if (ObjectUtil.isNotEmpty(tasks)) { |
|||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); |
|||
WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); |
|||
|
|||
for (int i = 0; i < tasks.size(); i++) { |
|||
JSONObject material_task = tasks.getJSONObject(i); |
|||
|
|||
JSONObject vd = vd_table |
|||
.query("is_delete = '0' AND vehicle_type = '" + material_task.getString("vehicle_type") + "' AND vehicle_code = '" + material_task.getString("vehicle_code") + "'") |
|||
.uniqueResult(0); |
|||
if (ObjectUtil.isNotEmpty(vd)) { |
|||
JSONObject send_point = WQL |
|||
.getWO("SEND_MATERIAL_TASK") |
|||
.addParam("flag", "2") |
|||
.addParam("is_full", vd.getString("is_full")) |
|||
.process() |
|||
.uniqueResult(0); |
|||
|
|||
if (ObjectUtil.isNotEmpty(send_point)) { |
|||
material_task.put("task_status", TaskStatus.START_AND_END.value()); |
|||
material_task.put("point_code2", send_point.getString("point_code")); |
|||
material_task.put("remark", ""); |
|||
TaskUtils.addAutoUpdateColum(material_task); |
|||
|
|||
send_point.put("lock_type", LockType.TASK_LOCKED.value()); |
|||
send_point.put("task_code", material_task.getString("task_code")); |
|||
TaskUtils.addAutoUpdateColum(send_point); |
|||
|
|||
JSONObject empty_task = task_table |
|||
.query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + FJSendMaterialTask.class.getName() + "' AND task_group_id = " + material_task.getLongValue("task_id")) |
|||
.uniqueResult(0); |
|||
if (ObjectUtil.isNotEmpty(empty_task)) { |
|||
JSONObject fmj_point = WQL |
|||
.getWO("SEND_MATERIAL_TASK") |
|||
.addParam("flag", "3") |
|||
.addParam("vehicle_type", empty_task.getString("vehicle_type")) |
|||
.process() |
|||
.uniqueResult(0); |
|||
|
|||
if (ObjectUtil.isNotEmpty(fmj_point)) { |
|||
JSONArray request_param = new JSONArray(); |
|||
request_param.add(fmj_point.getString("point_code")); |
|||
JSONObject result = wmsToAcsService.getTray(request_param); |
|||
if (!"200".equals(result.getString("status"))) { |
|||
continue; |
|||
} |
|||
|
|||
empty_task.put("task_status", TaskStatus.START_AND_END.value()); |
|||
empty_task.put("point_code1", fmj_point.getString("device_code")); |
|||
empty_task.put("vehicle_code", TaskUtils.formatVehicleCode(fmj_point.getString("vehicle_code"))); |
|||
empty_task.put("remark", ""); |
|||
TaskUtils.addAutoUpdateColum(empty_task); |
|||
|
|||
JSONObject update_point = new JSONObject(); |
|||
update_point.put("lock_type", LockType.TASK_LOCKED.value()); |
|||
update_point.put("task_code", material_task.getString("task_code")); |
|||
TaskUtils.addAutoUpdateColum(update_point); |
|||
|
|||
task_table.update(material_task); |
|||
point_table.update(send_point); |
|||
task_table.update(empty_task); |
|||
point_table.update(update_point, "point_code = '" + fmj_point.getString("device_code") + "'"); |
|||
} |
|||
} else { |
|||
task_table.update(material_task); |
|||
point_table.update(send_point); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void forceFinish(String task_id) { |
|||
JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); |
|||
if (ObjectUtil.isEmpty(task)) { |
|||
throw new BadRequestException("未找到任务!"); |
|||
} |
|||
this.finishTask(task, OperationType.MANUAL); |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void cancel(String task_id) { |
|||
JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); |
|||
if (ObjectUtil.isEmpty(task)) { |
|||
throw new BadRequestException("未找到任务!"); |
|||
} |
|||
this.cancelTask(task, OperationType.MANUAL); |
|||
} |
|||
|
|||
|
|||
public void cancelTask(JSONObject task, OperationType operation_type) { |
|||
if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { |
|||
task.put("task_status", TaskStatus.CANCELLED.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(task); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(task); |
|||
} |
|||
WQLObject.getWQLObject("sch_base_task").update(task); |
|||
|
|||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); |
|||
JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); |
|||
if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) |
|||
&& task.getString("task_code").equals(point1.getString("task_code"))) { |
|||
point1.put("lock_type", LockType.UNLOCKED.value()); |
|||
point1.put("task_code", ""); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point1); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point1); |
|||
} |
|||
point_table.update(point1); |
|||
} |
|||
|
|||
JSONObject point2 = new JSONObject(); |
|||
point2.put("lock_type", LockType.UNLOCKED.value()); |
|||
point2.put("task_code", ""); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point2); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point2); |
|||
} |
|||
point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); |
|||
|
|||
if (TaskType.SEND_MATERIAL.value().equals(task.getString("task_type"))) { |
|||
WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("group_id")); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
public void finishTask(JSONObject task, OperationType operation_type) { |
|||
if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { |
|||
task.put("task_status", TaskStatus.FINISHED.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(task); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(task); |
|||
} |
|||
WQLObject.getWQLObject("sch_base_task").update(task); |
|||
|
|||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); |
|||
JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); |
|||
if (ObjectUtil.isNotEmpty(point1) |
|||
&& LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) |
|||
&& task.getString("task_code").equals(point1.getString("task_code"))) { |
|||
point1.put("lock_type", LockType.UNLOCKED.value()); |
|||
point1.put("task_code", ""); |
|||
point1.put("vehicle_type", ""); |
|||
point1.put("vehicle_code", ""); |
|||
point1.put("point_status", PointStatus.EMPTY.value()); |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point1); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point1); |
|||
} |
|||
point_table.update(point1); |
|||
} |
|||
|
|||
JSONObject point2 = new JSONObject(); |
|||
point2.put("lock_type", LockType.UNLOCKED.value()); |
|||
point2.put("task_code", ""); |
|||
if (TaskType.CALL_EMPTY.value().equals(task.getString("task_type"))) { |
|||
point2.put("vehicle_type", task.getString("vehicle_type")); |
|||
point2.put("vehicle_code", task.getString("vehicle_code")); |
|||
point2.put("point_status", PointStatus.NOT_EMPTY.value()); |
|||
} |
|||
if (operation_type == OperationType.AUTO) { |
|||
TaskUtils.addACSUpdateColum(point2); |
|||
} else if (operation_type == OperationType.MANUAL) { |
|||
TaskUtils.addCurrentUpdateColum(point2); |
|||
} |
|||
point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue