diff --git a/so/META-INF/ClosesoUpdateBL.rest b/so/META-INF/ClosesoUpdateBL.rest
new file mode 100644
index 0000000..56b3de4
--- /dev/null
+++ b/so/META-INF/ClosesoUpdateBL.rest
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/Updateinformer.rest b/so/META-INF/Updateinformer.rest
new file mode 100644
index 0000000..49bf735
--- /dev/null
+++ b/so/META-INF/Updateinformer.rest
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/bipDelete.rest b/so/META-INF/bipDelete.rest
new file mode 100644
index 0000000..b4fca4d
--- /dev/null
+++ b/so/META-INF/bipDelete.rest
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/saleUpdateLJfh.rest b/so/META-INF/saleUpdateLJfh.rest
new file mode 100644
index 0000000..e32f48a
--- /dev/null
+++ b/so/META-INF/saleUpdateLJfh.rest
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/saleUpdateLJpc.rest b/so/META-INF/saleUpdateLJpc.rest
new file mode 100644
index 0000000..1896cc0
--- /dev/null
+++ b/so/META-INF/saleUpdateLJpc.rest
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/saleorder_saleinvoice.rest b/so/META-INF/saleorder_saleinvoice.rest
new file mode 100644
index 0000000..622cd8d
--- /dev/null
+++ b/so/META-INF/saleorder_saleinvoice.rest
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/sobill.rest b/so/META-INF/sobill.rest
new file mode 100644
index 0000000..e740ad8
--- /dev/null
+++ b/so/META-INF/sobill.rest
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/META-INF/updateSendQty.rest b/so/META-INF/updateSendQty.rest
new file mode 100644
index 0000000..931f0b7
--- /dev/null
+++ b/so/META-INF/updateSendQty.rest
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/so/src/public/nccloud/api/so/so/UpCdate/Updateinformer.java b/so/src/public/nccloud/api/so/so/UpCdate/Updateinformer.java
new file mode 100644
index 0000000..80b7d55
--- /dev/null
+++ b/so/src/public/nccloud/api/so/so/UpCdate/Updateinformer.java
@@ -0,0 +1,303 @@
+package nccloud.api.so.so.UpCdate;
+import nc.jdbc.framework.processor.MapListProcessor;
+import org.springframework.util.ObjectUtils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import nc.bs.dao.BaseDAO;
+import nc.bs.framework.common.NCLocator;
+import nc.itf.uap.IUAPQueryBS;
+import nc.jdbc.framework.JdbcSession;
+import nc.jdbc.framework.PersistenceManager;
+import nc.jdbc.framework.exception.DbException;
+import nc.jdbc.framework.processor.ArrayListProcessor;
+import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.vo.pub.BusinessException;
+import nccloud.api.rest.utils.ResultMessageUtil;
+import nccloud.ws.rest.resource.AbstractNCCRestResource;
+import org.json.JSONString;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import nc.itf.cm.productcostcollect.IProductCostCollectService;
+@Path("so/so/UpCdate")
+public class Updateinformer extends AbstractNCCRestResource {
+
+ @Override
+ public String getModule() {
+ return "so";
+ }
+
+ // ڴ洢ֹάıֶκֶ˵
+ private Map requiredFields;
+
+ // 췽ʼֶμ˵
+ public Updateinformer() {
+ // ʼֶбֶ˵
+ requiredFields = new HashMap<>();
+ requiredFields.put("pk_org", "ҵԪ");
+ requiredFields.put("array.vbillcode", "ݱ");
+ requiredFields.put("array.crowno", "к");
+ requiredFields.put("array.sendQty", "");
+ }
+
+ @POST
+ @Path("/Updateinformer")
+ @Consumes({"application/json"})
+ @Produces({"application/json"})
+ public JSONString Updateinformer(JSONString json) {
+ JSONObject returnJson = new JSONObject();
+ try {
+
+ JSONObject object = JSON.parseObject(json.toJSONString());
+ if (object == null) {
+ return ResultMessageUtil.exceptionToJSON(new NullPointerException("JSONString:null"));
+ }
+ // Уֶ
+// String tipsStr = checkRequiredFields(object);
+// if (!tipsStr.equals("")) {
+// return ResultMessageUtil.exceptionToJSON(new NullPointerException(tipsStr));
+// }
+ Object obj = object.getOrDefault("array", "");
+ if (obj.equals("")) {
+ return ResultMessageUtil.exceptionToJSON(new NullPointerException("array:null"));
+ }
+
+ ArrayList> arrayList = new ArrayList<>();
+ if (obj instanceof JSONArray) {
+ JSONArray jsonArray = (JSONArray) obj;
+ arrayList = new ArrayList<>(jsonArray.toJavaList(Object.class));
+ }
+// StringBuilder sqlStr = new StringBuilder();
+ List sqlStr = new ArrayList();
+ ArrayList pk_list=null;
+
+
+// for (int i = 0; i < arrayList.size(); i++) {
+// Map dataMap = (Map) arrayList.get(i);
+// pk_list.add((String) dataMap.get("pk_informer"));
+// }
+ String result = "";
+ StringBuilder sb = new StringBuilder();
+ if (arrayList.size() > 1) {
+ for (int i = 0; i < arrayList.size(); i++) {
+ Map dataMap = (Map) arrayList.get(i);
+
+ sb.append("'").append(dataMap.get("pk_informer")).append("'");
+ if (i < arrayList.size() - 1) {
+ sb.append(",");
+ }
+ }
+
+ result = sb.toString();
+ }else {
+ Map dataMap = (Map) arrayList.get(0);
+
+ result= "'"+(String) dataMap.get("pk_informer")+"'";
+
+ }
+ String sqlser="select pk_informer from cmp_informer where pk_informer in("+result+")";
+// ArrayList results = (ArrayList) getQueryService().executeQuery(sqlser, new ArrayListProcessor());
+ List