Procházet zdrojové kódy

发货单自动关闭任务

eganwu před 2 roky
rodič
revize
bd2c96a2a1

+ 13 - 0
src/custom/beans/accountbalance/Accountbalance.java

@@ -504,6 +504,19 @@ public class Accountbalance extends BaseClass {
         remind.createSys_message();
     }
 
+    public void sendMsg(String siteid, String content, Long sa_orderid, Long sys_enterpriseid) throws YosException {
+
+        ArrayList<Long> userList = getEnterpriseHrs(sys_enterpriseid, siteid).toArrayList("userid", new ArrayList<>());
+        Remind remind = new Remind(siteid);
+        remind.setTitle("凭证消息");
+        remind.setContent(content);
+        remind.setType("应用");
+        remind.setObjectid(sa_orderid);
+        remind.setObjectname("sa_order");
+        remind.setTouserid(userList);
+        remind.createSys_message();
+    }
+
     public static void remindSend(Controller controller, Long sys_enterpriseid, Long sa_cashbillid) throws YosException {
         if (sa_cashbillid != 0) {
             String siteid = controller.siteid;

+ 9 - 0
src/custom/beans/itemclass/ItemClass.java

@@ -6,6 +6,7 @@ import common.YosException;
 import common.data.Rows;
 import common.data.RowsMap;
 import common.data.SQLFactory;
+import common.data.db.DBConnect;
 
 import java.util.ArrayList;
 
@@ -48,6 +49,14 @@ public class ItemClass extends BaseClass {
         return rows.toArrayList("itemclassid", new ArrayList<>());
     }
 
+    public static ArrayList<Long> getSubItemClassIds(DBConnect dbConnect, String siteid, ArrayList<Long> itemclassids) throws YosException {
+        SQLFactory sqlFactory = new SQLFactory(new ItemClass(), "下级分类id获取");
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter_in("itemclassid", itemclassids);
+        Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
+        return rows.toArrayList("itemclassid", new ArrayList<>());
+    }
+
     /**
      * 根据指定的分类id获取上级分类id
      *

+ 212 - 4
src/custom/service/DispatchAutoCloseService.java

@@ -1,22 +1,28 @@
 package service;
 
+import beans.accountbalance.Accountbalance;
+import beans.accountbalance.CashbillEntity;
 import beans.datacontrllog.DataContrlLog;
+import beans.itemclass.ItemClass;
+import beans.order.Order;
 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.data.*;
 import common.parameter.properties;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import restcontroller.webmanage.executorService.Executor;
+import restcontroller.webmanage.sale.order.OrderItemsHelper;
 import utility.ERPDocking;
 import utility.tools.WebRequest;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Properties;
@@ -174,6 +180,10 @@ public class DispatchAutoCloseService extends ServiceController {
                                 sqlFactory.addParameter("actionby", "admin");
                                 sqlFactory.addParameter("siteid", siteid);
                                 dbConnect.runSqlUpdate(sqlFactory.getSQL());
+
+                                //是否自动返利结算
+                                executeAutoRebate(row.getLong("sa_orderid"), siteid);
+
                             }
                         }
                     }
@@ -273,4 +283,202 @@ public class DispatchAutoCloseService extends ServiceController {
     }
 
 
+    public void executeAutoRebate(Long sa_orderid, String siteid) throws YosException {
+
+        Rows orderRows = dbConnect.runSqlQuery("SELECT * from sa_order WHERE sa_orderid = " + sa_orderid + " and siteid = '" + siteid + "'");
+        if (orderRows.get(0).getString("type").equals("促销订单")) {
+            return;
+        }
+        Long sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
+
+
+        //是否自动返利结算
+        String isrebate = Parameter.get(siteid, "isrebate");
+        if (isrebate.equals("1")) {
+            return;
+        }
+        //查询有效期内,余额大于0 的经销商装修补贴返利
+        String sql = "select * from sa_agentdecorationtrebate WHERE sys_enterpriseid=" + sys_enterpriseid + " and siteid='" + siteid + "' and begindate <= current_date and enddate>=current_date and balance>0";
+        Rows agentdecorationtrebatRows = dbConnect.runSqlQuery(sql);
+        if (agentdecorationtrebatRows.isEmpty()) {
+            return;
+        }
+        //查询装修返利方案
+        Rows rebateschemeRows = dbConnect.runSqlQuery("select * from sa_rebatescheme where siteid='" + siteid + "'");
+        if (rebateschemeRows.isEmpty()) {
+            return;
+        }
+        ArrayList<String> sqlList = new ArrayList<>();
+        Long sa_rebateschemeid = rebateschemeRows.get(0).getLong("sa_rebateschemeid");
+        Long sa_accountclassid = rebateschemeRows.get(0).getLong("sa_accountclassid");
+
+        Rows rebatecategorys = dbConnect.runSqlQuery("select itemclassid from sa_rebatecategory where siteid='" + siteid + "' and sa_rebateschemeid=" + sa_rebateschemeid);
+        Rows rebateunproducts = dbConnect.runSqlQuery("select itemid from sa_rebateunproducts where siteid='" + siteid + "' and sa_rebateschemeid=" + sa_rebateschemeid);
+
+        ArrayList<Long> itemclsids = rebatecategorys.toArrayList("itemclassid", new ArrayList<Long>());
+
+        itemclsids.addAll(ItemClass.getSubItemClassIds(dbConnect, siteid, itemclsids));
+        itemclsids.add(0l);
+        ArrayList<Long> itemids = rebateunproducts.toArrayList("itemid", new ArrayList<Long>());
+        itemids.add(0l);
+
+        SQLFactory sqlFactory = new SQLFactory(dbConnect, "查询返利数据");
+        sqlFactory.addParameter("sa_orderid", sa_orderid);
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter_in("itemclassid", itemclsids);
+        sqlFactory.addParameter_in("itemid", itemids);
+
+        Rows rows = dbConnect.runSqlQuery(sqlFactory);
+        BigDecimal saorderamount = BigDecimal.ZERO;
+        for (Row row : rows) {
+            saorderamount = saorderamount.add(row.getBigDecimal("amount"));
+        }
+        //查询定制费用
+        sql = "SELECT ifnull(sum(costamount),0) costamount from sa_order_cost WHERE sa_orderid=" + sa_orderid;
+        BigDecimal costamount = dbConnect.runSqlQuery(0, sql).getBigDecimal("costamount");
+        saorderamount = saorderamount.add(costamount);
+
+
+        BigDecimal balance = agentdecorationtrebatRows.get(0).getBigDecimal("balance");
+        BigDecimal brate = agentdecorationtrebatRows.get(0).getBigDecimal("brate");
+
+
+        BigDecimal approvedamount = BigDecimal.ZERO;
+        if (balance.compareTo(saorderamount.multiply(brate)) >= 0) {
+            approvedamount = saorderamount.multiply(brate);
+        } else if (balance.compareTo(BigDecimal.ZERO) > 0) {
+            approvedamount = balance;
+        }
+        System.out.println(saorderamount);
+        System.out.println(approvedamount);
+
+        if (approvedamount.compareTo(BigDecimal.ZERO) > 0) {
+            ArrayList<Long> sa_orderitemsids = rows.toArrayList("sa_orderitemsid", new ArrayList<>());
+            sa_orderitemsids.add(0l);
+
+            //更新订单明细的装修返利标志
+            UpdateSQL updateSQL = SQLFactory.createUpdateSQL(dbConnect, "sa_orderitems");
+            updateSQL.setWhere("sa_orderitemsid", sa_orderitemsids);
+            updateSQL.setValue("decorationrebateflag", "1");
+            sqlList.add(updateSQL.getSQL());
+
+            //更新sa_agentdecorationtrebate
+            updateSQL = SQLFactory.createUpdateSQL(dbConnect, "sa_agentdecorationtrebate");
+            updateSQL.setWhere("sys_enterpriseid", sys_enterpriseid);
+            updateSQL.setSiteid(siteid);
+            updateSQL.setValue("balance", balance.subtract(approvedamount));
+            sqlList.add(updateSQL.getSQL());
+
+            //生成收入凭证
+            CashbillEntity entity = new CashbillEntity();
+            entity.setAmount(approvedamount);
+            entity.setOwnerid(sa_orderid);
+            entity.setOwnertable("sa_order");
+            entity.setSource("订单自动返利");
+            entity.setSourcenote(orderRows.get(0).getString("sonum"));
+            entity.setRemarks(orderRows.get(0).getString("sonum") + "订单自动返利");
+            JSONObject cashbillIncome = createCashbillIncome(siteid, sys_enterpriseid, sa_accountclassid, entity, true, true);
+            sqlList.addAll(cashbillIncome.getJSONArray("sqlList").toJavaList(String.class));
+
+            dbConnect.runSqlUpdate(sqlList);
+        }
+    }
+
+    /**
+     * 创建收入凭证(返回SQL)
+     *
+     * @param siteid
+     * @param sys_enterpriseid  企业id
+     * @param sa_accountclassid 账户id
+     * @param cashbillEntity    收支凭证实体
+     * @param ischeck           是否审核
+     * @return
+     * @throws YosException
+     */
+    public JSONObject createCashbillIncome(String siteid, long sys_enterpriseid, long sa_accountclassid, CashbillEntity cashbillEntity, boolean ischeck, boolean isupdatek3flag) throws YosException {
+
+        long userid = 1;
+        String username = "admin";
+
+        ArrayList<String> sqlList = new ArrayList<>();
+        long sa_cashbillid = createTableID("sa_cashbill");
+        String billcode = createBillCode(siteid, "cashbill");
+        SQLFactory sqlFactory = new SQLFactory(new Accountbalance(), "收支凭证新增");
+        sqlFactory.addParameter("billno", billcode);
+        sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
+        sqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
+        sqlFactory.addParameter("type", 1);
+        sqlFactory.addParameter("siteid", siteid);
+        sqlFactory.addParameter("remarks", cashbillEntity.getRemarks());
+        sqlFactory.addParameter("amount", cashbillEntity.getAmount());
+        sqlFactory.addParameter("sa_cashbillid", sa_cashbillid);
+        sqlFactory.addParameter("userid", userid);
+        sqlFactory.addParameter("username", username);
+        sqlFactory.addParameter("ownertable", cashbillEntity.getOwnertable());
+        sqlFactory.addParameter("ownerid", cashbillEntity.getOwnerid());
+        sqlFactory.addParameter("source", cashbillEntity.getSource());
+        sqlFactory.addParameter("sourcenote", cashbillEntity.getSourcenote());
+        sqlFactory.addParameter("sa_cashbillid_rebate", "null");
+        sqlFactory.addParameter("class", cashbillEntity.getType());
+        sqlFactory.addParameter("subclass", cashbillEntity.getTypemx());
+        if (ischeck) {
+            BigDecimal balance = BigDecimal.ZERO;  //当前账户余额
+            sqlFactory.addParameter("status", "审核");
+            if (isupdatek3flag) {
+                sqlFactory.addParameter("updatek3flag", "0");
+            } else {
+                sqlFactory.addParameter("updatek3flag", "");
+            }
+            sqlFactory.addParameter("checkby", username);
+            sqlFactory.addParameter_SQL("checkdate", "CURRENT_TIME");
+
+            // 审核逻辑判断
+            Rows rowsaccountbalance = dbConnect.runSqlQuery(
+                    "select sa_accountbalanceid,balance,creditquota from sa_accountbalance where sys_enterpriseid ='"
+                            + sys_enterpriseid + "' and  sa_accountclassid='" + sa_accountclassid + "' and siteid='"
+                            + siteid + "'");
+
+            if (rowsaccountbalance.isEmpty()) {
+                SQLFactory accountbalanceaddSqlFactory = new SQLFactory(new Accountbalance(), "营销账户余额新增");
+                accountbalanceaddSqlFactory.addParameter("sa_accountbalanceid",
+                        createTableID("sa_accountbalance"));
+                accountbalanceaddSqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
+                accountbalanceaddSqlFactory.addParameter("sa_accountclassid", sa_accountclassid);
+                accountbalanceaddSqlFactory.addParameter("siteid", siteid);
+                accountbalanceaddSqlFactory.addParameter("balance", cashbillEntity.getAmount());
+                accountbalanceaddSqlFactory.addParameter("userid", userid);
+                accountbalanceaddSqlFactory.addParameter("username", username);
+                balance = cashbillEntity.getAmount();
+                sqlList.add(accountbalanceaddSqlFactory.getSQL());
+            } else {
+                BigDecimal newbalance = cashbillEntity.getAmount().add(rowsaccountbalance.get(0).getBigDecimal("balance"));
+                sqlList.add("update sa_accountbalance set balance='" + newbalance
+                        + "',changedate=CURRENT_TIME,changeby ='" + username + "',changeuserid='"
+                        + userid + "' where sys_enterpriseid ='" + sys_enterpriseid
+                        + "' and  sa_accountclassid='" + sa_accountclassid + "' and siteid='" + siteid
+                        + "'");
+                balance = newbalance;
+            }
+            sqlFactory.addParameter("balance", balance);
+            Rows accountclassrows = dbConnect.runSqlQuery("select * from sa_accountclass where siteid='" + siteid + "' and  sa_accountclassid=" + sa_accountclassid);
+            if (!accountclassrows.isEmpty()) {
+                String content = "您的" + accountclassrows.get(0).getString("accountname") + "已收入【" + cashbillEntity.getAmount() + "】元";
+                new Accountbalance().sendMsg(siteid, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
+            }
+
+        } else {
+            sqlFactory.addParameter("status", "新建");
+            sqlFactory.addParameter("checkby", "null");
+            sqlFactory.addParameter("checkdate", "null");
+            sqlFactory.addParameter("updatek3flag", "");
+            sqlFactory.addParameter("balance", 0);
+        }
+        sqlList.add(sqlFactory.getSQL());
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("sa_cashbillid", sa_cashbillid);
+        jsonObject.put("sqlList", sqlList);
+        return jsonObject;
+    }
 }