123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package service;
- import beans.accountbalance.Accountbalance;
- import beans.accountbalance.CashbillEntity;
- import beans.parameter.Parameter;
- import beans.remind.Remind;
- import beans.uploaderpdata.UploadDataToERP_HY;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import common.Controller;
- import common.ServiceController;
- import common.YosException;
- import common.data.Row;
- import common.data.Rows;
- import common.data.RowsMap;
- import common.data.SQLFactory;
- import common.parameter.properties;
- import org.apache.commons.lang.StringUtils;
- import org.apache.log4j.Logger;
- import restcontroller.webmanage.executorService.Executor;
- import utility.ERPDocking;
- import utility.tools.WebRequest;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.*;
- public class StockAutoDockDispatchService extends ServiceController {
- private static Logger logger = Logger.getLogger(DispatchAutoCloseService.class);
- @Override
- public void serviceRun() throws YosException {
- //
- System.out.println("销售出库单自动同步任务");
- Properties yosProperties = properties.getYosProperties();
- if (yosProperties.getProperty("system.runmode.debug").equalsIgnoreCase("false")) {
- ArrayList<String> sqlList = new ArrayList<>();
- ERPDocking erpDocking = new ERPDocking();
- JSONArray ErpSainvoices = erpDocking.queryErpStockBill(500, 1,"销售出库");
- JSONArray flags=new JSONArray();
- String siteid = "ccyosg";
- if (!ErpSainvoices.isEmpty()) {
- for (Object ErpSainvoice : ErpSainvoices) {
- JSONObject erpSainvoice = (JSONObject) ErpSainvoice;
- // 经销商编号
- String fagentnum = erpSainvoice.getString("fagentnum");
- long sys_enterpriseid = 0;
- if (dbConnect.runSqlQuery("select sys_enterpriseid from sa_agents where siteid='ccyosg' and agentnum='" + fagentnum + "'").isNotEmpty()) {
- sys_enterpriseid = dbConnect.runSqlQuery("select sys_enterpriseid from sa_agents where siteid='ccyosg' and agentnum='" + fagentnum + "'").get(0).getLong("sys_enterpriseid");
- } else {
- JSONObject flag =new JSONObject();
- flag.put("syncyosid",erpSainvoice.getStringValue("syncyosid"));
- flag.put("fupdateflag", "4");
- flag.put("fupdatewarnlog", "yos中不存在【" + fagentnum + "】经销商");
- flags.add(flag);
- continue;
- }
- //单号
- String fbillnum = erpSainvoice.getString("fbillnum");
- // 单据日期
- String fdate = erpSainvoice.getString("fdate");
- // 会计期间
- // String fperiod = content.getString("fperiod");
- // 红蓝字
- String frb = erpSainvoice.getString("frb");
- // 表头仓库
- // String fstockno = content.getString("fstockno");
- // 单据类型明细
- //String ftypemx = content.getString("ftypemx");
- // 单据状态
- String fstatus = erpSainvoice.getString("fstatus");
- // 制单人
- String createby = erpSainvoice.getString("createby");
- // 制单日期
- String createdate = erpSainvoice.getString("createdate");
- // // 审核人
- // String checkby = erpSainvoice.getString("checkby");
- // // 审核日期
- // String checkdate = erpSainvoice.getString("checkdate");
- // 备注
- String fnotes = erpSainvoice.getString("fnote");
- String fsourcebillno = erpSainvoice.getString("fsourcebillno");
- String fsourcetype = erpSainvoice.getString("fsourcetype");
- long sa_dispatchid=0;
- if(StringUtils.isNotBlank(fsourcebillno)){
- if (dbConnect.runSqlQuery("select sa_dispatchid from sa_dispatch where siteid='ccyosg' and billno='" + fsourcebillno + "'").isNotEmpty()) {
- sa_dispatchid = dbConnect.runSqlQuery("select sa_dispatchid from sa_dispatch where siteid='ccyosg' and billno='" + fsourcebillno + "'").get(0).getLong("sa_dispatchid");
- } else {
- JSONObject flag =new JSONObject();
- flag.put("syncyosid",erpSainvoice.getStringValue("syncyosid"));
- flag.put("fupdateflag", "4");
- flag.put("fupdatewarnlog", "yos中不存在对应的发货单");
- flags.add(flag);
- continue;
- }
- }else {
- JSONObject flag =new JSONObject();
- flag.put("syncyosid",erpSainvoice.getStringValue("syncyosid"));
- flag.put("fupdateflag", "4");
- flag.put("fupdatewarnlog", "yos中不存在对应的发货单");
- flags.add(flag);
- continue;
- }
- Long sa_cashbillid = 0L;
- Rows stockbillRows = dbConnect.runSqlQuery("select * from st_stockbill where siteid='ccyosg' and status='审核' and billno='" + fbillnum + "'");
- Long st_stockbillid = 0L;
- if (stockbillRows.isEmpty() && "审核".equals(fstatus)) {
- /**
- * DRP不存在销售出库单,且中间表状态为审核且不在删除状态时,DRP中需新增该销售出库单
- */
- SQLFactory sqlFactory = new SQLFactory(this, "销售出库单新增");
- st_stockbillid = createTableID("st_stockbill");
- sqlFactory.addParameter("siteid", "ccyosg");
- sqlFactory.addParameter("st_stockbillid", st_stockbillid);
- sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
- sqlFactory.addParameter("billno", fbillnum);
- sqlFactory.addParameter("type", "销售出库");
- sqlFactory.addParameter("rb", frb.equals("蓝") ? 1 : 0);
- sqlFactory.addParameter("billdate", fdate);
- sqlFactory.addParameter("createby", createby);
- sqlFactory.addParameter("createdate", getDate(createdate));
- sqlFactory.addParameter("changeby", createby);
- sqlFactory.addParameter("changedate", getDate(createdate));
- sqlFactory.addParameter("checkby", createby);
- sqlFactory.addParameter("checkdate", getDate(createdate));
- sqlFactory.addParameter("remarks", fnotes);
- sqlList.add(sqlFactory.getSQL());
- JSONArray detailarray = erpSainvoice.getJSONArray("details");
- StringBuffer str = new StringBuffer();
- for (Object object : detailarray) {
- JSONObject jsonObject = (JSONObject) object;
- if (str.toString().equals("")) {
- str.append("'" + jsonObject.getString("fitemno") + "'");
- } else {
- str.append(",'" + jsonObject.getString("fitemno") + "'");
- }
- }
- Rows rows;
- if (!str.toString().equals("")) {
- rows = dbConnect.runSqlQuery("select * from plm_item where siteid='ccyosg' and itemno in " + "(" + str.toString() + ")");
- } else {
- rows = dbConnect.runSqlQuery("select * from plm_item where siteid='ccyosg' and itemno in('')");
- }
- RowsMap itemRowsMap = rows.toRowsMap("itemno");
- Rows distiptchRows = dbConnect.runSqlQuery("select t2.price,t1.sa_dispatch_itemsid,t1.rowno,t1.sa_orderitemsid,t2.sa_orderid,t3.sys_enterpriseid,t4.sonum,t5.itemno,t5.itemname from sa_dispatch_items t1 inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid inner join sa_dispatch t3 on t1.sa_dispatchid=t3.sa_dispatchid and t1.siteid=t3.siteid left join sa_order t4 on t2.sa_orderid=t4.sa_orderid and t2.siteid=t4.siteid left join plm_item t5 on t1.itemid=t5.itemid and t1.siteid=t5.siteid where t3.status in('审核','复核','关闭') and t1.siteid='ccyosg' and t1.sa_dispatchid = " + sa_dispatchid);
- RowsMap distiptchRowsMap = distiptchRows.toRowsMap("rowno");
- // Rows aftersalesmagRows = dbConnect.runSqlQuery("select t1.price,t1.sa_aftersalesmag_itemsid,t1.sa_orderitemsid,t2.sa_orderid from sa_aftersalesmag_items t1 inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid where t1.siteid='ccyosg' and t1.sa_aftersalesmag_itemsid in " + sa_dispatch_itemsids.toString().replace("[", "(").replace("]", ")"));
- // RowsMap aftersalesmagRowsMap = aftersalesmagRows.toRowsMap("rowno");
- BigDecimal amountTotal = BigDecimal.ZERO;
- for (Object object : detailarray) {
- JSONObject jsonObject = (JSONObject) object;
- String frownum = jsonObject.getString("fentryno");
- String fitemno = jsonObject.getString("fitemno");
- String fbatchno = jsonObject.getString("fbatchno");
- System.err.println(frownum + ":" + fitemno);
- BigDecimal fqty = new BigDecimal(jsonObject.getString("fqty"));
- fqty = fqty.compareTo(BigDecimal.ZERO) < 0 ? fqty.negate() : fqty;
- //String fdetailstockno = jsonObject.getString("fstockno");
- //String fbatchno = jsonObject.getString("fbatchno");
- String fdetailnotes = jsonObject.getString("fnote");
- SQLFactory sqlFactorydetail = new SQLFactory(this, "销售出库单明细新增");
- sqlFactorydetail.addParameter("siteid", "ccyosg");
- sqlFactorydetail.addParameter("st_stockbill_itemsid", createTableID("st_stockbill_items"));
- sqlFactorydetail.addParameter("st_stockbillid", st_stockbillid);
- sqlFactorydetail.addParameter("rowno", frownum);
- sqlFactorydetail.addParameter("remarks", fnotes);
- if (itemRowsMap.containsKey(fitemno) && itemRowsMap.get(fitemno).isNotEmpty()) {
- sqlFactorydetail.addParameter("itemid", itemRowsMap.get(fitemno).get(0).getLong("itemid"));
- } else {
- sqlFactorydetail.addParameter("itemid", 0);
- }
- sqlFactorydetail.addParameter("remarks", fdetailnotes);
- sqlFactorydetail.addParameter("qty", fqty);
- if (frb.equals("蓝")) {
- if (distiptchRowsMap.containsKey(String.valueOf(frownum)) && distiptchRowsMap.get(frownum).isNotEmpty()) {
- sqlFactorydetail.addParameter("sa_dispatch_itemsid", distiptchRowsMap.get(frownum).get(0).getLong("sa_dispatch_itemsid"));
- sqlFactorydetail.addParameter("price", distiptchRowsMap.get(frownum).get(0).getBigDecimal("price"));
- amountTotal = amountTotal.add(fqty.multiply(distiptchRowsMap.get(frownum).get(0).getBigDecimal("price")));
- sqlFactorydetail.addParameter("amount", fqty.multiply(distiptchRowsMap.get(frownum).get(0).getBigDecimal("price")));
- sqlFactorydetail.addParameter("sa_orderitemsid", distiptchRowsMap.get(frownum).get(0).getLong("sa_orderitemsid"));
- sqlFactorydetail.addParameter("sa_orderid", distiptchRowsMap.get(frownum).get(0).getLong("sa_orderid"));
- System.out.println(amountTotal);
- //您的订单【XXX】商品【XXX】工厂已发货,出库单号【XXX】
- String message = "您的订单【" + distiptchRowsMap.get(frownum).get(0).getString("sonum") + "】商品【" + distiptchRowsMap.get(frownum).get(0).getString("itemname") + "】工厂已发货,出库单号【" + fbillnum + "】!";
- sendMsg(message, st_stockbillid, distiptchRowsMap.get(frownum).get(0).getLong("sys_enterpriseid"));
- } else {
- sqlFactorydetail.addParameter("price", 0);
- sqlFactorydetail.addParameter("amount", 0);
- sqlFactorydetail.addParameter("sa_orderitemsid", 0);
- sqlFactorydetail.addParameter("sa_orderid", 0);
- }
- }
- // else {
- // if (aftersalesmagRowsMap.containsKey(String.valueOf(sainvoicedetailid)) && aftersalesmagRowsMap.get(sainvoicedetailid).isNotEmpty()) {
- // logger.info(aftersalesmagRowsMap.get(sainvoicedetailid).get(0).toJsonObject().toString());
- // sqlFactorydetail.addParameter("price", aftersalesmagRowsMap.get(sainvoicedetailid).get(0).getBigDecimal("price"));
- // sqlFactorydetail.addParameter("amount", fqty.multiply(aftersalesmagRowsMap.get(sainvoicedetailid).get(0).getBigDecimal("price")));
- // logger.info(aftersalesmagRowsMap.get(sainvoicedetailid).get(0).getBigDecimal("sa_orderitemsid"));
- // logger.info(aftersalesmagRowsMap.get(sainvoicedetailid).get(0).getBigDecimal("sa_orderid"));
- // sqlFactorydetail.addParameter("sa_orderitemsid", aftersalesmagRowsMap.get(sainvoicedetailid).get(0).getLong("sa_orderitemsid"));
- // sqlFactorydetail.addParameter("sa_orderid", aftersalesmagRowsMap.get(sainvoicedetailid).get(0).getLong("sa_orderid"));
- // } else {
- // sqlFactorydetail.addParameter("price", 0);
- // sqlFactorydetail.addParameter("amount", 0);
- // sqlFactorydetail.addParameter("sa_orderitemsid", 0);
- // sqlFactorydetail.addParameter("sa_orderid", 0);
- // }
- // }
- sqlList.add(sqlFactorydetail.getSQL());
- }
- sqlList.add("update st_stockbill set status='审核',checkby='" + createby + "',checkdate=CURRENT_TIMESTAMP where st_stockbillid = " + st_stockbillid + " and siteid='ccyosg'"); JSONObject flag =new JSONObject();
- flag.put("syncyosid",erpSainvoice.getStringValue("syncyosid"));
- flag.put("fupdateflag", "1");
- flag.put("fupdatewarnlog", "");
- flags.add(flag);
- } else if (!stockbillRows.isEmpty() && "审核".equals(fstatus)) {
- /**
- * DRP存在销售出库单,且中间表状态为审核且不在删除状态时,DRP中需将当前销售出库单先反审核,修改内容后再进行审核
- */
- sqlList.add("update st_stockbill set status='新建',checkby='',checkdate=null where st_stockbillid = " + stockbillRows.get(0).getLong("st_stockbillid") + " and siteid='ccyosg'");
- JSONObject flag =new JSONObject();
- flag.put("syncyosid",erpSainvoice.getStringValue("syncyosid"));
- flag.put("fupdateflag", "99");
- flag.put("fupdatewarnlog", "");
- flags.add(flag);
- continue;
- } else if (!stockbillRows.isEmpty() && "新建".equals(fstatus)) {
- /**
- * DRP存在收入凭证,且中间表状态为新建或在删除状态时,DRP中需将当前收入销售出库单先反审核
- */
- sqlList.add("update st_stockbill set status='新建',checkby='',checkdate=null where st_stockbillid = " + stockbillRows.get(0).getLong("st_stockbillid") + " and siteid='ccyosg'");
- JSONObject flag =new JSONObject();
- flag.put("syncyosid",erpSainvoice.getStringValue("syncyosid"));
- flag.put("fupdateflag", "1");
- flag.put("fupdatewarnlog", "");
- flags.add(flag);
- }
- }
- }
- if(erpDocking.updateErpupdateFlag(flags).equals("true")){
- dbConnect.runSqlUpdate(sqlList);
- /**
- * 如单据为新建状态,则,先把单据强行删除掉
- */
- dbConnect.runSqlUpdate("delete from st_stockbill_items where st_stockbillid in(select st_stockbillid from st_stockbill where status='新建')");
- dbConnect.runSqlUpdate("delete from st_stockbill where status='新建'");
- }
- }
- }
- public String getDate(String date) {
- try {
- Date a = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(date);
- return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(a);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- public void sendMsg(String content, Long st_stockbillid, Long sys_enterpriseid) throws YosException {
- ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid,"ccyosg").toArrayList("userid", new ArrayList<>());
- Remind remind = new Remind(new Controller(new JSONObject()));
- remind.setTitle("销售出库单消息");
- remind.setContent(content);
- remind.setType("应用");
- remind.setObjectid(st_stockbillid);
- remind.setObjectname("st_stockbill");
- remind.setTouserid(userList);
- remind.sendByDialogMsg().createSys_message();
- }
- }
|