Browse Source

crm同步功能暂存

shenjingwei 1 month ago
parent
commit
c3b72a570a

+ 70 - 0
src/custom/common/crm/crm_pull.java

@@ -0,0 +1,70 @@
+package common.crm;
+
+import com.alibaba.fastjson.JSONObject;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import utility.mdcrmasync.methods.item;
+import utility.mdcrmasync.methods.sku;
+
+@Controller
+@RequestMapping("/rest/pull")
+public class crm_pull {
+
+//    @GetMapping("/pullMachinecodes")
+//    @ResponseBody
+//    public String pullMachinecodes(HttpServletRequest request, HttpServletResponse response, @RequestParam("fmachinecodes") String[] fmachinecodes, @RequestParam("returnMaxCount") String returnMaxCount, @RequestParam("token") String token) {
+//        if (fmachinecodes != null && fmachinecodes.length > 0) {
+//            return new utility.mdcrmasync.methods.sku().getSku(fmachinecodes).toString();
+//        } else {
+//            return new utility.mdcrmasync.methods.sku().getSku(returnMaxCount).toString();
+//        }
+//
+//    }
+
+    @GetMapping("/pullMachinecodes")
+    @ResponseBody
+    public String pullMachinecodes(HttpServletRequest request, HttpServletResponse response, @RequestParam("fmachinecodes") String[] fmachinecodes, @RequestParam("token") String token) {
+//        sku sku = new sku();
+//        JSONObject result = sku.getSku(fmachinecodes);
+//        try {
+//            sku.oneAction(fmachinecodes);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//
+//        return result.toString();
+        new sku().oneAction(fmachinecodes);
+        return getSuccessResult().toString();
+    }
+
+    @GetMapping("/pullAnyProducts")
+    @ResponseBody
+    public String pullAnyProducts(HttpServletRequest request, HttpServletResponse response, @RequestParam("fprodNums") String[] fprodNums, @RequestParam("isAllFields") String isAllFields, @RequestParam("token") String token) {
+//        item item = new item();
+//        JSONObject result = item.getItem(true, isAllFields.equals("true"), fprodNums);
+//        try {
+//            item.oneAction(fprodNums);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+        //  return result.toString();
+
+        new item().oneAction(fprodNums);
+        return getSuccessResult().toString();
+    }
+
+
+    public JSONObject getSuccessResult() {
+        JSONObject object = new JSONObject();
+        object.put("code", 1);
+        object.put("msg", "");
+        object.put("data", "");
+        object.put("uri", "");
+        return object;
+    }
+}

+ 21 - 0
src/custom/common/crm/crm_put.java

@@ -0,0 +1,21 @@
+package common.crm;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import utility.mdcrmasync.methods.icstockbill;
+
+@Controller
+@RequestMapping("/rest/put")
+public class crm_put {
+
+    @GetMapping("/confirmReceiveBill")
+    @ResponseBody
+    public String confirmReceiveBill(HttpServletRequest request, HttpServletResponse response, @RequestParam("fagentnum") String fagentnum, @RequestParam("fcrmbillnum") String fcrmbillnum, @RequestParam("icstockbillids") String[] icstockbillids, @RequestParam("token") String token) {
+        return new icstockbill().confirmReceiveBill(fagentnum, fcrmbillnum, icstockbillids).toString();
+    }
+}

+ 25 - 0
src/custom/objectregister/crm_datasync.java

@@ -0,0 +1,25 @@
+package objectregister;
+
+import common.annotation.Table;
+import common.annotation.TableCol;
+import common.data.db.initialization.base.YosObject;
+
+@Table(comment = "crm数据同步表", uniquecolumn = "id", issystem = false)
+public class crm_datasync extends YosObject {
+
+    @TableCol(title = "数据id", column_type = YosObject.ColumnType.bigint, is_nullable = false)
+    public Long ownerid;
+
+    @TableCol(title = "数据表", column_type = YosObject.ColumnType.varchar, numeric_precision = 50, is_nullable = false)
+    public String ownertable;
+
+    @TableCol(title = "最近修改时间", column_type = YosObject.ColumnType.datetime)
+    public String changedate;
+
+    @TableCol(title = "crm更新状态", column_type = ColumnType.integer)
+    public int status = 0;
+
+    @TableCol(title = "更新次数", column_type = ColumnType.integer)
+    public int count = 0;
+    
+}

+ 17 - 0
src/custom/utility/mdcrmasync/CRM.java

@@ -0,0 +1,17 @@
+package utility.mdcrmasync;
+
+public class CRM {
+    /**
+     * 查询类
+     */
+    public static class query {
+
+    }
+
+    /**
+     * 更新类
+     */
+    public static class update {
+
+    }
+}

+ 186 - 0
src/custom/utility/mdcrmasync/core/CrmBase.java

@@ -0,0 +1,186 @@
+package utility.mdcrmasync.core;
+
+import com.alibaba.fastjson.JSONObject;
+import common.BaseClass;
+import common.YosException;
+import common.data.Row;
+import common.data.Rows;
+import org.apache.logging.log4j.Logger;
+
+import javax.net.ssl.HttpsURLConnection;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Calendar;
+
+//1:从DRP更新账号(区域经理账号和经销商主账号)
+//2:同步DRP数据(营销区域)
+//3:每晚执行自动确认收货(N天以后)
+//4:同步CRM数据到DRP(序列号+保修卡+报货入库)
+
+public abstract class CrmBase extends BaseClass {
+    public HttpClient client;
+    private long sessionExpiresTime = 0L;
+
+    public static String baseurl = "http://192.168.3.16:8082/dmsService";
+    public static String clienturl = "http://192.168.3.16:8081/yos/";
+    public static String cookie = "";
+    public Logger logger;
+
+    public CrmBase(Logger logger) {
+        super();
+        this.logger = logger;
+    }
+
+    public CrmBase() {
+        super();
+    }
+
+    public void login() throws YosException {
+        try {
+            client = HttpClient.newHttpClient();
+            if (sessionExpiresTime < Calendar.getInstance().getTimeInMillis()) {
+                String formData = "username=" + URLEncoder.encode("meidaDrpSyncAdmin", StandardCharsets.UTF_8) + "&password=" + URLEncoder.encode("w123456", StandardCharsets.UTF_8) + "&fbrandId=" + URLEncoder.encode("1", StandardCharsets.UTF_8) + "&tokenParam=" + URLEncoder.encode("token=123456", StandardCharsets.UTF_8) + "&clientUrl=" + URLEncoder.encode(clienturl, StandardCharsets.UTF_8);
+
+                HttpRequest request = HttpRequest.newBuilder().uri(URI.create(baseurl + "/ext/login")).header("Content-Type", "application/x-www-form-urlencoded").POST(HttpRequest.BodyPublishers.ofString(formData)).build();
+                HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
+
+                boolean isSuccess = response.statusCode() == 200;
+                try {
+                    JSONObject resultObject = JSONObject.parseObject(response.body());
+                    //System.err.println(resultObject);
+                    if (!resultObject.getBooleanValue("success")) {
+                        isSuccess = false;
+                    } else {
+                        cookie = resultObject.getJSONObject("data").getString("cookie");
+                    }
+                } catch (Exception e) {
+                    isSuccess = false;
+                }
+                if (isSuccess) {
+                    sessionExpiresTime = System.currentTimeMillis() + 1000 * 60 * 10;
+                }
+            }
+        } catch (Exception e) {
+            throw new YosException(e);
+        }
+    }
+
+    public String postCRM(String content, String url) throws YosException {
+        login();
+        url = url.startsWith("/") ? url : ("/" + url);
+        PrintWriter writer = null;
+        BufferedReader reader = null;
+        StringBuilder result = new StringBuilder();
+        HttpURLConnection conn = null;
+
+        try {
+            URL realUrl = new URL(baseurl + url);
+            if (url.startsWith("https")) {
+                conn = (HttpsURLConnection) realUrl.openConnection();
+            } else {
+                conn = (HttpURLConnection) realUrl.openConnection();
+            }
+
+            conn.setRequestProperty("Content-Type", "application/json");
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Cookie", cookie);
+
+            conn.setConnectTimeout(3000);
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8));
+            writer.print(content);
+            writer.flush();
+            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+
+            String line;
+            while ((line = reader.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("[POST请求]向地址:" + url + " 发送数据:发生错误!");
+        } finally {
+            if (writer != null) {
+                writer.close();
+                PrintWriter var21 = null;
+            }
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                BufferedReader var22 = null;
+            }
+
+            if (conn != null) {
+                conn.disconnect();
+                conn = null;
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 根据规则批量执行
+     *
+     * @throws YosException
+     */
+    public abstract void autoAction() throws YosException;
+
+    //获取crm待同步数据
+    public ArrayList<crm_datasync> get(String title, String ownertable, int count) throws YosException {
+        ArrayList<crm_datasync> list = new ArrayList<>();
+        Rows rows = dbConnect.runSqlQuery("select max(id) id,ownerid from crm_datasync where ownertable='" + ownertable + "' and status=0 and count<10 group by ownerid limit " + count);
+        for (Row row : rows) {
+            list.add(new crm_datasync(title, row.getLong("id"), ownertable, row.getLong("ownerid")));
+        }
+        logger.info("监测到有【" + list.size() + "】个【" + title + "】 待同步至CRM");
+        return list;
+    }
+
+
+    public class crm_datasync {
+        public String title;
+        public long id;
+        public String ownertable;
+        public long ownerid;
+
+        public crm_datasync(String title, long id, String ownertable, long ownerid) throws YosException {
+            this.title = title;
+            this.id = id;
+            this.ownertable = ownertable;
+            this.ownerid = ownerid;
+            dbConnect.runSqlUpdate("update crm_datasync set count=count+1 where id=" + id);
+        }
+
+        public void suc() throws YosException {
+            ArrayList<String> sqlist = new ArrayList<>();
+            sqlist.add("update crm_datasync set status=1,changedate=now() where ownertable='" + ownertable + "' and id =" + id);
+            sqlist.add("delete from crm_datasync where ownertable='" + ownertable + "' and id <" + id + " and status=0");
+            dbConnect.runSqlUpdate(sqlist);
+            logger.info(title + " ownertable=" + ownertable + " ownerid=" + ownerid + " 同步成功!");
+        }
+
+        public void del() throws YosException {
+            dbConnect.runSqlUpdate("delete from crm_datasync where ownertable='" + ownertable + "'and id<=" + id + " and status=0");
+            logger.error(title + " ownertable=" + ownertable + " ownerid=" + ownerid + " 数据已不存在!");
+        }
+
+        public void fail(Object request, Object response) {
+            logger.error(title + " ownertable=" + ownertable + " ownerid=" + ownerid + " id:" + id + "同步失败! request:" + request + " response:" + response);
+        }
+
+    }
+}

+ 174 - 0
src/custom/utility/mdcrmasync/methods/icstockbill.java

@@ -0,0 +1,174 @@
+package utility.mdcrmasync.methods;
+
+import com.alibaba.fastjson.JSONObject;
+import common.YosException;
+import common.YosLogger;
+import common.data.*;
+import common.data.db.DBConnect;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import utility.mdcrmasync.core.CrmBase;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+
+public class icstockbill extends CrmBase {
+    public icstockbill(Logger logger) {
+        super(logger);
+    }
+
+    public icstockbill() {
+        super();
+    }
+
+    /**
+     * 超过30天的销售出库单自动收货
+     *
+     * @throws YosException
+     */
+    @Override
+    public void autoAction() throws YosException {
+        //到期自动收货确认
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DATE, -30);
+        String enddate = getDate_Str(calendar.getTime());
+
+        Rows billRows = dbConnect.runSqlQuery("select t1.st_stockbillid,count(t2.sku) mcodeqty from st_stockbill t1 \n" +
+                "inner join st_stockbill_items_sku t2 on t1.st_stockbillid=t2.st_stockbillid\n" +
+                "inner join sa_agents t3 on t1.sys_enterpriseid=t3.sys_enterpriseid and t3.type='普通'\n" +
+                "where t1.siteid='MD' and t1.type='销售出库'and t1.rb = 1 and t1.isreceiver = 0 and t1.status = '审核' and t1.iswx=0 and t1.checkdate>='2022-01-01' and t1.checkdate<'" + enddate + "' \n" +
+                "group by t1.st_stockbillid,t1.billno,t1.remarks,t1.checkdate,t3.agentnum\n" +
+                "order by t1.st_stockbillid desc\n" +
+                "limit 100");
+
+        QuerySQL itemQuery = SQLFactory.createQuerySQL(dbConnect, "st_stockbill_items", "st_stockbillid");
+        itemQuery.addQueryFields("itemqty", "sum(qty)");
+        itemQuery.addGroupBy("st_stockbillid");
+        itemQuery.setSiteid("MD").setWhere("skucontrol", true).setWhere("st_stockbillid", billRows.toArrayList("st_stockbillid"));
+        RowsMap itemRowsMap = itemQuery.query().toRowsMap("st_stockbillid");
+
+        for (Row billRow : billRows) {
+            long st_stockbillid = billRow.getLong("st_stockbillid");
+            if (itemRowsMap.containsKey(String.valueOf(st_stockbillid)) && itemRowsMap.get(String.valueOf(st_stockbillid)).get(0).getInteger("itemqty") == billRow.getInteger("mcodeqty")) {
+                oneAction(st_stockbillid);
+            }
+        }
+    }
+
+    /**
+     * 指定单据进行收货确认
+     *
+     * @param st_stockbillid
+     * @throws YosException
+     */
+    public void oneAction(long st_stockbillid) throws YosException {
+        Rows billRows = new DBConnect().runSqlQuery("select * from st_stockbill where st_stockbillid=" + st_stockbillid);
+        if (billRows.isEmpty()) {
+            throw new YosException("未找到该出库单");
+        }
+        Row billRow = billRows.get(0);
+        String billno = billRow.getString("billno");
+        String remarks = billRow.getString("remarks");
+        String checkdate = billRow.getString("checkdate");
+        String agentnum = billRow.getRow("sa_agents", "sys_enterpriseid=:sys_enterpriseid").getString("agentnum");
+
+        Rows detailRows = dbConnect.runSqlQuery("select itemno as fitemno,itemname as fitemname,model as fmodel,sum(qty)fqty from st_stockbill_items where st_stockbillid=" + st_stockbillid + " group by itemno,itemname,model");
+        Rows codeRows = dbConnect.runSqlQuery("select t2.itemno as fitemno,t1.sku as fmachinecode from st_stockbill_items_sku t1 inner join plm_item t2 on t1.itemid=t2.itemid where st_stockbillid=" + st_stockbillid);
+
+        JSONObject dataObject = new JSONObject();
+        dataObject.put("icstockbillid", st_stockbillid);
+        dataObject.put("fbillnum", billno);
+        dataObject.put("fnotes", remarks);
+        dataObject.put("fagentnum", agentnum);
+        dataObject.put("checkdate", checkdate);
+        dataObject.put("details", detailRows.toJsonArray());
+        dataObject.put("machinecodes", codeRows.toJsonArray());
+
+        String result = postCRM(dataObject.toJSONString(), "/ext/whicstockbill/confirmReceiveBill/1");
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        if (jsonObject.getBooleanValue("success")) {
+            logger.info("销售出库单" + billno + "自动收货成功");
+        } else {
+            logger.error("销售出库单" + billno + "自动收货失败;" + jsonObject);
+        }
+    }
+
+    /**
+     * 到货确认反馈
+     *
+     * @param fagentnum
+     * @param fcrmbillnum
+     * @param icstockbillids
+     * @return
+     */
+    public JSONObject confirmReceiveBill(String fagentnum, String fcrmbillnum, String[] icstockbillids) {
+        JSONObject resultObject = new JSONObject();
+        try {
+            QuerySQL billQuery = SQLFactory.createQuerySQL(new DBConnect(), "st_stockbill");
+            billQuery.setSiteid("MD").setWhere("st_stockbillid", icstockbillids);
+            Rows billRows = billQuery.query();
+
+            RowsMap billRowsMap = billRows.toRowsMap("st_stockbillid");
+
+            Rows agentrows = new DBConnect().runSqlQuery("select sa_agentsid from sa_agents where agentnum='" + fagentnum + "' and siteid='MD'");
+            if (agentrows.isEmpty()) {
+                resultObject.put("code", 0);
+                resultObject.put("status", "err");
+                resultObject.put("msg", "找不到编号为" + fagentnum + "的经销商");
+                return resultObject;
+            }
+            Rows stockrows = new DBConnect().runSqlQuery("select stockid from st_stock where stockno='00' and siteid='MD'");
+            if (stockrows.isEmpty()) {
+                resultObject.put("code", 0);
+                resultObject.put("status", "err");
+                resultObject.put("msg", "经销商仓00不存在");
+                return resultObject;
+            }
+
+            SQLDump sqlDump = new SQLDump();
+            for (String icstockbillid : icstockbillids) {
+                if (!billRowsMap.containsKey(icstockbillid)) {
+                    resultObject.put("code", 0);
+                    resultObject.put("msg", "找不到ID为" + icstockbillid + "的销售出库单");
+                    return resultObject;
+                }
+                Row billrow = billRowsMap.get(icstockbillid).get(0);
+                if (billrow.getBoolean("isreceiver")) {
+                    resultObject.put("code", 0);
+                    resultObject.put("msg", "销售出库单" + billrow.getString("billno") + "已收货确认,不可重复确认");
+                    return resultObject;
+                }
+                if (!billrow.getString("status").equals("审核")) {
+                    resultObject.put("code", 0);
+                    resultObject.put("msg", "销售出库单" + billrow.getString("billno") + "处于非审核状态,不可确认");
+                    return resultObject;
+                }
+
+                QuerySQL itemQuery = SQLFactory.createQuerySQL(new DBConnect(), "st_stockbill_items", "st_stockbillid");
+                itemQuery.addQueryFields("itemqty", "sum(qty)");
+                itemQuery.setSiteid("MD").setWhere("skucontrol", true).setWhere("st_stockbillid", icstockbillid);
+
+                int qty = new DBConnect().runSqlQuery("select sum(qty) as qty from st_stockbill_items where siteid='MD' and skucontrol=1 and st_stockbillid=" + icstockbillid).get(0).getInteger("qty");
+                ArrayList<String> skuList = new DBConnect().runSqlQuery("select sku from st_stockbill_items_sku where siteid='MD' and st_stockbillid=" + icstockbillid).toArrayList("sku");
+                if (qty != skuList.size()) {
+                    resultObject.put("code", 0);
+                    resultObject.put("msg", "销售出库单" + billrow.getString("billno") + ",序列号数量和商品数量不符");
+                    return resultObject;
+                }
+                sqlDump.add(SQLFactory.createUpdateSQL(new DBConnect(), "st_stockbill").setValue("isreceiver", true).setDateValue("receiverdate").setValue("crmbillno", fcrmbillnum).setValue("receiverby", "crm").setSiteid("MD").setWhere("st_stockbillid", icstockbillid));
+                sqlDump.add(SQLFactory.createUpdateSQL(new DBConnect(), "sa_itemsku").setValue("sa_agentsid", agentrows.get(0).getLong("sa_agentsid")).setValue("stockid", stockrows.get(0).getLong("stockid")).setSiteid("MD").setWhere("sku", skuList));
+            }
+            sqlDump.commit();
+            resultObject.put("msg", "");
+            resultObject.put("code", 1);
+        } catch (Exception e) {
+            resultObject.put("msg", e.getMessage());
+            resultObject.put("code", 0);
+        }
+        return resultObject;
+    }
+
+    public static void main(String[] args) throws YosException {
+        new icstockbill(LogManager.getLogger(YosLogger.class)).oneAction(2973233);
+    }
+}

+ 134 - 0
src/custom/utility/mdcrmasync/methods/item.java

@@ -0,0 +1,134 @@
+package utility.mdcrmasync.methods;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import common.YosException;
+import common.data.*;
+import common.data.db.DBConnect;
+import org.apache.logging.log4j.Logger;
+import utility.mdcrmasync.core.CrmBase;
+
+import java.util.ArrayList;
+
+public class item extends CrmBase {
+    DBConnect CRMDB = new DBConnect("CRM");
+
+    public item(Logger logger) {
+        super(logger);
+    }
+
+    public item() {
+        super();
+    }
+
+    @Override
+    public void autoAction() throws YosException {
+        ArrayList<crm_datasync> datasyncList = get("商品档案", "plm_item", 100);
+        for (crm_datasync datasync : datasyncList) {
+            QuerySQL querySQL = SQLFactory.createQuerySQL(dbConnect, "plm_item", "itemno").setTableAlias("t1");
+            querySQL.setWhere("t1.itemid", datasync.ownerid);
+            Rows itemRows = querySQL.query();
+            if (itemRows.isNotEmpty()) {
+                String itemno = itemRows.get(0).getString("itemno");
+                //判断crm是否已经存在该商品,如果存在则更新,不存在则新增
+                boolean isNew = false;
+                if (SQLFactory.createQuerySQL(CRMDB, "br_product").setWhere("fbrand_id", 1).setWhere("fprod_num", itemno).query().isEmpty()) {
+                    isNew = true;
+                }
+                JSONObject itemObject = getItem(isNew, false, itemno).getJSONArray("data").getJSONObject(0);
+
+                if (!itemObject.isEmpty()) {
+                    String result = postCRM(itemObject.toJSONString(), isNew ? "/ext/brproduct/addProduct" : "/ext/brproduct/updateProduct");
+                    JSONObject jsonObject = JSONObject.parseObject(result);
+                    if (jsonObject.getBooleanValue("success")) {
+                        datasync.suc();
+                    } else {
+                        datasync.fail(itemObject, jsonObject);
+                    }
+                }
+            } else {
+                datasync.del();
+            }
+        }
+    }
+
+    public void oneAction(String... itemnos) {
+        runTask("crm商品缺失,临时同步商品档案", () -> {
+            for (String itemno : itemnos) {
+                try {
+                    boolean isadd = false;
+                    if (SQLFactory.createQuerySQL(CRMDB, "br_product").setWhere("fbrand_id", 1).setWhere("fprod_num", itemnos).query().isEmpty()) {
+                        isadd = true;
+                    }
+
+                    JSONArray dataArray = getItem(isadd, false, itemno).getJSONArray("data");
+                    for (int i = 0; i < dataArray.size(); i++) {
+                        String itemObject = dataArray.getString(i);
+
+
+                        if (!dataArray.isEmpty()) {
+                            postCRM(dataArray.toJSONString(), "/ext/brproduct/batchSaveBrMachinecodes/1");
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+    public JSONObject getItem(boolean isNew, boolean isAllFields, String itemno) {
+        try {
+            QuerySQL querySQL = SQLFactory.createQuerySQL(new DBConnect(), "sa_itemsku");
+            querySQL.setSiteid("MD").setWhere("sku", itemno);
+            Rows skurows = querySQL.query();
+
+            RowsMap agentRowsMap = SQLFactory.createQuerySQL(new DBConnect(), "sa_agents").setWhere("sa_agentsid", skurows.toArrayList("sa_agentsid")).query().toRowsMap("sa_agentsid");
+
+            RowsMap itemRowsMap = SQLFactory.createQuerySQL(new DBConnect(), "plm_item").setWhere("itemid", skurows.toArrayList("itemid")).query().toRowsMap("itemid");
+            JSONArray array = new JSONArray();
+            for (Row skuRow : skurows) {
+                JSONObject object = new JSONObject();
+                object.put("fmechineCode", skuRow.getString("sku"));
+                object.put("fbrandId", 1);
+
+                if (agentRowsMap.containsKey(skuRow.getString("sa_agentsid"))) {
+                    object.put("fagentNum", agentRowsMap.get(skuRow.getString("sa_agentsid")).get(0).getString("agentnum"));
+                }
+                if (itemRowsMap.containsKey(skuRow.getString("itemid"))) {
+                    Row itemRow = itemRowsMap.get(skuRow.getString("itemid")).get(0);
+                    object.put("fprodNum", itemRow.getString("itemno"));
+                    object.put("fprodName", itemRow.getString("itemname"));
+                    object.put("fmodel", itemRow.getString("model"));
+                    object.put("funit", itemRow.getRow("plm_unit", "unitid=:unitid").getString("unitname"));
+                }
+                if (skuRow.getLong("stockid") > 0) {
+                    object.put("fstockNoDrp", skuRow.getRow("st_stock", "stockid=:stockid").getString("stockno"));
+                } else {
+                    object.put("fstockNoDrp", null);
+                }
+                object.put("fisvoid", skuRow.getString("status").equals("报废"));
+                object.put("fisyj", skuRow.getBoolean("fisyj"));
+                object.put("fisreturn", skuRow.getBoolean("isreturn"));
+                array.add(object);
+            }
+            JSONObject resultObject = new JSONObject();
+            resultObject.put("code", 1);
+            resultObject.put("msg", 1);
+            resultObject.put("data", array);
+            return resultObject;
+        } catch (Exception e) {
+            JSONObject resultObject = new JSONObject();
+            resultObject.put("code", 0);
+            resultObject.put("msg", e.getMessage());
+            resultObject.put("data", new JSONArray());
+            return resultObject;
+        }
+    }
+
+    public static void main(String[] args) throws YosException {
+        DBConnect crm = new DBConnect("CRM");
+        Rows rows1 = crm.runSqlQuery("select * from br_product");
+        System.err.println(rows1.toJsonArray());
+    }
+}

+ 59 - 0
src/custom/utility/mdcrmasync/methods/saleArea.java

@@ -0,0 +1,59 @@
+package utility.mdcrmasync.methods;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import common.YosException;
+import common.data.QuerySQL;
+import common.data.Rows;
+import common.data.SQLFactory;
+import org.apache.logging.log4j.Logger;
+import utility.mdcrmasync.core.CrmBase;
+
+import java.util.ArrayList;
+
+public class saleArea extends CrmBase {
+    public saleArea(Logger logger) {
+        super(logger);
+    }
+
+    @Override
+    public void autoAction() throws YosException {
+        //同步E-订单营销区域至CRM
+        ArrayList<crm_datasync> datasyncList = get("营销区域", "sa_salearea", 100);
+        for (crm_datasync datasync : datasyncList) {
+            JSONArray dataArray = new JSONArray();
+            QuerySQL querySQL = SQLFactory.createQuerySQL(dbConnect, "sa_salearea", "areanum", "areaname").setTableAlias("t1");
+            querySQL.addJoinTable(JOINTYPE.left, "sa_salearea", "t2", "t1.parentid = t2.sa_saleareaid", "areanum as upareanum");
+            querySQL.setWhere("t1.sa_saleareaid", datasync.ownerid);
+            Rows areaRows = querySQL.query();
+            if (areaRows.isNotEmpty()) {
+                JSONObject dataObject = new JSONObject();
+                dataObject.put("fareaNum", areaRows.get(0).getString("areanum"));
+                dataObject.put("fareaName", areaRows.get(0).getString("areaname"));
+                dataObject.put("fuparea", areaRows.get(0).getString("upareanum"));
+
+                QuerySQL salerQuery = SQLFactory.createQuerySQL(dbConnect, "sa_salearea_hr").setTableAlias("t1");
+                salerQuery.addJoinTable(JOINTYPE.inner, "sys_hr", "t2", "t1.hrid=t2.hrid");
+                salerQuery.addJoinTable(JOINTYPE.inner, "sys_users", "t3", "t2.userid=t3.userid", "accountno", "name", "status");
+                salerQuery.setWhere("t1.siteid", "MD").setWhere("sa_saleareaid", areaRows.get(0).getString("sa_saleareaid"));
+                Rows salerrows = salerQuery.query();
+                if (salerrows.isNotEmpty()) {
+                    dataObject.put("fsaler", salerrows.get(0).getString("accountno"));
+                    dataObject.put("fsalerName", salerrows.get(0).getString("name"));
+                    dataObject.put("status", salerrows.get(0).getString("status"));
+                }
+                dataObject.put("fbrandId", 1);
+                dataArray.add(dataObject);
+                String result = postCRM(dataArray.toJSONString(), "/ext/brSaleArea/batchSaveBrSaleAreas/1");
+                JSONObject jsonObject = JSONObject.parseObject(result);
+                if (jsonObject.getBooleanValue("success")) {
+                    datasync.suc();
+                } else {
+                    datasync.fail(dataObject, jsonObject);
+                }
+            } else {
+                datasync.del();
+            }
+        }
+    }
+}

+ 115 - 0
src/custom/utility/mdcrmasync/methods/sku.java

@@ -0,0 +1,115 @@
+package utility.mdcrmasync.methods;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import common.YosException;
+import common.data.*;
+import common.data.db.DBConnect;
+import org.apache.logging.log4j.Logger;
+import utility.mdcrmasync.core.CrmBase;
+
+import java.util.ArrayList;
+
+public class sku extends CrmBase {
+    public sku(Logger logger) {
+        super(logger);
+    }
+
+    public sku() {
+        super();
+    }
+
+    @Override
+    public void autoAction() throws YosException {
+        //同步E-订单序列号至CRM
+        ArrayList<crm_datasync> datasyncList = get("序列号", "sa_itemsku", 100);
+        for (crm_datasync datasync : datasyncList) {
+            QuerySQL querySQL = SQLFactory.createQuerySQL(dbConnect, "sa_itemsku", "sku").setTableAlias("t1");
+            querySQL.setWhere("t1.sa_itemskuid", datasync.ownerid);
+            Rows skuRows = querySQL.query();
+            if (skuRows.isNotEmpty()) {
+                JSONArray dataArray = getSku(skuRows.get(0).getString("sku")).getJSONArray("data");
+                if (!dataArray.isEmpty()) {
+                    String result = postCRM(dataArray.toJSONString(), "/ext/brproduct/batchSaveBrMachinecodes/1");
+                    JSONObject jsonObject = JSONObject.parseObject(result);
+                    if (jsonObject.getBooleanValue("success")) {
+                        datasync.suc();
+                    } else {
+                        datasync.fail(dataArray, jsonObject);
+                    }
+                }
+            } else {
+                datasync.del();
+            }
+        }
+    }
+
+    public void oneAction(String... skus) {
+        runTask("crm序列号缺失,临时同步序列号", () -> {
+            try {
+                JSONArray dataArray = getSku(skus).getJSONArray("data");
+                if (!dataArray.isEmpty()) {
+                    postCRM(dataArray.toJSONString(), "/ext/brproduct/batchSaveBrMachinecodes/1");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        });
+    }
+
+    /**
+     * crm拉取序列号
+     *
+     * @param fmachinecodes
+     * @return
+     */
+    public JSONObject getSku(String... fmachinecodes) {
+        try {
+            QuerySQL querySQL = SQLFactory.createQuerySQL(new DBConnect(), "sa_itemsku");
+            querySQL.setSiteid("MD").setWhere("sku", fmachinecodes);
+            Rows skurows = querySQL.query();
+
+            RowsMap agentRowsMap = SQLFactory.createQuerySQL(new DBConnect(), "sa_agents").setWhere("sa_agentsid", skurows.toArrayList("sa_agentsid")).query().toRowsMap("sa_agentsid");
+
+            RowsMap itemRowsMap = SQLFactory.createQuerySQL(new DBConnect(), "plm_item").setWhere("itemid", skurows.toArrayList("itemid")).query().toRowsMap("itemid");
+            JSONArray array = new JSONArray();
+            for (Row skuRow : skurows) {
+                JSONObject object = new JSONObject();
+                object.put("fmechineCode", skuRow.getString("sku"));
+                object.put("fbrandId", 1);
+
+                if (agentRowsMap.containsKey(skuRow.getString("sa_agentsid"))) {
+                    object.put("fagentNum", agentRowsMap.get(skuRow.getString("sa_agentsid")).get(0).getString("agentnum"));
+                }
+                if (itemRowsMap.containsKey(skuRow.getString("itemid"))) {
+                    Row itemRow = itemRowsMap.get(skuRow.getString("itemid")).get(0);
+                    object.put("fprodNum", itemRow.getString("itemno"));
+                    object.put("fprodName", itemRow.getString("itemname"));
+                    object.put("fmodel", itemRow.getString("model"));
+                    object.put("funit", itemRow.getRow("plm_unit", "unitid=:unitid").getString("unitname"));
+                }
+                if (skuRow.getLong("stockid") > 0) {
+                    object.put("fstockNoDrp", skuRow.getRow("st_stock", "stockid=:stockid").getString("stockno"));
+                } else {
+                    object.put("fstockNoDrp", null);
+                }
+                object.put("fisvoid", skuRow.getString("status").equals("报废"));
+                object.put("fisyj", skuRow.getBoolean("fisyj"));
+                object.put("fisreturn", skuRow.getBoolean("isreturn"));
+                array.add(object);
+            }
+            JSONObject resultObject = new JSONObject();
+            resultObject.put("code", 1);
+            resultObject.put("msg", 1);
+            resultObject.put("data", array);
+            return resultObject;
+        } catch (Exception e) {
+            JSONObject resultObject = new JSONObject();
+            resultObject.put("code", 0);
+            resultObject.put("msg", e.getMessage());
+            resultObject.put("data", new JSONArray());
+            return resultObject;
+        }
+    }
+}
+

+ 50 - 0
src/custom/utility/mdcrmasync/methods/user.java

@@ -0,0 +1,50 @@
+package utility.mdcrmasync.methods;
+
+import com.alibaba.fastjson.JSONObject;
+import common.YosException;
+import common.data.QuerySQL;
+import common.data.Rows;
+import common.data.SQLFactory;
+import org.apache.logging.log4j.Logger;
+import utility.mdcrmasync.core.CrmBase;
+
+import java.util.ArrayList;
+
+public class user extends CrmBase {
+    public user(Logger logger) {
+        super(logger);
+    }
+
+    @Override
+    public void autoAction() throws YosException {
+        //同步E-订单区域经理账号至CRM
+        ArrayList<crm_datasync> datasyncList = get("区域经理账号", "sys_users", 100);
+        for (crm_datasync datasync : datasyncList) {
+            QuerySQL querySQL = SQLFactory.createQuerySQL(dbConnect, "sys_users", "name", "accountno").setTableAlias("t1");
+            querySQL.addJoinTable(JOINTYPE.inner, "sys_usersite", "t2", "t1.userid = t2.userid");
+            querySQL.setWhere("t1.userid", datasync.ownerid);
+            querySQL.setWhere("t2.usertype", 2).setWhere("t2.siteid", "MD");
+            Rows userRow = querySQL.query();
+            if (userRow.isNotEmpty()) {
+                JSONObject dataObject = new JSONObject();
+                dataObject.put("username", userRow.get(0).getString("accountno"));
+                dataObject.put("name", userRow.get(0).getString("name"));
+                dataObject.put("password", "654321");
+                dataObject.put("state", 1);//人员状态:-2:异常,-1:已删除,0:停用,1:正常
+                dataObject.put("fagentNum", "meida");
+                dataObject.put("fbrandId", 1);
+                dataObject.put("userType", 16);
+                dataObject.put("fnotes", "根据E-订单账号表自动生成");
+                String result = postCRM(dataObject.toJSONString(), "/ext/bragent/registerAgentHr/regionalManager");
+                JSONObject jsonObject = JSONObject.parseObject(result);
+                if (jsonObject.getBooleanValue("success")) {
+                    datasync.suc();
+                } else {
+                    datasync.fail(dataObject, jsonObject);
+                }
+            } else {
+                datasync.del();
+            }
+        }
+    }
+}