Commit 3210ea34 authored by 1650842865's avatar 1650842865

工序外协选择工单时可以根据编排单号查询勾选

parent da08a48d
var gridManager = null; var gridManager = null;
var orderItemGridManager = null; var orderItemGridManager = null;
var materialGridManager = null; var materialGridManager = null;
var gridManager = null;
var canEdit=true; var canEdit=true;
$(document).ready(function () { $(document).ready(function () {
...@@ -42,16 +43,59 @@ function loadOrderItemGrid() { ...@@ -42,16 +43,59 @@ function loadOrderItemGrid() {
toolbarOptions = UICtrl.getDefaultToolbarOptions({ toolbarOptions = UICtrl.getDefaultToolbarOptions({
// 添加一行表格 // 添加一行表格
addHandler: function () { addHandler: function () {
UICtrl.addGridRow(orderItemGridManager, UICtrl.showAjaxDialog({
{ title: '选择工单',
height: 400,
width: 1600,
url: web_app.name + '/processOutsource/showAddAufnrDetail.load',
ok: function(d){
var _self = this;
var rows = gridManager.getSelectedRows();
for (var i = 0 ;i<rows.length;i++){
var row = rows[i];
var dates = orderItemGridManager.getData();
if (dates != null && dates.length > 0){
for (let j = 0; j < dates.length; j++) {
var data = dates[j];
if (data.aufnr == row.AUFNR){
Public.tip("生产单号:"+row.AUFNR+" 已选择,请取消勾选!");
return false;
}
}
}
orderItemGridManager.addRow({
aufnr: row.AUFNR,
wempf: row.VORNR,
txz01: row.LTXA1,
productCode: row.PLNBEZ,
productName: row.MAKTX,
productType: row.MTART,
productTypeName: row.MTBEZ,
meins: row.MSEH3,
//meinsName: row.MSEHL,
meinsName: row.MSEH3,
menge: row.GAMNG,
printLoss: row.ZLOSSC,
// 行号加一 // 行号加一
sequence: (orderItemGridManager.getData().length + 1), sequence: (orderItemGridManager.getData().length + 1),
kpein: 1, kpein: 1,
waersTextView: "人民币", waersTextView: "人民币",
waers: "CNY" waers: "CNY"
});
} }
); _self.close();
},
});
// UICtrl.addGridRow(orderItemGridManager,
// {
// // 行号加一
// sequence: (orderItemGridManager.getData().length + 1),
// kpein: 1,
// waersTextView: "人民币",
// waers: "CNY"
//
// }
// );
}, },
// 删除 // 删除
deleteHandler: function () { deleteHandler: function () {
...@@ -67,6 +111,7 @@ function loadOrderItemGrid() { ...@@ -67,6 +111,7 @@ function loadOrderItemGrid() {
}); });
} }
}); });
// 表格 // 表格
orderItemGridManager = UICtrl.grid("#orderItemGrid", { orderItemGridManager = UICtrl.grid("#orderItemGrid", {
columns: getOrderColumns(), columns: getOrderColumns(),
...@@ -113,29 +158,29 @@ function getOrderColumns(){ ...@@ -113,29 +158,29 @@ function getOrderColumns(){
columns.push({display: "序号", name: "sequence", width: 50, minWidth: 60, type: "string", align: "left"},); columns.push({display: "序号", name: "sequence", width: 50, minWidth: 60, type: "string", align: "left"},);
columns.push({ columns.push({
display: "原工单", name: "aufnr", width: 200, minWidth: 60, type: "string", align: "left", display: "原工单", name: "aufnr", width: 200, minWidth: 60, type: "string", align: "left",
editor: { // editor: {
required: true, type: "select", // required: true, type: "select",
data: { // data: {
type: 'system', // type: 'system',
name: "dictionary", // name: "dictionary",
getParam: function (item) { // getParam: function (item) {
return {fieldName: "AUFNR"} // return {fieldName: "AUFNR"}
}, // },
back: { // back: {
AUFNR: "aufnr", // AUFNR: "aufnr",
VORNR: "wempf", // VORNR: "wempf",
LTXA1: "txz01", // LTXA1: "txz01",
PLNBEZ: "productCode", // PLNBEZ: "productCode",
MAKTX: "productName", // MAKTX: "productName",
MTART: "productType", // MTART: "productType",
MTBEZ: "productTypeName", // MTBEZ: "productTypeName",
MSEH3: "meins", // MSEH3: "meins",
MSEHL: "meinsName", // MSEHL: "meinsName",
GAMNG: "menge", // GAMNG: "menge",
ZLOSSC: "printLoss", // ZLOSSC: "printLoss",
} // }
} // }
} // }
}); });
columns.push({ columns.push({
display: "产品类别", name: "productTypeName", width: 140, minWidth: 60, type: "string", align: "left", display: "产品类别", name: "productTypeName", width: 140, minWidth: 60, type: "string", align: "left",
...@@ -148,23 +193,11 @@ function getOrderColumns(){ ...@@ -148,23 +193,11 @@ function getOrderColumns(){
},); },);
columns.push({ columns.push({
display: "工序号", name: "wempf", width: 140, minWidth: 60, type: "string", align: "left", display: "工序号", name: "wempf", width: 140, minWidth: 60, type: "string", align: "left",
editor: {
type: "text", required: true
}
},);
columns.push({
display: "工序描述", name: "txz01", width: 200, minWidth: 60, type: "string", align: "left",
editor: {
type: "text", required: true
}
},);
columns.push({
display: "下道工序", name: "txz02", width: 200, minWidth: 60, type: "string", align: "left",
editor: { editor: {
required: true, type: "select", required: true, type: "select",
data: { data: {
type: 'system', type: 'system',
name: "dictionary", name: "selectAufnr",
getParam: function (item) { getParam: function (item) {
return { return {
fieldName: "AUFNR", fieldName: "AUFNR",
...@@ -172,9 +205,24 @@ function getOrderColumns(){ ...@@ -172,9 +205,24 @@ function getOrderColumns(){
} }
}, },
back: { back: {
LTXA1: "txz02" VORNR: "wempf",
LTXA1: "txz01",
NEXTVORNR: "txz02",
MSEHL: "meinsName"
}
} }
} }
},);
columns.push({
display: "工序描述", name: "txz01", width: 200, minWidth: 60, type: "string", align: "left",
editor: {
type: "text", required: true
}
},);
columns.push({
display: "下道工序", name: "txz02", width: 200, minWidth: 60, type: "string", align: "left",
editor: {
type: "text", required: true
} }
},); },);
columns.push({ columns.push({
......
var gridManager = null, refreshFlag = false;
$(document).ready(function () {
initUI();
initGrid();
}
);
function initUI() {
UICtrl.initDefaultLayout();
}
function initGrid() {
var toolbarOptions = UICtrl.getDefaultToolbarOptions({
});
gridManager = UICtrl.grid('#aufnrgrid', {
columns: [
{
display: "工单号", name: "AUFNR", width: "100", align: "left", type: "string",
},
{
display: "产品类别", name: "MTART", width: "100", align: "left", type: "string",
},
{
display: "产品类别描述", name: "MTBEZ", width: "100", align: "left", type: "string",
},
{
display: "产品编码", name: "PLNBEZ", width: "300", align: "left", type: "string",
},
{
display: "产品名称", name: "MAKTX", width: "300", align: "left", type: "string",
},
// {
// display: "工序编号", name: "VORNR", width: "50", align: "left", type: "string",
// },
// {
// display: "工序描述", name: "LTXA1", width: "200", align: "left", type: "string",
// },
{
display: "工单数量", name: "GAMNG", width: "100", align: "left", type: "string",
},
{
display: "LOSS数", name: "ZLOSSC", width: "100", align: "left", type: "string",
},
{
display: "单位编码", name: "MSEH3", width: "100", align: "left", type: "string",
},
{
display: "单位描述", name: "MSEHL", width: "100", align: "left", type: "string",
},
],
dataAction: 'server',
url: web_app.name + '/processOutsource/queryAufnrFromMes.ajax?',
parms: {},
toolbar: toolbarOptions,
width: '99.8%',
height: 400,
pageSize: 20,
heightDiff: -4,
sortName: 'num',
sortOrder: 'asc',
checkbox: true,
usePager: false,
rownumbers: true,
enabledEdit: true,
fixedCellHeight: true,
selectRowButtonOnly: true,
enableObjectBag: true,
}
);
UICtrl.setSearchAreaToggle(gridManager);
}
function reloadGrid() {
gridManager.loadData();
}
function query(obj) {
var param = $(obj).formToJSON();
UICtrl.gridSearch(gridManager, param);
}
function resetForm(obj) {
$(obj).formClean();
reloadGrid();
}
<%@ page contentType="text/html; charset=utf-8" language="java" %>
<%@ taglib uri="/WEB-INF/taglib.tld" prefix="x" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<x:base include="layout,dialog,grid,tree,dateTime,combox,attachment,commonTree,comboDialog"/>
<script src='<c:url value="/biz/topsun/sap/processOutsource/showAddAufnrDetail.js"/>' type="text/javascript"></script>
</head>
<body>
<div class="container-fluid">
<div position="center" title="">
<form class="hg-form" method="post" action="" id="queryMainForm">
<div class="hg-form-row">
<x:inputC name="arrangeNo" label="编排单号" labelCol="1" fieldCol="2" required="true"/>
</div>
<x:searchButtons/>
</form>
</div>
<div id="aufnrgrid"></div>
</div>
</body>
\ No newline at end of file
...@@ -860,4 +860,50 @@ public class ResourceSearchController { ...@@ -860,4 +860,50 @@ public class ResourceSearchController {
return model; return model;
} }
@EasySearch(queryName = "selectAufnr")
public Map<String, Object> selectAufnr(SDO sdo) throws IOException {
String param = sdo.getString("paramValue");
String fieldName = sdo.getString("fieldName");
List<Map<String, String>> mapList = new ArrayList<>();
mapList = sapDictionaryApplication.getSapDictionary(fieldName, param);
if (CollectionUtil.isNotEmpty(mapList)) {
// 创建一个映射,方便根据 VORNR 快速查找对象
Map<String, Map<String, String>> vornrMap = new HashMap<>();
for (Map<String, String> item : mapList) {
vornrMap.put(item.get("VORNR"), item);
}
// 遍历数组,为每个对象添加 nextVornr 字段
for (Map<String, String> item : mapList) {
int currentVornr = Integer.parseInt(item.get("VORNR"));
int nextVornr = currentVornr + 10;
String nextVornrKey = String.format("%04d", nextVornr); // 补零到 4 位
// 查找下一个工序的 LTXA1 值
if (vornrMap.containsKey(nextVornrKey)) {
item.put("NEXTVORNR", vornrMap.get(nextVornrKey).get("LTXA1"));
} else {
item.put("NEXTVORNR", null); // 如果没有下一个工序,设置为 null
}
}
}
System.out.println("数据条数:" + mapList.size());
Integer intPage = sdo.getInteger("intPage", 1);
Integer pageSize = sdo.getInteger("pageSize", 10);
PageRequest pageRequest = new PageRequest(intPage - 1, pageSize);
EasySearchParse easySearchParse = new EasySearchParse();
List<QuerySchemeField> fields =
Arrays.asList(
new QuerySchemeField("工序号", "VORNR", "string", 50L),
new QuerySchemeField("工序描述", "LTXA1", "string", 100L),
new QuerySchemeField("下道工序描述", "NEXTVORNR", "string", 100L),
new QuerySchemeField("单位描述", "MSEHL", "hidden")
);
easySearchParse.setFields(fields);
easySearchParse.setWidth(500L);
MemEasySearcher<Map<String, String>> memEasySearcher = new MemEasySearcherImpl<>();
Map<String, Object> model = memEasySearcher.search(mapList, easySearchParse, pageRequest, null);
return model;
}
} }
...@@ -8,6 +8,7 @@ import com.huigou.util.StringUtil; ...@@ -8,6 +8,7 @@ import com.huigou.util.StringUtil;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
import org.apache.http.StatusLine; import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity; import org.apache.http.entity.StringEntity;
...@@ -100,6 +101,29 @@ public class DefaultHttpClient extends BaseApplication implements HttpClient { ...@@ -100,6 +101,29 @@ public class DefaultHttpClient extends BaseApplication implements HttpClient {
*/ */
@Override @Override
public String executeForMes(Object param,String url) throws IOException { public String executeForMes(Object param,String url) throws IOException {
MesHttpUrlMsg httpUrlMsg = this.getHttpUrlMsg(url);
return this.buildHttpClient(param, httpUrlMsg.getUrl(),httpUrlMsg.getUsernameAndPassword());
}
/**
* 访问MES系统的ip、上下文httpClient配置
* @param param 非JSON数据对象
* @param url 控制层地址
* @return 返回
* @throws IOException
*/
@Override
public String executeHttpGetForMes(Object param,String url) throws IOException {
MesHttpUrlMsg httpUrlMsg = this.getHttpUrlMsg(url);
return this.buildHttpGetClient(param, httpUrlMsg.getUrl(),httpUrlMsg.getUsernameAndPassword());
}
/**
* 返回URL拼接
* @param url
* @return
*/
public MesHttpUrlMsg getHttpUrlMsg(String url){
//系统接口地址 //系统接口地址
// ip地址 // ip地址
String ip = SystemCache.getParameter("mes.service.ip", String.class); String ip = SystemCache.getParameter("mes.service.ip", String.class);
...@@ -114,7 +138,7 @@ public class DefaultHttpClient extends BaseApplication implements HttpClient { ...@@ -114,7 +138,7 @@ public class DefaultHttpClient extends BaseApplication implements HttpClient {
.append(ip) .append(ip)
.append(applicationContext) .append(applicationContext)
.append(url); .append(url);
return this.buildHttpClient(param, String.valueOf(serverUrl),usernameAndPassword); return new MesHttpUrlMsg(String.valueOf(serverUrl),usernameAndPassword);
} }
/** /**
...@@ -153,4 +177,37 @@ public class DefaultHttpClient extends BaseApplication implements HttpClient { ...@@ -153,4 +177,37 @@ public class DefaultHttpClient extends BaseApplication implements HttpClient {
return responseText; return responseText;
} }
/**
*
* @param obj 非JSON数据对象
* @param serverUrl 服务拼接地址
* @param usernameAndPassword 用户名密码拼接
* @return
* @throws IOException
*/
public String buildHttpGetClient(Object obj,String serverUrl,String usernameAndPassword) throws IOException {
HttpGet get = new HttpGet(serverUrl);
get.setHeader("Content-type", "application/json;charset=utf-8");
//String usernameAndPassword = username + ":" + password;
if (StringUtil.isNotBlank(usernameAndPassword)){
get.addHeader("Authorization", "Basic " + Base64.getEncoder().encodeToString(usernameAndPassword.getBytes()));
}
LOG.info("post={}", get);
HttpResponse response;
String responseText = "";
try {
response = http.execute(get);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusLine.getStatusCode() < HttpStatus.SC_OK || statusLine.getStatusCode() >= HttpStatus.SC_MULTIPLE_CHOICES) {
throw new IOException(String.format("调用系统出错,statusCode=%s, %s", statusCode, statusLine.getReasonPhrase()));
}
responseText = EntityUtils.toString(response.getEntity(), "UTF-8");
LOG.info("responseText={}", responseText);
}finally {
get.releaseConnection();
}
return responseText;
}
} }
...@@ -21,4 +21,6 @@ public interface HttpClient { ...@@ -21,4 +21,6 @@ public interface HttpClient {
public String executeForEp(Object param,String url) throws IOException; public String executeForEp(Object param,String url) throws IOException;
public String executeForMes(Object param,String url) throws IOException; public String executeForMes(Object param,String url) throws IOException;
String executeHttpGetForMes(Object param, String url) throws IOException;
} }
package com.huigou.topsun.sap.common;
import lombok.Data;
/**
* @author xin.lu
* @Description: TODO
* @date 2025/3/311:38
*/
@Data
public class MesHttpUrlMsg {
private String url;
String usernameAndPassword;
public MesHttpUrlMsg(String url, String usernameAndPassword) {
this.url = url;
this.usernameAndPassword = usernameAndPassword;
}
}
...@@ -20,4 +20,10 @@ public interface ProcessOutsourceApplication { ...@@ -20,4 +20,10 @@ public interface ProcessOutsourceApplication {
ProcessOutsource loadProcessOutsource(String id); ProcessOutsource loadProcessOutsource(String id);
/**
* 根据编排单查询工单
* @param arrangeNo
* @return
*/
List<Map<String,String>> queryAufnrFromMes(String arrangeNo);
} }
...@@ -9,6 +9,7 @@ import com.huigou.data.query.model.QueryDescriptor; ...@@ -9,6 +9,7 @@ import com.huigou.data.query.model.QueryDescriptor;
import com.huigou.data.query.model.QueryModel; import com.huigou.data.query.model.QueryModel;
import com.huigou.topsun.sap.common.HttpClient; import com.huigou.topsun.sap.common.HttpClient;
import com.huigou.topsun.sap.common.application.SapMutualEpLogApplication; import com.huigou.topsun.sap.common.application.SapMutualEpLogApplication;
import com.huigou.topsun.sap.common.domain.MesResult;
import com.huigou.topsun.sap.common.domain.SapResult; import com.huigou.topsun.sap.common.domain.SapResult;
import com.huigou.topsun.sap.permit.application.SapPermitApplication; import com.huigou.topsun.sap.permit.application.SapPermitApplication;
import com.huigou.topsun.sap.permit.vo.SapPermitItemVo; import com.huigou.topsun.sap.permit.vo.SapPermitItemVo;
...@@ -339,5 +340,20 @@ public class ProcessOutsourceApplicationImpl extends FlowBroker implements Proce ...@@ -339,5 +340,20 @@ public class ProcessOutsourceApplicationImpl extends FlowBroker implements Proce
return processOutsourceRepository.findOne(id); return processOutsourceRepository.findOne(id);
} }
@Override
public List<Map<String,String>> queryAufnrFromMes(String arrangeNo) {
List<Map<String,String>> mapList = new ArrayList<>();
if (StringUtil.isNotBlank(arrangeNo)){
try {
String execute = httpClient.executeHttpGetForMes("", "v1/workOrder/saleListByArrangeCode?arrangeCode="+arrangeNo);
Map<String,Object> map = JSONObject.parseObject(execute, Map.class);
mapList = (List<Map<String,String>>)map.get("rows");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return mapList;
}
} }
...@@ -15,6 +15,7 @@ import com.huigou.util.SDO; ...@@ -15,6 +15,7 @@ import com.huigou.util.SDO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -99,5 +100,24 @@ public class ProcessOutsourceController extends CommonController { ...@@ -99,5 +100,24 @@ public class ProcessOutsourceController extends CommonController {
return success(); return success();
} }
/**
* 跳转到选择编排单-工单页面
* @return
*/
public String showAddAufnrDetail(){
return forward("showAddAufnrDetail");
}
/**
* 根据编排单查询工单
* @return
*/
public String queryAufnrFromMes(){
SDO sdo = this.getSDO();
ProcessOutsourceQueryRequest queryRequest = sdo.toQueryRequest(ProcessOutsourceQueryRequest.class);
List<Map<String,String>> mapList = processOutsourceApplication.queryAufnrFromMes(queryRequest.getArrangeNo());
return packGridDataAndResult(mapList);
}
} }
...@@ -45,4 +45,9 @@ public class ProcessOutsourceQueryRequest extends QueryAbstractRequest { ...@@ -45,4 +45,9 @@ public class ProcessOutsourceQueryRequest extends QueryAbstractRequest {
private Date fillinDateBegin; private Date fillinDateBegin;
private Date fillinDateEnd; private Date fillinDateEnd;
/**
* 编排单
*/
private String arrangeNo;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment