package restcontroller.webmanage.sale.dispatch; import beans.data.BatchDeleteErr; import beans.datacontrllog.DataContrlLog; import beans.dispatch.Dispatch; import beans.parameter.Parameter; import beans.remind.Remind; import beans.report.Report; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.sun.codemodel.internal.JForEach; import common.Controller; import common.YosException; import common.annotation.API; import common.annotation.CACHEING; import common.annotation.CACHEING_CLEAN; import common.data.*; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import restcontroller.R; import restcontroller.sale.cashbill.cashbill; import restcontroller.webmanage.executorService.Executor; import restcontroller.webmanage.sale.order.Order; import restcontroller.webmanage.sale.order.OrderItems; import sun.awt.AWTIcon32_security_icon_yellow32_png; import utility.ERPDocking; import utility.tools.WebRequest; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import static java.time.LocalDate.now; /** * 发货单 */ @API(title = "发货单") public class dispatch extends Controller { private static Logger logger = Logger.getLogger(dispatch.class); public dispatch(JSONObject arg0) throws YosException { super(arg0); // TODO Auto-generated constructor stub } @API(title = "查询是否存在新建的发货单", apiversion = R.ID20240123163302.v1.class) public String query() throws YosException { Long sys_enterpriseid = content.getLongValue("sys_enterpriseid"); Long sa_orderid = content.getLongValue("sa_orderid"); Rows rows = dbConnect.runSqlQuery("SELECT * from sa_dispatch WHERE sys_enterpriseid=" + sys_enterpriseid + " and status='新建' and sa_orderid='" + sa_orderid + "' and siteid='" + siteid + "'"); return getSucReturnObject().setData(rows).toString(); } @API(title = "发货单新增更新", apiversion = R.ID20221114135203.v1.class, intervaltime = 200) @CACHEING_CLEAN(apiversions = {R.ID20221114135303.v1.class, R.ID20221114135403.v1.class, R.ID20230320160203.v1.class}) public String insertormodify_dispatch() throws YosException { ArrayList sqlList = new ArrayList<>(); // 表名 String tableName = "sa_dispatch"; Long sa_dispatchid = content.getLong("sa_dispatchid"); Long sa_orderid = content.getLong("sa_orderid"); // Long sys_enterpriseid = content.getLong("sys_enterpriseid"); // Long sa_logiscompid = content.getLong("sa_logiscompid"); // Long rec_contactsid = content.getLongValue("rec_contactsid"); String remarks = content.getStringValue("remarks"); String billdate = content.getStringValue("billdate"); SQLFactory sqlFactory = new SQLFactory(this, "发货单新增"); if (sa_dispatchid <= 0) { sa_dispatchid = createTableID(tableName); Rows rowsinfo = dbConnect .runSqlQuery("select contactsid from sys_enterprise_contacts where workaddress=1 and sys_enterpriseid=" + content.getLong("sys_enterpriseid")); if (rowsinfo.isEmpty()) { //return getErrReturnObject().setErrMsg("该订单不存在").toString(); } sqlFactory.addParameter("sa_orderid", sa_orderid); // 订货企业id sqlFactory.addParameter("sys_enterpriseid", content.getLong("sys_enterpriseid")); // 物流公司档案ID //sqlFactory.addParameter("sa_logiscompid", rowsinfo.get(0).getLong("sa_logiscompid")); // 合作企业联系人表ID(收货信息) if (!rowsinfo.isEmpty()) { sqlFactory.addParameter("rec_contactsid", rowsinfo.get(0).getLong("contactsid")); } else { sqlFactory.addParameter("rec_contactsid", 0); } //运费状态 sqlFactory.addParameter("freightstatus", ""); sqlFactory.addParameter("remarks", remarks); sqlFactory.addParameter("billdate", now()); sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "新增", "发货单新增成功").getSQL()); } else { Rows rows = dbConnect.runSqlQuery( "SELECT status,sys_enterpriseid,rec_contactsid,sa_orderid,freightstatus from sa_dispatch WHERE sa_dispatchid = " + sa_dispatchid); if (rows.isNotEmpty()) { if (rows.get(0).getString("status").equals("新建")) { //通过版本更新发货单表头数据 Dispatch.updateDispatchWithVersion(this); sqlFactory = new SQLFactory(this, "发货单更新"); if (sa_orderid <= 0) { sqlFactory.addParameter("sa_orderid", rows.get(0).getLong("sa_orderid")); // 订货企业id if (content.getLong("sys_enterpriseid") <= 0) { sqlFactory.addParameter("sys_enterpriseid", rows.get(0).getLong("sys_enterpriseid")); } else { sqlFactory.addParameter("sys_enterpriseid", content.getLong("sys_enterpriseid")); } // 物流公司档案ID // if (content.getLong("sa_logiscompid") <= 0) { // sqlFactory.addParameter("sa_logiscompid", rows.get(0).getLong("sa_logiscompid")); // } else { // sqlFactory.addParameter("sa_logiscompid", content.getLong("sa_logiscompid")); // } // 合作企业联系人表ID(收货信息) if (content.getLong("rec_contactsid") <= 0) { sqlFactory.addParameter("rec_contactsid", rows.get(0).getLong("rec_contactsid")); } else { sqlFactory.addParameter("rec_contactsid", content.getLong("rec_contactsid")); } } else { Rows rowsinfo = dbConnect.runSqlQuery( "select rec_contactsid,sys_enterpriseid from sa_order where sa_orderid=" + sa_orderid); if (rowsinfo.isEmpty()) { return getErrReturnObject().setErrMsg("该发货单不存在").toString(); } sqlFactory.addParameter("sa_orderid", sa_orderid); // 订货企业id sqlFactory.addParameter("sys_enterpriseid", rowsinfo.get(0).getLong("sys_enterpriseid")); // 物流公司档案ID //sqlFactory.addParameter("sa_logiscompid", rowsinfo.get(0).getLong("sa_logiscompid")); // 合作企业联系人表ID(收货信息) sqlFactory.addParameter("rec_contactsid", rowsinfo.get(0).getLong("rec_contactsid")); } //运费状态 if (!StringUtils.isBlank(content.getStringValue("freightstatus"))) { sqlFactory.addParameter("freightstatus", content.getStringValue("freightstatus")); } else { sqlFactory.addParameter("freightstatus", rows.get(0).getString("freightstatus")); } sqlFactory.addParameter("billdate", billdate); sqlFactory.addParameter("remarks", remarks); sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "更新", "发货单更新成功").getSQL()); } else { return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString(); } } else { return getErrReturnObject().setErrMsg("该发货单不存在").toString(); } } sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter("userid", userid); sqlFactory.addParameter("username", username); sqlFactory.addParameter("sa_dispatchid", sa_dispatchid); // 发货单号createBillCode("dispatchbillno") sqlFactory.addParameter("billno", createBillCode("dispatchbill")); sqlList.add(sqlFactory.getSQL()); dbConnect.runSqlUpdate(sqlList); content.put("sa_dispatchid", sa_dispatchid); return queryDispatchMain(); } @API(title = "发货单详情", apiversion = R.ID20221114135303.v1.class) @CACHEING public String queryDispatchMain() throws YosException { Long sa_dispatchid = content.getLong("sa_dispatchid"); SQLFactory sqlFactory = new SQLFactory(this, "发货单详情查询"); sqlFactory.addParameter("sa_dispatchid", sa_dispatchid); sqlFactory.addParameter("siteid", siteid); Rows rows = dbConnect.runSqlQuery(sqlFactory); Rows sum = dbConnect.runSqlQuery("select sum(t1.qty * t2.price) sumamount,sum(t1.qty) qty from sa_dispatch_items t1 inner join sa_orderitems t2 on t1.sa_orderitemsid = t2.sa_orderitemsid and t1.siteid = t2.siteid where t1.siteid='" + siteid + "' AND t1.sa_dispatchid=" + sa_dispatchid); Row row = rows.isNotEmpty() ? rows.get(0) : new Row(); if (sum.isNotEmpty()) { row.put("sumamount", sum.get(0).getBigDecimal("sumamount")); row.put("qty", sum.get(0).getBigDecimal("qty")); } //物流 // SQLFactory sqlFactory1 = new SQLFactory(this, "发货单-查询物流信息"); // sqlFactory1.addParameter("siteid", siteid); // sqlFactory1.addParameter("sa_dispatchid", sa_dispatchid); // Rows logiscompRows = dbConnect.runSqlQuery(sqlFactory1); // row.put("logiscomp", logiscompRows.isNotEmpty() ? logiscompRows.get(0) : new Row()); //收货 SQLFactory sqlFactory2 = new SQLFactory(this, "发货单-查询收货信息"); sqlFactory2.addParameter("siteid", siteid); sqlFactory2.addParameter("sa_dispatchid", sa_dispatchid); Rows recviceRows = dbConnect.runSqlQuery(sqlFactory2); row.put("recvice", recviceRows.isNotEmpty() ? recviceRows.get(0) : new Row()); return getSucReturnObject().setData(row).toString(); } @API(title = "查询发货单列表", apiversion = R.ID20221114135403.v1.class) public String queryDispatchList() throws YosException { StringBuffer where = new StringBuffer(" 1=1 "); if (content.containsKey("where")) { JSONObject whereObject = content.getJSONObject("where"); if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) { where.append(" and("); where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' "); where.append("or t3.sonum like'%").append(whereObject.getString("condition")).append("%' "); where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' "); where.append("or t7.agentnum like'%").append(whereObject.getString("condition")).append("%' "); where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' "); where.append("or t1.recheckby like'%").append(whereObject.getString("condition")).append("%' "); where.append(")"); } if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) { where.append(" and t1.status ='").append(whereObject.getString("status")).append("' "); } if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) { where.append(" and DATE_FORMAT(t1.billdate, '%Y-%m-%d') >='").append(whereObject.getString("begindate")).append("' "); } if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) { where.append(" and DATE_FORMAT(t1.billdate, '%Y-%m-%d') <='").append(whereObject.getString("enddate")).append("' "); } if (whereObject.containsKey("remarks") && !"".equals(whereObject.getString("remarks"))) { where.append("and t1.remarks like'%").append(whereObject.getString("remarks")).append("%' "); } if (whereObject.containsKey("agentinfo") && !"".equals(whereObject.getString("agentinfo"))) { where.append(" and("); where.append(" t2.enterprisename like'%").append(whereObject.getString("agentinfo")).append("%' "); where.append("or t7.agentnum like'%").append(whereObject.getString("agentinfo")).append("%' "); where.append(")"); } if (whereObject.containsKey("param") && !"".equals(whereObject.getString("param"))) { Rows rowsDispatchid = dbConnect.runSqlQuery("select t1.sa_dispatchid from sa_dispatch_items t1 left join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid " + "left join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid left join plm_item t4 on t1.itemid=t4.itemid and t1.siteid=t4.siteid where t1.siteid='" + siteid + "' and (t4.itemname like '%" + whereObject.getString("param") + "%' or t4.itemno like '%" + whereObject.getString("param") + "%' or t3.sonum='" + whereObject.getString("param") + "')"); if (rowsDispatchid.toJsonArray("sa_dispatchid").isEmpty()) { where.append(" and t1.sa_dispatchid in (0)"); } else { String str = rowsDispatchid.toJsonArray("sa_dispatchid").toJSONString(); str = str.replace("[", "(").replace("]", ")"); where.append(" and t1.sa_dispatchid in").append(str); } } if (whereObject.containsKey("sa_orderitemsid") && !"".equals(whereObject.getString("sa_orderitemsid"))) { Rows rowsDispatchid = dbConnect.runSqlQuery("select t1.sa_dispatchid from sa_dispatch_items t1 left join sa_dispatch t2 on t1.sa_dispatchid=t2.sa_dispatchid and t1.siteid=t2.siteid " + " where t2.status !='新建' and t1.siteid='" + siteid + "' and t1.sa_orderitemsid =" + whereObject.getLong("sa_orderitemsid") + ""); if (rowsDispatchid.toJsonArray("sa_dispatchid").isEmpty()) { where.append(" and t1.sa_dispatchid in (0)"); } else { String str = rowsDispatchid.toJsonArray("sa_dispatchid").toJSONString(); str = str.replace("[", "(").replace("]", ")"); where.append(" and t1.sa_dispatchid in").append(str); } } } // SQLFactory sqlFactory = new SQLFactory(this, "发货单列表查询", pageSize, pageNumber, pageSorting); // sqlFactory.addParameter("siteid", siteid); // sqlFactory.addParameter_SQL("where", where); // Rows rows = dbConnect.runSqlQuery(sqlFactory); QuerySQL querySQL = queryDispatchList(where.toString()); querySQL.setPage(pageSize, pageNumber); querySQL.setOrderBy(pageSorting); Rows rows = querySQL.query(); ArrayList ids = rows.toArrayList("sa_dispatchid", new ArrayList<>()); //查询数量金额 RowsMap dispatchAmountRowsMap = Dispatch.getDispatchAmountAndQty(this, ids); Rows reportRows = dbConnect.runSqlQuery("select sys_reportid from sys_report where (siteid is null or siteid='' or siteid='" + siteid + "') and systemappid=209"); ArrayList> viewCountList = new ArrayList<>(); for (Row reportRow : reportRows) { long sys_reportid = reportRow.getLong("sys_reportid"); HashMap viewCount = Report.getViewCount(this, sys_reportid, ids); viewCountList.add(viewCount); } // HashMap viewCount = Report.getViewCount(this, 82, ids); for (Row row : rows) { Long id = row.getLong("sa_dispatchid"); if (dispatchAmountRowsMap.get(id.toString()).isNotEmpty()) { row.put("sumamount", dispatchAmountRowsMap.get(id.toString()).get(0).getBigDecimal("sumamount")); row.put("sumqty", dispatchAmountRowsMap.get(id.toString()).get(0).getBigDecimal("sumqty")); } else { row.put("sumamount", 0); row.put("sumqty", 0); } Integer isreport = 0; for (HashMap viewCount : viewCountList) { if (viewCount.containsKey(id)) { isreport += viewCount.get(id); } } row.put("isreport", isreport); } return getSucReturnObject().setData(rows).toString(); } //查询发货单列表 public QuerySQL queryDispatchList(String where) throws YosException { QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_dispatch"); querySQL.setTableAlias("t1"); querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid", "enterprisename", "abbreviation"); querySQL.addQueryFields("enterprisephonenumber", "t2.phonenumber"); querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t3", "t1.sa_orderid = t3.sa_orderid AND t1.siteid = t3.siteid", "sonum"); querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t5", "t1.rec_contactsid = t5.contactsid AND t1.siteid = t5.siteid", "province", "city", "county", "address"); querySQL.addQueryFields("contactsphonenumber", "t5.phonenumber"); querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t7", "t7.sys_enterpriseid = t1.sys_enterpriseid AND t1.siteid = t7.siteid", "agentnum"); querySQL.setWhere("t1.siteid", siteid); querySQL.setWhere(where); return querySQL; } @API(title = "经销商列表查询(管理端)", apiversion = R.ID20230324125803.v1.class) public String query_agentList() throws YosException { /* * 过滤条件设置 */ StringBuffer where = new StringBuffer(" 1=1 "); if (content.containsKey("where")) { JSONObject whereObject = content.getJSONObject("where"); if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) { where.append(" and("); where.append("t4.agentnum like'%").append(whereObject.getString("condition")).append("%' "); where.append("or t3.enterprisename like'%").append(whereObject.getString("condition")).append("%' "); where.append(")"); } } SQLFactory sqlFactory = new SQLFactory(this, "经销商合作企业查询", pageSize, pageNumber, pageSorting); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter_SQL("where", where); Rows rows = dbConnect.runSqlQuery(sqlFactory); // QuerySQL querySQL = SQLFactory.createQuerySQL(this, "select distinct t2.sys_enterpriseid,t1.siteid from sa_orderitems t1\n" + // "inner join sa_order t2 on t1.siteid=t2.siteid and t1.sa_orderid=t2.sa_orderid\n" + // "where t1.siteid=$siteid$ and t2.status in ('审核','提交') and undeliqty>0","sys_enterpriseid"); // querySQL.setTableAlias("t1"); // querySQL.addJoinTable(JOINTYPE.inner, "sys_enterprise", "t3", "t3.sys_enterpriseid = t1.sys_enterpriseid and t3.siteid = t1.siteid", // "enterprisename", "contact","address","province","city","phonenumber","county"); // querySQL.addJoinTable(JOINTYPE.inner, "sa_agents", "t4", "t3.siteid = t4.siteid and t3.sys_enterpriseid = t4.sys_enterpriseid", // "agentnum"); // querySQL.setWhere("t1.siteid", siteid); // querySQL.setWhere(where.toString()); // querySQL.setWhere(" exists(select 1 from sa_orderitems where sa_orderid=t1.sa_orderid and undeliqty>0 )"); // querySQL.addGroupBy(" t1.sys_enterpriseid,\n" + // " t3.enterprisename,\n" + // " t3.contact,\n" + // " t3.address,\n" + // " t3.province,\n" + // " t3.city,\n" + // " t3.county,\n" + // " t3.phonenumber,\n" + // " t4.agentnum"); // querySQL.setOrderBy(pageSorting); // querySQL.setPage(pageSize, pageNumber); return getSucReturnObject().setData(rows).toString(); } @API(title = "删除", apiversion = R.ID20221114135503.v1.class) @CACHEING_CLEAN(apiversions = {R.ID20221114135303.v1.class, R.ID20221114135403.v1.class, R.ID20230320160203.v1.class}) public String delete() throws YosException { JSONArray sa_dispatchids = content.getJSONArray("sa_dispatchids"); BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_dispatchids.size()); for (Object o : sa_dispatchids) { long sa_dispatchid = Long.parseLong(o.toString()); Rows RowsStatus = dbConnect.runSqlQuery("select sa_dispatchid,status from sa_dispatch where siteid='" + siteid + "' and sa_dispatchid='" + sa_dispatchid + "'"); Rows logisticsRows = dbConnect.runSqlQuery("select * from sa_logistics_items where siteid='" + siteid + "' and sa_dispatchid='" + sa_dispatchid + "'"); if (RowsStatus.isNotEmpty()) { if (!RowsStatus.get(0).getString("status").equals("新建")) { batchDeleteErr.addErr(sa_dispatchid, "非新建状态的发货单无法删除"); continue; } } if (logisticsRows.isNotEmpty()) { batchDeleteErr.addErr(sa_dispatchid, "存在发货物流明细信息,无法删除"); continue; } dbConnect.runSqlUpdate( "delete from sa_dispatch where siteid='" + siteid + "' and sa_dispatchid=" + sa_dispatchid); } return batchDeleteErr.getReturnObject().toString(); } // @API(title = "审核", apiversion = R.ID20221114135603.v1.class) // @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class,cashbill.class}) // public String check() throws YosException { // Long sa_dispatchid = content.getLong("sa_dispatchid"); // Long sa_orderid = 0L; // Rows rows = dbConnect.runSqlQuery("select sa_dispatchid,status,billno,sa_orderid from sa_dispatch where sa_dispatchid ='" // + sa_dispatchid + "' and siteid='" + siteid + "'"); // if (rows.isEmpty()) { // return getErrReturnObject().setErrMsg("该发货单不存在") // .toString(); // } else { // sa_orderid = rows.get(0).getLong("sa_orderid"); // if (!rows.get(0).getString("status").equals("新建")) { // return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的发货单为非新建状态,无法审核") // .toString(); // } // } // // ArrayList sqlList = new ArrayList<>(); // Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatchid="+ sa_dispatchid+")" ); // RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid"); // Rows rowsDispatchDetail = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t1.rowno,t2.itemname from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid); // if (!rowsDispatchDetail.isEmpty()) { // for (Row row : rowsDispatchDetail) { // if (rowsMap.get(row.getString("sa_orderitemsid")).isEmpty()) { // return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细不存在对应得订单行,无法审核") // .toString(); // } // if (row.getBigDecimal("qty").compareTo(rowsMap.get(row.getString("sa_orderitemsid")).get(0).getBigDecimal("undeliqty")) == 1) { // return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细的数量大于对应订单行的未发货数量,无法审核") // .toString(); // } // sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").subtract(row.getBigDecimal("qty")) + ",deliedqty=" + (row.getBigDecimal("qty").add(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); // } // } // SQLFactory sqlFactoryupdate = new SQLFactory(this, "发货单审核"); // sqlFactoryupdate.addParameter("siteid", siteid); // sqlFactoryupdate.addParameter("sa_dispatchid", sa_dispatchid); // sqlFactoryupdate.addParameter("checkby", username); // sqlList.add(sqlFactoryupdate.getSQL()); // sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "审核", "发货单审核成功").getSQL()); // dbConnect.runSqlUpdate(sqlList); // // // Executor.sendEml(this, "dispatchrecheck", sa_dispatchid,new ArrayList<>()); // return getSucReturnObject().toString(); // // } // // @API(title = "反审核", apiversion = R.ID20221114135703.v1.class) @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class, cashbill.class}) public String uncheck() throws YosException { Long sa_dispatchid = content.getLong("sa_dispatchid"); //通过版本更新发货单表头数据 Dispatch.updateDispatchWithVersion(this); Long sa_orderid = 0L; Rows rows = dbConnect.runSqlQuery("select sa_dispatchid,status,billno,sa_orderid from sa_dispatch where sa_dispatchid ='" + sa_dispatchid + "' and siteid='" + siteid + "'"); if (rows.isEmpty()) { return getErrReturnObject().setErrMsg("该发货单不存在") .toString(); } else { sa_orderid = rows.get(0).getLong("sa_orderid"); if (!rows.get(0).getString("status").equals("审核")) { return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的发货单为非审核状态,无法反审核") .toString(); } } ArrayList sqlList = new ArrayList<>(); Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatchid=" + sa_dispatchid + ")"); RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid"); Rows rowsDispatchDetail = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t1.rowno,t2.itemname from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid); if (!rowsDispatchDetail.isEmpty()) { for (Row row : rowsDispatchDetail) { // if(rowsMap.get(row.getLong("sa_orderitemsid")).isEmpty()) { // return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细不存在对应得订单行,无法审核") // .toString(); // } // if(row.getBigDecimal("qty").compareTo(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty"))==1) { // return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细的数量大于对应订单行的未发货数量,无法审核") // .toString(); // } sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty")) + ",deliedqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty")) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); } } SQLFactory sqlFactoryupdate = new SQLFactory(this, "发货单反审核"); sqlFactoryupdate.addParameter("siteid", siteid); sqlFactoryupdate.addParameter("sa_dispatchid", sa_dispatchid); sqlFactoryupdate.addParameter("checkby", username); sqlList.add(sqlFactoryupdate.getSQL()); sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "反审核", "发货单反审核成功").getSQL()); dbConnect.runSqlUpdate(sqlList); return getSucReturnObject().toString(); } @API(title = "手工关闭", apiversion = R.ID20230404134703.v1.class) @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class, cashbill.class}) public String unclose() throws YosException { Long sa_dispatchid = content.getLong("sa_dispatchid"); Long sa_orderid = 0L; Rows rows = dbConnect.runSqlQuery("select sa_dispatchid,status,billno,sa_orderid,sys_enterpriseid from sa_dispatch where sa_dispatchid ='" + sa_dispatchid + "' and siteid='" + siteid + "'"); Rows rowsdetail = dbConnect.runSqlQuery("select cast(sa_dispatch_itemsid AS CHAR) as sa_dispatch_itemsid from sa_dispatch_items where sa_dispatchid ='" + sa_dispatchid + "' and siteid='" + siteid + "'"); if (rows.isEmpty()) { return getErrReturnObject().setErrMsg("该发货单不存在") .toString(); } else { sa_orderid = rows.get(0).getLong("sa_orderid"); if (!rows.get(0).getString("status").equals("复核")) { return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的发货单为非复核状态,无法手工关闭") .toString(); } } if (siteid.equalsIgnoreCase("lsa")) { Rows erp_urlrows = dbConnect.runSqlQuery("SELECT erp_url from sys_site_parameter WHERE siteid='" + siteid + "'"); if (erp_urlrows.isNotEmpty()) { String url = erp_urlrows.get(0).getString("erp_url"); if(!StringUtils.isBlank(url)){ JSONObject object = new JSONObject(); object.put("classname", "getIcinvbal"); object.put("method", "getIcstockbillMsg"); JSONObject content = new JSONObject(); content.put("sa_dispatch_itemsids", rowsdetail.toJsonArray("sa_dispatch_itemsid")); object.put("content", content); WebRequest request = new WebRequest(); String result = request.doPost(object.toString(), url); JSONArray jsonArray = new JSONArray(); if (isJSONArray(result)) { jsonArray = JSONArray.parseArray(result); } else { return getErrReturnObject().setErrMsg("与中间表连接异常") .toString(); } if (!jsonArray.isEmpty()) { return getErrReturnObject().setErrMsg("中间表存在未同步的销售出库单,无法手工关闭") .toString(); } // JSONObject object1 = new JSONObject(); object1.put("classname", "getIcinvbal"); object1.put("method", "canCloseSainvoiceByHand"); JSONObject content1 = new JSONObject(); content1.put("billno", rows.get(0).getString("billno")); object1.put("content", content1); String canCloseSainvoiceByHand = request.doPost(object1.toString(), url); if (!canCloseSainvoiceByHand.equals("true")) { return getErrReturnObject().setErrMsg("中间表状态不为1,无法手工关闭") .toString(); } } } } //对接erp生成erp发货单 if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") && !siteid.equalsIgnoreCase("lsa")) { ERPDocking erpDocking = new ERPDocking(siteid); if (!erpDocking.getUrl().isEmpty()) { String result = erpDocking.closeErpSainvoice(rows.get(0).getString("billno"), true, this, sa_dispatchid); if (!result.equals("true")) { return getErrReturnObject().setErrMsg(result).toString(); } else { JSONArray jsonArray = erpDocking.queryErpSainvoice(rows.get(0).getString("billno")); ArrayList dispatchsqlList = new ArrayList<>(); if (!jsonArray.isEmpty()) { for (Object object1 : jsonArray) { JSONObject jsonObject = (JSONObject) object1; dispatchsqlList.add("update sa_dispatch_items set outwarehouseqty=" + jsonObject.getBigDecimalValue("fqty1") + " where rowno =" + jsonObject.getIntValue("frownum") + " and sa_dispatchid='" + sa_dispatchid + "' and siteid='" + siteid + "'"); } } dbConnect.runSqlUpdate(dispatchsqlList); } } } ArrayList sqlList = new ArrayList<>(); Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatchid=" + sa_dispatchid + ")"); RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid"); Rows rowsDispatchDetail = dbConnect.runSqlQuery("select t1.qty,t1.outwarehouseqty,t1.sa_orderitemsid,t1.rowno,t2.itemname from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where ifnull(isclose,0)=0 and t1.sa_dispatchid=" + sa_dispatchid); Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty, sum(t1.outwarehouseqty) outwarehouseqty,t1.sa_orderitemsid,t1.siteid from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where ifnull(isclose,0)=0 and t1.sa_dispatchid=" + sa_dispatchid + " group by t1.sa_orderitemsid,t1.siteid"); if (!rowsDispatchDetail.isEmpty()) { for (Row row : rowsDispatchDetailGroup) { // if(rowsMap.get(row.getLong("sa_orderitemsid")).isEmpty()) { // return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细不存在对应得订单行,无法审核") // .toString(); // } // if(row.getBigDecimal("qty").compareTo(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty"))==1) { // return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细的数量大于对应订单行的未发货数量,无法审核") // .toString(); // } sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + ",deliedqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); } } Rows orderRows = dbConnect.runSqlQuery("select distinct t1.sa_orderid from sa_orderitems t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='" + siteid + "' and t2.sa_dispatchid=" + sa_dispatchid); for (Row row : orderRows) { //sqlList.add("update sa_order set status='审核' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='" + siteid + "'"); } SQLFactory sqlFactoryupdate = new SQLFactory(this, "发货单关闭"); sqlFactoryupdate.addParameter("siteid", siteid); sqlFactoryupdate.addParameter("sa_dispatchid", sa_dispatchid); sqlFactoryupdate.addParameter("closeby", username); sqlList.add(sqlFactoryupdate.getSQL()); sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "手工关闭", "发货单手工关闭成功").getSQL()); dbConnect.runSqlUpdate(sqlList); if (siteid.equalsIgnoreCase("lsa")) { Rows erp_urlrows = dbConnect.runSqlQuery("SELECT erp_url from sys_site_parameter WHERE siteid='" + siteid + "'"); if (erp_urlrows.isNotEmpty()) { String url = erp_urlrows.get(0).getString("erp_url"); if(!StringUtils.isBlank(url)){ JSONObject objectfeek = new JSONObject(); objectfeek.put("classname", "getIcinvbal"); objectfeek.put("method", "updateSainvoiceStatus"); JSONObject contentfeek = new JSONObject(); contentfeek.put("billno", rows.get(0).getString("billno")); objectfeek.put("content", contentfeek); WebRequest request = new WebRequest(); request.doPost(objectfeek.toString(), url); } } } sendRemind(rows.get(0).getLong("sys_enterpriseid"), sa_dispatchid); return getSucReturnObject().toString(); } @API(title = "行关闭", apiversion = R.ID20230522093703.v1.class) @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class, cashbill.class}) public String closeRows() throws YosException { JSONArray sa_dispatch_itemsids = content.getJSONArray("sa_dispatch_itemsids"); BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_dispatch_itemsids.size()); String sql = ""; if (sa_dispatch_itemsids.size() > 0) { sql = "select t1.sa_dispatch_itemsid,t1.sa_orderitemsid,t1.qty,t1.outwarehouseqty,t1.sa_dispatchid,t1.rowno,t3.itemno,t2.billno,t2.status,t1.isclose from sa_dispatch_items t1 left join sa_dispatch t2 on t1.sa_dispatchid=t2.sa_dispatchid and t1.siteid=t2.siteid left join plm_item t3 on t1.itemid=t3.itemid and t1.siteid=t3.siteid where t1.sa_dispatch_itemsid in" + sa_dispatch_itemsids.toJSONString() + " and t1.siteid='" + siteid + "'"; sql = sql.replace("[", "(").replace("]", ")"); } else { return getErrReturnObject().setErrMsg("请选择发货单行后,进行行关闭").toString(); } Rows rows = dbConnect.runSqlQuery(sql); if (rows.isEmpty()) { return getErrReturnObject().setErrMsg("该发货单所选行不存在") .toString(); } else { if (!rows.get(0).getString("status").equals("复核")) { return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的发货单为非复核状态,无法行关闭") .toString(); } } ArrayList sqlList = new ArrayList<>(); String orderdetailSql = "select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatch_itemsid in" + sa_dispatch_itemsids.toJSONString() + " )"; orderdetailSql = orderdetailSql.replace("[", "(").replace("]", ")"); Rows rowsOrderDetail = dbConnect.runSqlQuery(orderdetailSql); RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid"); for (Row row : rows) { //对接erp生成erp发货单 if (row.getBoolean("isclose")) { batchDeleteErr.addErr(row.getLong("sa_dispatch_itemsid"), "第" + row.getString("rowno") + "行的发货单明细已关闭,请勿重复关闭"); continue; } if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true")) { ERPDocking erpDocking = new ERPDocking(siteid); if (!erpDocking.getUrl().isEmpty()) { String result = erpDocking.closeErpSainvoiceRow(row.getString("billno"), this, row.getLong("rowno"), row.getString("itemno"), row.getLong("sa_dispatchid")); if (!result.equals("true")) { batchDeleteErr.addErr(row.getLong("sa_dispatch_itemsid"), result); continue; } else { sqlList.add("update sa_dispatch_items set isclose=1 where sa_dispatch_itemsid=" + row.getLong("sa_dispatch_itemsid")); sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + ",deliedqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); } } } } dbConnect.runSqlUpdate(sqlList); Rows sumcountRows = dbConnect.runSqlQuery("select count(1) sumcount from sa_dispatch_items where sa_dispatchid=" + rows.get(0).getLong("sa_dispatchid") + " and siteid='" + siteid + "'"); Rows closecountRows = dbConnect.runSqlQuery("select count(1) closecount from sa_dispatch_items where sa_dispatchid=" + rows.get(0).getLong("sa_dispatchid") + " and siteid='" + siteid + "' and isclose=1"); if (sumcountRows.get(0).getLong("sumcount") == closecountRows.get(0).getLong("closecount")) { if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true")) { ERPDocking erpDocking = new ERPDocking(siteid); if (!erpDocking.getUrl().isEmpty()) { String result = erpDocking.closeErpSainvoice(rows.get(0).getString("billno"), true, this, rows.get(0).getLong("sa_dispatchid")); if (!result.equals("true")) { return getErrReturnObject().setErrMsg(result).toString(); } else { dbConnect.runSqlUpdate("update sa_dispatch set status='手工关闭',closeby='" + username + "',closedate=CURRENT_TIMESTAMP where sa_dispatchid=" + rows.get(0).getLong("sa_dispatchid")); dbConnect.runSqlUpdate(DataContrlLog.createLog(this, "sa_dispatch", rows.get(0).getLong("sa_dispatchid"), "手工关闭", "发货单手工关闭成功").getSQL()); } } } } return batchDeleteErr.getReturnObject().toString(); } @API(title = "自动关闭(erp调用)", apiversion = R.ID20230413110103.v1.class, accesstoken = false) @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class, cashbill.class}) public String autoClose() throws YosException { String finvonum = content.getString("finvonum"); Rows rows = dbConnect.runSqlQuery("select * from sa_dispatch where status='复核' and siteid='CCYOSG' and billno='" + finvonum + "'"); Rows rowsdetail = dbConnect.runSqlQuery("select t1.* from sa_dispatch_items t1 inner join sa_dispatch t2 on t1.sa_dispatchid=t2.sa_dispatchid and t1.siteid=t2.siteid where t2.status='复核' and t1.siteid='CCYOSG'"); RowsMap rowsMap = rowsdetail.toRowsMap("sa_dispatchid"); ArrayList sqlList = new ArrayList<>(); ERPDocking erpDocking = new ERPDocking(siteid); if (!erpDocking.getUrl().isEmpty()) { for (Row row : rows) { String sa_dispatchid = row.getString("sa_dispatchid"); String billno = row.getString("billno"); String result = erpDocking.closeErpSainvoice(billno, false, this, row.getLong("sa_dispatchid")); if (result.equals("true")) { sqlList.add("update sa_dispatch set status='关闭' where sa_dispatchid='" + sa_dispatchid + "' and siteid='CCYOSG'"); SQLFactory sqlFactory = new SQLFactory(new DataContrlLog(), "数据操作日志新增"); sqlFactory.addParameter("ownertable", "sa_dispatch"); sqlFactory.addParameter("ownerid", sa_dispatchid); sqlFactory.addParameter("action", "自动关闭"); sqlFactory.addParameter("remarks", "发货单自动关闭成功"); sqlFactory.addParameter("actionuserid", "1"); sqlFactory.addParameter("actionby", "admin"); sqlFactory.addParameter("siteid", "CCYOSG"); sqlList.add(sqlFactory.getSQL()); } else { logger.info("发货单自动关闭错误:" + result); return getErrReturnObject().setErrMsg(result).toString(); } JSONArray jsonArray = erpDocking.queryErpSainvoice(billno); if (!jsonArray.isEmpty()) { for (Object object : jsonArray) { JSONObject jsonObject = (JSONObject) object; sqlList.add("update sa_dispatch_items set outwarehouseqty=" + jsonObject.getBigDecimalValue("fqty1") + " where rowno =" + jsonObject.getIntValue("frownum") + " and sa_dispatchid='" + sa_dispatchid + "' and siteid='CCYOSG'"); } } } dbConnect.runSqlUpdate(sqlList); } return getSucReturnObject().toString(); } @API(title = "复核", apiversion = R.ID20221114135803.v1.class) @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class, cashbill.class}) public String recheck() throws YosException { Long sa_dispatchid = content.getLong("sa_dispatchid"); Rows dispatchRows = dbConnect.runSqlQuery("select sa_dispatchid,status,billno,sa_orderid from sa_dispatch where sa_dispatchid ='" + sa_dispatchid + "' and siteid='" + siteid + "'"); if (dispatchRows.isEmpty()) { return getErrReturnObject().setErrMsg("该发货单不存在") .toString(); } else { if (!dispatchRows.get(0).getString("status").equals("新建")) { return getErrReturnObject().setErrMsg("单号为:【" + dispatchRows.get(0).getString("billno") + "】的发货单为非新建状态,无法复核") .toString(); } } ArrayList sqlList = new ArrayList<>(); Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatchid=" + sa_dispatchid + ")"); RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid"); Rows rowsDispatchDetail = dbConnect.runSqlQuery("select t1.qty,t1.sa_orderitemsid,t1.rowno,t2.itemname,t2.itemno from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid); Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid + " group by t1.sa_orderitemsid,t1.siteid"); Rows rowsDispatchAllDetail = dbConnect.runSqlQuery("select sum(t1.outwarehouseqty) sumoutwarehouseqty,t1.sa_orderitemsid from sa_dispatch_items t1 inner join sa_dispatch t2 on t1.sa_dispatchid=t2.sa_dispatchid and t1.siteid=t2.siteid where t2.status in('复核','关闭','手工关闭') and t1.sa_orderitemsid in(select sa_orderitemsid from sa_dispatch_items where sa_dispatchid="+sa_dispatchid+") group by t1.sa_orderitemsid"); RowsMap rowsDispatchAllDetailMap = rowsDispatchAllDetail.toRowsMap("sa_orderitemsid"); Rows rowscurrentDispatchDetail = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid,t2.itemno from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid + " group by t1.sa_orderitemsid,t1.siteid,t2.itemno"); Rows rowsDispatchDetailGroupByItem = dbConnect.runSqlQuery("select sum(t1.qty) qty,t2.itemno,ifnull(t1.batchno,'') batchno,0 invbalqty from sa_dispatch_items t1 inner join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid + " group by t2.itemno,ifnull(t1.batchno,'')"); RowsMap rowsMapDispatchDetailGroupByItem = rowsDispatchDetailGroupByItem.toRowsMap("itemno"); if (siteid.equalsIgnoreCase("lsa") && Parameter.get(siteid, "dispatchinstock").equals("1")) { JSONObject object = new JSONObject(); object.put("classname", "getIcinvbal"); object.put("method", "getMsg"); JSONObject content = new JSONObject(); content.put("fitemnos", rowsDispatchDetail.toJsonArray("itemno")); object.put("content", content); WebRequest request = new WebRequest(); String result = request.doPost(object.toString(), "http://60.190.151.198:8089/BYESB/jaxrs/webclientrest"); JSONArray jsonArray = new JSONArray(); if (isJSONArray(result)) { jsonArray = JSONArray.parseArray(result); } SQLFactory sqlFactory1 = new SQLFactory(this, "商品发货数量汇总"); sqlFactory1.addParameter("siteid", siteid); sqlFactory1.addParameter_in("itemno", rowsDispatchDetail.toArrayList("itemno", new ArrayList<>())); Rows sumQtyRows = dbConnect.runSqlQuery(sqlFactory1); RowsMap sumQtyRowsMap = sumQtyRows.toRowsMap("itemno"); for (Object obj : jsonArray) { JSONObject jsonObject = (JSONObject) obj; if (rowsMapDispatchDetailGroupByItem.containsKey(jsonObject.getString("fitemno"))) { if (rowsMapDispatchDetailGroupByItem.get(jsonObject.getString("fitemno")).isNotEmpty()) { rowsMapDispatchDetailGroupByItem.get(jsonObject.getString("fitemno")).get(0).put("invbalqty", jsonObject.getBigDecimalValue("FQty")); } else { rowsMapDispatchDetailGroupByItem.get(jsonObject.getString("fitemno")).get(0).put("invbalqty", 0); } } } for (Row row : rowsDispatchDetailGroupByItem) { if (sumQtyRowsMap.containsKey(row.getString("itemno"))) { row.put("delinvbalqty", (row.containsKey("invbalqty") ? row.getBigDecimal("invbalqty") : BigDecimal.ZERO).subtract(sumQtyRowsMap.get(row.getString("itemno")).get(0).getBigDecimal("qty"))); } else { row.put("delinvbalqty", row.containsKey("invbalqty") ? row.getBigDecimal("invbalqty") : BigDecimal.ZERO); } if (row.getBigDecimal("qty").compareTo(row.getBigDecimal("delinvbalqty")) > 0) { return getErrReturnObject().setErrMsg("发货商品" + row.getString("itemno") + ",库存不足,无法操作复核!") .toString(); } } } if (!siteid.equalsIgnoreCase("lsa") && Parameter.get(siteid, "dispatchinstock").equals("1")) { ERPDocking erpDocking = new ERPDocking(siteid); if (!erpDocking.getUrl().isEmpty()) { JSONArray jsonArray = erpDocking.getErpIcinvbalRows(200000, 1, rowsDispatchDetail.toJsonArray("itemno")); Rows rowsDispatchDetailBatchno = dbConnect.runSqlQuery("select t2.itemno,t1.batchno from sa_dispatch_items t1 inner join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where ifnull(t1.batchno,'')!='' and t1.sa_dispatchid=" + sa_dispatchid); for (Row row : rowsDispatchDetailBatchno) { JSONArray jsonArray1 = new JSONArray(); jsonArray1.add(row.getString("itemno")); JSONArray jsonArrayBatch = erpDocking.getErpIcinvbalBatchRowsforbatchno(20000, 1, jsonArray1, row.getString("batchno")); if (jsonArrayBatch.isEmpty()) { return getErrReturnObject().setErrMsg(row.getString("itemno") + "批号有误,请重新选择!!") .toString(); } else { if (rowsMapDispatchDetailGroupByItem.containsKey(row.getString("itemno"))) { if (rowsMapDispatchDetailGroupByItem.get(row.getString("itemno")).isNotEmpty()) { for (Row row1 : rowsMapDispatchDetailGroupByItem.get(row.getString("itemno"))) { if (row1.getString("batchno").equals(row.getString("batchno"))) { row1.put("invbalqty", ((JSONObject) jsonArrayBatch.get(0)).getBigDecimalValue("fqty")); } } } } } } SQLFactory sqlFactory1 = new SQLFactory(this, "商品发货数量汇总"); sqlFactory1.addParameter("siteid", siteid); sqlFactory1.addParameter_in("itemno", rowsDispatchDetail.toArrayList("itemno", new ArrayList<>())); Rows sumQtyRows = dbConnect.runSqlQuery(sqlFactory1); RowsMap sumQtyRowsMap = sumQtyRows.toRowsMap("itemno"); for (Object obj : jsonArray) { JSONObject jsonObject = (JSONObject) obj; if (rowsMapDispatchDetailGroupByItem.containsKey(jsonObject.getString("fitemno"))) { if (rowsMapDispatchDetailGroupByItem.get(jsonObject.getString("fitemno")).isNotEmpty()) { for (Row row : rowsMapDispatchDetailGroupByItem.get(jsonObject.getString("fitemno"))) { if (StringUtils.isBlank(row.getString("batchno"))) { row.put("invbalqty", jsonObject.getBigDecimalValue("fqty")); } } } } } for (Row row : rowsDispatchDetailGroupByItem) { if (sumQtyRowsMap.containsKey(row.getString("itemno"))) { RowsMap rowsMapByBatchno = sumQtyRowsMap.get(row.getString("itemno")).toRowsMap("batchno"); if (rowsMapByBatchno.containsKey(row.getString("batchno"))) { for (Row row1 : sumQtyRowsMap.get(row.getString("itemno"))) { if (row.getString("batchno").equals(row1.getString("batchno"))) { row.put("delinvbalqty", (row.containsKey("invbalqty") ? row.getBigDecimal("invbalqty") : BigDecimal.ZERO).subtract(row1.getBigDecimal("qty"))); } } } else { row.put("delinvbalqty", row.containsKey("invbalqty") ? row.getBigDecimal("invbalqty") : BigDecimal.ZERO); } } else { row.put("delinvbalqty", row.containsKey("invbalqty") ? row.getBigDecimal("invbalqty") : BigDecimal.ZERO); } if (row.getBigDecimal("qty").compareTo(row.getBigDecimal("delinvbalqty")) > 0) { return getErrReturnObject().setErrMsg("发货商品" + row.getString("itemno") + ",库存不足,无法操作复核!") .toString(); } } } } if (!rowscurrentDispatchDetail.isEmpty()) { for (Row row : rowscurrentDispatchDetail) { if (row.getBigDecimal("qty").compareTo(rowsMap.get(row.getString("sa_orderitemsid")).get(0).getBigDecimal("undeliqty")) == 1) { return getErrReturnObject().setErrMsg("【" + row.getString("itemno") + "】的发货单明细的发货数量超过未发量,无法复核") .toString(); } } } if (!rowsDispatchDetail.isEmpty()) { for (Row row : rowsDispatchDetail) { if (rowsMap.get(row.getString("sa_orderitemsid")).isEmpty()) { return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细不存在对应得订单行,无法复核") .toString(); } if (row.getBigDecimal("qty").compareTo(BigDecimal.ZERO) != 1) { return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细的数量小于等于0,无法复核") .toString(); } if (row.getBigDecimal("qty").compareTo(rowsMap.get(row.getString("sa_orderitemsid")).get(0).getBigDecimal("undeliqty")) == 1) { return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细的数量大于对应订单行的未发货数量,无法复核") .toString(); } if (!rowsDispatchAllDetailMap.get(row.getString("sa_orderitemsid")).isEmpty()) { if ((row.getBigDecimal("qty").add(rowsDispatchAllDetailMap.get(row.getString("sa_orderitemsid")).get(0).getBigDecimal("sumoutwarehouseqty"))).compareTo(rowsMap.get(row.getString("sa_orderitemsid")).get(0).getBigDecimal("qty")) == 1) { return getErrReturnObject().setErrMsg("行号为:【" + row.getString("rowno") + "】的发货单明细的总出库数量大于对应订单行的数量,无法复核") .toString(); } } //logger.info(new Date() +"复核测试:"+"update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").subtract(row.getBigDecimal("qty")) + ",deliedqty=" + (row.getBigDecimal("qty").add(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); //sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").subtract(row.getBigDecimal("qty")) + ",deliedqty=" + (row.getBigDecimal("qty").add(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); } } else { return getErrReturnObject().setErrMsg("该发货单明细不存在,无法复核").toString(); } Rows rows = dbConnect.runSqlQuery("select t1.*,t3.agentnum,t2.enterprisename,t4.sonum,t5.name,t5.phonenumber,t5.address from sa_dispatch t1 left join sys_enterprise t2 on t1.sys_enterpriseid=t2.sys_enterpriseid and t1.siteid=t2.siteid left join sa_agents t3 on t1.sys_enterpriseid=t3.sys_enterpriseid and t1.siteid=t3.siteid left join sa_order t4 on t1.sa_orderid=t4.sa_orderid and t1.siteid=t4.siteid left join sys_enterprise_contacts t5 on t1.rec_contactsid=t5.contactsid and t1.siteid=t5.siteid where t1.sa_dispatchid ='" + sa_dispatchid + "' and t1.siteid='" + siteid + "'"); Rows rowsdetail = dbConnect.runSqlQuery("select t3.sonum,t2.rowno sorowno,t4.itemno,t1.batchno,t1.rowno,t1.qty,t2.price,t1.remarks from sa_dispatch_items t1 left join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid left join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid left join plm_item t4 on t1.itemid=t4.itemid and t1.siteid=t4.siteid where t1.sa_dispatchid ='" + sa_dispatchid + "' and t1.siteid='" + siteid + "'"); SQLFactory sqlFactoryupdate = new SQLFactory(this, "发货单复核"); Rows orderRows = dbConnect.runSqlQuery("select distinct t1.sa_orderid from sa_orderitems t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='" + siteid + "' and t2.sa_dispatchid=" + sa_dispatchid); if (orderRows.size() == 1) { sqlList.add("update sa_dispatch set sa_orderid=" + orderRows.get(0).getLong("sa_orderid") + " where siteid='" + siteid + "' and sa_dispatchid=" + sa_dispatchid); } //对接erp生成erp发货单 if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true")) { ERPDocking erpDocking = new ERPDocking(siteid); if (!erpDocking.getUrl().isEmpty()) { String result = erpDocking.createErpSainvoice(rows.get(0), rowsdetail, this, sa_dispatchid); if (!result.equals("true")) { System.out.println(result); return getErrReturnObject().setErrMsg(result).toString(); } } } //对接erp成功后统一更新订单数量 for (Row row : rowsDispatchDetailGroup) { logger.info(new Date() + "复核测试:" + "update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").subtract(row.getBigDecimal("qty")) + ",deliedqty=" + (row.getBigDecimal("qty").add(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").subtract(row.getBigDecimal("qty")) + ",deliedqty=" + (row.getBigDecimal("qty").add(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); } // //判断当前订单是否已发完货,如果发完,则生把订单变为关闭状态 // //总数量 // Rows totalRows = dbConnect.runSqlQuery("select count(1) count,sa_orderid from sa_orderitems where siteid='" + siteid + "' group by sa_orderid"); // RowsMap totalRowsMap=totalRows.toRowsMap("sa_orderid"); // //已发完数量 // Rows deliRows = dbConnect.runSqlQuery("select count(1) count,sa_orderid from sa_orderitems where undeliqty=0 and siteid='" + siteid + "' group by sa_orderid"); // RowsMap deliRowsMap=deliRows.toRowsMap("sa_orderid"); // for (Row row:orderRows) { // if(totalRowsMap.containsKey(row.getString("sa_orderid")) && deliRowsMap.containsKey(row.getString("sa_orderid"))){ // if (totalRowsMap.get(row.getString("sa_orderid")).get(0).getLong("count") ==deliRowsMap.get(row.getString("sa_orderid")).get(0).getLong("count")) { // dbConnect.runSqlUpdate("update sa_order set status='关闭' where sa_orderid=" + row.getLong("sa_orderid") + " and siteid='" + siteid + "'"); // } // } // } // Executor.sendEml(this, "dispatchreccheck", sa_dispatchid,new ArrayList<>()); sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "复核", "发货单复核成功").getSQL()); sqlFactoryupdate.addParameter("siteid", siteid); sqlFactoryupdate.addParameter("sa_dispatchid", sa_dispatchid); sqlFactoryupdate.addParameter("recheckby", username); sqlList.add(sqlFactoryupdate.getSQL()); dbConnect.runSqlUpdate(sqlList); Long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid"); String message = "您的发货单" + rows.get(0).getString("billno") + "已复核,请及时查看!"; sendMsg(message, sa_dispatchid, sys_enterpriseid); return getSucReturnObject().toString(); } @API(title = "反复核", apiversion = R.ID20230720152503.v1.class) @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, dispatch.class, dispatchItems.class, cashbill.class}) public String unrecheck() throws YosException { //通过版本更新发货单表头数据 Dispatch.updateDispatchWithVersion(this); Long sa_dispatchid = content.getLong("sa_dispatchid"); Rows dispatchRows = dbConnect.runSqlQuery("select sa_dispatchid,status,billno,sa_orderid,sys_enterpriseid from sa_dispatch where sa_dispatchid ='" + sa_dispatchid + "' and siteid='" + siteid + "'"); if (dispatchRows.isEmpty()) { return getErrReturnObject().setErrMsg("该发货单不存在") .toString(); } else { if (!dispatchRows.get(0).getString("status").equals("复核")) { return getErrReturnObject().setErrMsg("单号为:【" + dispatchRows.get(0).getString("billno") + "】的发货单为非复核状态,无法反复核") .toString(); } } if (siteid.equalsIgnoreCase("lsa")) { JSONObject object = new JSONObject(); object.put("classname", "getIcinvbal"); object.put("method", "getSainvoiceMsg"); JSONObject content = new JSONObject(); content.put("billno", dispatchRows.get(0).getString("billno")); object.put("content", content); WebRequest request = new WebRequest(); String result = request.doPost(object.toString(), "http://60.190.151.198:8089/BYESB/jaxrs/webclientrest"); if (result.equals("true")) { return getErrReturnObject().setErrMsg("K3发货单为非删除状态,无法反复核") .toString(); } } ArrayList sqlList = new ArrayList<>(); Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from sa_dispatch_items where sa_dispatchid=" + sa_dispatchid + ")"); RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid"); Rows rowsDispatchDetail = dbConnect.runSqlQuery("select t1.qty,t1.outwarehouseqty,t1.sa_orderitemsid,t1.rowno,t2.itemname from sa_dispatch_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_dispatchid=" + sa_dispatchid); if (!rowsDispatchDetail.isEmpty()) { for (Row row : rowsDispatchDetail) { sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + ",deliedqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty").subtract(row.getBigDecimal("outwarehouseqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid")); } } else { return getErrReturnObject().setErrMsg("该发货单明细不存在,无法复核").toString(); } SQLFactory sqlFactoryupdate = new SQLFactory(this, "发货单复核"); Rows orderRows = dbConnect.runSqlQuery("select distinct t1.sa_orderid from sa_orderitems t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='" + siteid + "' and t2.sa_dispatchid=" + sa_dispatchid); sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "反复核", "发货单反复核成功").getSQL()); sqlFactoryupdate.addParameter("siteid", siteid); sqlFactoryupdate.addParameter("sa_dispatchid", sa_dispatchid); sqlFactoryupdate.addParameter("recheckby", username); sqlList.add(sqlFactoryupdate.getSQL()); dbConnect.runSqlUpdate(sqlList); Long sys_enterpriseid = dispatchRows.get(0).getLong("sys_enterpriseid"); String message = "您的发货单" + dispatchRows.get(0).getString("billno") + "已复核,请及时查看!"; sendMsg(message, sa_dispatchid, sys_enterpriseid); return getSucReturnObject().toString(); } @API(title = "一键生成发货单", apiversion = R.ID20230220100604.v1.class) @CACHEING_CLEAN(apiversions = {R.ID20221114135303.v1.class, R.ID20221114135403.v1.class, R.ID20230320160203.v1.class}) public String generatedispatch() throws YosException { Long sa_orderid = content.getLong("sa_orderid"); JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids"); Rows orderRows = dbConnect.runSqlQuery("select freightstatus,sys_enterpriseid,rec_contactsid,status,remarks from sa_order where siteid='" + siteid + "' and sa_orderid=" + sa_orderid); if (orderRows.isEmpty()) { return getErrReturnObject().setErrMsg("订单无效").toString(); } if (!orderRows.get(0).getString("status").equals("审核") && !orderRows.get(0).getString("status").equals("关闭")) { return getErrReturnObject().setErrMsg("非审核后订单无法生成发货单").toString(); } ArrayList sqlList = new ArrayList<>(); long sa_dispatchid = createTableID("sa_dispatch"); String billCode = createBillCode("dispatchbill"); SQLFactory sqlFactory = new SQLFactory(this, "发货单新增"); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter("userid", userid); sqlFactory.addParameter("username", username); sqlFactory.addParameter("sa_dispatchid", sa_dispatchid); sqlFactory.addParameter("billno", billCode); sqlFactory.addParameter("sys_enterpriseid", orderRows.get(0).getLong("sys_enterpriseid")); sqlFactory.addParameter("rec_contactsid", orderRows.get(0).getLong("rec_contactsid")); //sqlFactory.addParameter("sa_logiscompid", orderRows.get(0).getLong("sa_logiscompid")); sqlFactory.addParameter("sa_orderid", sa_orderid); sqlFactory.addParameter("remarks", orderRows.get(0).getString("remarks")); sqlFactory.addParameter("freightstatus", orderRows.get(0).getString("freightstatus")); sqlFactory.addParameter("billdate", now()); sqlList.add(sqlFactory.getSQL()); // RowsMap orderitemsRowsMap = dbConnect.runSqlQuery("select itemid,itemno,qty,sa_orderitemsid,sa_orderid,remarks from sa_orderitems where siteid='" + siteid + "' and sa_orderid=" + sa_orderid).toRowsMap("sa_orderitemsid"); // RowsMap dispatchitemsRowsMap; // if (dbConnect.runSqlQuery("select 1 from sys_site_parameter where siteid='" + siteid + "' and dispatch_recheck=1").isEmpty()) { // dispatchitemsRowsMap = dbConnect.runSqlQuery("select sa_orderid,sa_orderitemsid,ifnull(sum(qty),0) qty from sa_dispatch t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_dispatchid=t2.sa_dispatchid where t1.siteid='" + siteid + "' and t1.status in ('审核','关闭') group by t1.sa_orderid,t2.sa_orderitemsid").toRowsMap("sa_orderitemsid"); // } else { // dispatchitemsRowsMap = dbConnect.runSqlQuery("select sa_orderid,sa_orderitemsid,ifnull(sum(qty),0) qty from sa_dispatch t1 inner join sa_dispatch_items t2 on t1.siteid=t2.siteid and t1.sa_dispatchid=t2.sa_dispatchid where t1.siteid='" + siteid + "' and t1.status in ('复核','关闭') group by t1.sa_orderid,t2.sa_orderitemsid").toRowsMap("sa_orderitemsid"); // } Rows orderitemsRows = dbConnect.runSqlQuery("select itemid,itemno,sa_orderitemsid,undeliqty,remarks,customproperties from sa_orderitems where siteid='" + siteid + "' and sa_orderitemsid in " + sa_orderitemsids.toString().replace("[", "(").replace("]", ")")); Long rowno = 1L; for (Row row : orderitemsRows) { String sa_orderitemsid = row.getString("sa_orderitemsid"); BigDecimal qty = row.getBigDecimal("undeliqty"); if (qty.compareTo(new BigDecimal("0")) < 1) { continue; } // if (orderitemsRowsMap.containsKey(sa_orderitemsid)) { // Rows orderitemsRows = orderitemsRowsMap.get(sa_orderitemsid); // qty = orderitemsRows.get(0).getBigDecimal("qty"); // if (dispatchitemsRowsMap.containsKey(sa_orderitemsid)) { // RowsMap dispatchRowsMap = dispatchitemsRowsMap.get(sa_orderitemsid).toRowsMap("sa_orderid"); // if (dispatchRowsMap.containsKey(sa_orderid.toString())) { // Rows orderitemRows = dispatchRowsMap.get(sa_orderid.toString()); // if (orderitemsRows.get(0).getBigDecimal("qty").compareTo(orderitemRows.get(0).getBigDecimal("qty")) < 1) { // continue; // } else { // qty = qty.subtract(orderitemRows.get(0).getBigDecimal("qty")); // } // } // } sqlFactory = new SQLFactory(this, "发货单明细新增"); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter("sa_dispatch_itemsid", createTableID("sa_dispatch_items")); sqlFactory.addParameter("sa_dispatchid", sa_dispatchid); sqlFactory.addParameter("rowno", rowno); sqlFactory.addParameter("billno", billCode); rowno++; sqlFactory.addParameter("sa_orderitemsid", sa_orderitemsid); sqlFactory.addParameter("itemid", row.getLong("itemid")); sqlFactory.addParameter("qty", qty); sqlFactory.addParameter("batchcontrol", 0); sqlFactory.addParameter("batchno", ""); String remarks = row.getString("customproperties"); if (!row.getString("remarks").isEmpty()) { remarks = remarks + " 备注:" + row.getString("remarks"); } sqlFactory.addParameter("remarks", remarks); sqlFactory.addParameter("userid", userid); sqlFactory.addParameter("username", username); sqlList.add(sqlFactory.getSQL()); // } } sqlList.add(DataContrlLog.createLog(this, "sa_dispatch", sa_dispatchid, "一键发货", "一键发货").getSQL()); dbConnect.runSqlUpdate(sqlList); content.put("sa_dispatchid", sa_dispatchid); return queryDispatchMain(); } public void sendMsg(String content, Long sa_dispatchid, Long sys_enterpriseid) throws YosException { ArrayList userList = getEnterpriseHrs(sys_enterpriseid).toArrayList("userid", new ArrayList<>()); Remind remind = new Remind(this); remind.setTitle("发货单消息"); remind.setContent(content); remind.setType("应用"); remind.setObjectid(sa_dispatchid); remind.setObjectname("sa_dispatch"); remind.setTouserid(userList); remind.sendByDialogMsg().createSys_message(); } @API(title = "查询erp对接记录", apiversion = R.ID20230228133403.v1.class) @CACHEING public String queryErpupdatelog() throws YosException { Long sa_dispatchid = content.getLong("sa_dispatchid"); SQLFactory sqlFactory = new SQLFactory(this, "发货单erp对接记录", pageSize, pageNumber, pageSorting); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter("sa_dispatchid", sa_dispatchid); Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL()); return getSucReturnObject().setData(rows).toString(); } private void sendRemind(Long sys_enterpriseid, Long sa_dispatchid) throws YosException { Rows rows1 = dbConnect.runSqlQuery("select userid from sys_enterprise_hr where siteid='" + siteid + "' and sys_enterpriseid=" + sys_enterpriseid); HashMap extradata = new HashMap<>(); extradata.put("extraUserList", rows1.toArrayList("userid", new ArrayList())); Executor.sendEml(this, "dispatch_close", sa_dispatchid, siteid, extradata); } }