Ver Fonte

标准订单及销售出库单价格计算修改

hu há 4 meses atrás
pai
commit
77d8436c0e

+ 2 - 0
src/custom/beans/stockbill/Stockbill.java

@@ -20,5 +20,7 @@ public class Stockbill extends BaseClass {
 
     public static void check(Controller controller, long st_stockbillid, boolean ischeck) throws YosException {
         controller.dbConnect.runSqlUpdate(getCheckSql(controller, st_stockbillid, ischeck));
+        BasicBill basicBill = BasicBill.getBill(controller, st_stockbillid);
+        controller.dbConnect.runSqlUpdate(basicBill.getCheckSql_custamount(ischeck));
     }
 }

+ 5 - 0
src/custom/beans/stockbill/bills/BasicBill.java

@@ -163,6 +163,11 @@ public abstract class BasicBill {
         return sqlList;
     }
 
+    public ArrayList<String> getCheckSql_custamount(boolean ischeck) throws YosException {
+        ArrayList<String> sqlList = new ArrayList<>();
+        return sqlList;
+    }
+
     /**
      * 更新库存
      *

+ 87 - 14
src/custom/beans/stockbill/bills/XSCK.java

@@ -98,9 +98,9 @@ public class XSCK extends BasicBill {
         }
 
         if ((ischeck && rb == 1) || (!ischeck && rb == 0)) {
-            if (order_paymentnode.equals("3") && !Accountbalance.judgeBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.toRowsMap("sa_orderitemsidnum").get("0").sum("amount"))) {
-                //throw new YosException("账户余额不足,还差" + Accountbalance.InsufficientBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.toRowsMap("sa_orderitemsidnum").get("0").sum("amount")) + "元!");
-            }
+//            if (order_paymentnode.equals("3") && !Accountbalance.judgeBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.toRowsMap("sa_orderitemsidnum").get("0").sum("amount"))) {
+//                //throw new YosException("账户余额不足,还差" + Accountbalance.InsufficientBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.toRowsMap("sa_orderitemsidnum").get("0").sum("amount")) + "元!");
+//            }
             if(!billRow.getString("sourceobject").equals("tpartreimbursement")){
                 Rows rowsjudge = dbConnect.runSqlQuery("select * from (select sa_orderitemsid,sum(qty) qty from st_stockbill_items where st_stockbillid ='" + st_stockbillid + "' group by sa_orderitemsid) t1 inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid where t1.qty>t2.undeliqty");
                 if (rowsjudge.isNotEmpty()) {
@@ -118,16 +118,17 @@ public class XSCK extends BasicBill {
 
     @Override
     public ArrayList<String> getCheckSql(boolean ischeck) throws YosException {
+
         ArrayList<String> sqlList = super.getCheckSql(ischeck);
+        Rows accountbalancerows = dbConnect.runSqlQuery("select * from  sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
         if (ischeck) {
-            Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
-
             String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
             if (rb == 1) {
                 if (order_paymentnode.equals("3")) {
-                    CashbillEntity entity = getCashbillEntity(billRow.getBigDecimal("payamount"), billRow.getBigDecimal("paydiscountamount"), st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成");
+                    CashbillEntity entity = getCashbillEntity(billRow.getBigDecimal("payamount"), billRow.getBigDecimal("paydiscountamount"), st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成","货款");
                     JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
                     sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
+
                 }
                 Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1  where t1.sa_orderitemsid>0 and t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
                 for (Row row : rowsDispatchDetailGroup) {
@@ -168,6 +169,11 @@ public class XSCK extends BasicBill {
                         }
                         if(orderrows.size()==count){
                             sqlList.add("update sa_order set status='关闭',closeby='"+controller.username+"',closedate=CURRENT_TIME where sa_orderid=" +sa_orderid);
+                            sqlList.add("UPDATE sa_accountbalance t1 " +
+                                    "INNER JOIN sa_accountbalance_freez t2 ON t1.sa_accountbalanceid = t2.sa_accountbalanceid " +
+                                    "SET t1.freezamount = case when ifnull(t1.freezamount,0)>t2.amount then t1.freezamount-t2.amount else 0 end " +
+                                    "WHERE t1.sa_accountbalanceid="+accountbalancerows.get(0).getLong("sa_accountbalanceid")+" and t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
+                            sqlList.add("delete from sa_accountbalance_freez t1 WHERE t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
                         }
                     }
 
@@ -176,7 +182,7 @@ public class XSCK extends BasicBill {
                 sqlList.addAll(updateAccountbalance_freez(isInStock(ischeck)));
             } else {
                 if (order_paymentnode.equals("3")) {
-                    CashbillEntity entity = getCashbillEntity(billRow.getBigDecimal("payamount").negate(), billRow.getBigDecimal("paydiscountamount").negate(), st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成");
+                    CashbillEntity entity = getCashbillEntity(billRow.getBigDecimal("payamount").negate(), billRow.getBigDecimal("paydiscountamount").negate(), st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成","货款");
                     JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
                     sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
                 }
@@ -232,13 +238,14 @@ public class XSCK extends BasicBill {
 
 
         } else {
-            Rows accountbalancerows = dbConnect.runSqlQuery("select * from  sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
             String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
             if (rb == 1) {
                 if (order_paymentnode.equals("3")) {
-                    CashbillEntity entity = getCashbillEntity(billRow.getBigDecimal("payamount").negate(), billRow.getBigDecimal("paydiscountamount").negate(), st_stockbillid, "销售出库单反审核", billno, "由销售出库单" + billno + "反审核时生成");
+                    Rows cashbillRows =dbConnect.runSqlQuery("select amount,discountamount from sa_cashbill where ownerid="+st_stockbillid +" and ownertable='st_stockbill' and type=0 and class='货款'");
+                    CashbillEntity entity = getCashbillEntity(cashbillRows.sum("amount").negate(), cashbillRows.sum("discountamount").negate(), st_stockbillid, "销售出库单反审核", billno, "由销售出库单" + billno + "反审核时生成","货款");
                     JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
                     sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
+
                 }
                 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 st_stockbill_items where sa_orderitemsid>0 and st_stockbillid=" + st_stockbillid + ")");
                 RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
@@ -264,9 +271,11 @@ public class XSCK extends BasicBill {
                 sqlList.addAll(updateAccountbalance_freez(isInStock(ischeck)));
             } else {
                 if (order_paymentnode.equals("3")) {
-                    CashbillEntity entity = getCashbillEntity(billRow.getBigDecimal("payamount"), billRow.getBigDecimal("paydiscountamount"), st_stockbillid, "销售出库单反审核", billno, "由销售出库单" + billno + "反审核时生成");
+                    Rows cashbillRows =dbConnect.runSqlQuery("select amount,discountamount from sa_cashbill where ownerid="+st_stockbillid +" and ownertable='st_stockbill' and type=0 and class='货款'");
+                    CashbillEntity entity = getCashbillEntity(cashbillRows.sum("amount").negate(), cashbillRows.sum("discountamount").negate(), st_stockbillid, "销售出库单反审核", billno, "由销售出库单" + billno + "反审核时生成","货款");
                     JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
                     sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
+
                 }
                 if(!billRow.getString("sourceobject").equals("tpartreimbursement")){
                     Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1  where t1.sa_orderitemsid>0 and t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
@@ -332,6 +341,11 @@ public class XSCK extends BasicBill {
                         }
                         if(orderrows.size()==count){
                             sqlList.add("update sa_order set status='关闭',closeby='"+controller.username+"',closedate=CURRENT_TIME where sa_orderid=" +sa_orderid);
+                            sqlList.add("UPDATE sa_accountbalance t1 " +
+                                    "INNER JOIN sa_accountbalance_freez t2 ON t1.sa_accountbalanceid = t2.sa_accountbalanceid " +
+                                    "SET t1.freezamount = case when ifnull(t1.freezamount,0)>t2.amount then t1.freezamount-t2.amount else 0 end " +
+                                    "WHERE t1.sa_accountbalanceid="+accountbalancerows.get(0).getLong("sa_accountbalanceid")+" and t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
+                            sqlList.add("delete from sa_accountbalance_freez t1 WHERE t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
                         }
                     }
 
@@ -344,6 +358,58 @@ public class XSCK extends BasicBill {
     }
 
 
+    public ArrayList<String> getCheckSql_custamount(boolean ischeck) throws YosException {
+        ArrayList<String> sqlList = super.getCheckSql_custamount(ischeck);
+        if (ischeck) {
+            Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
+
+            String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
+            if (rb == 1) {
+                if (order_paymentnode.equals("3")) {
+                    BigDecimal custamount=BigDecimal.ZERO;
+                    for(Row row :itemRows){
+                        custamount=custamount.add(row.getBigDecimal("custamount").multiply(row.getBigDecimal("qty")));
+                    }
+                    CashbillEntity entity_custamount = getCashbillEntity(custamount, BigDecimal.ZERO, st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成","客户档案资料费");
+                    JSONObject createCashbillPay_custamount = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity_custamount, true);
+                    sqlList.addAll(createCashbillPay_custamount.getJSONArray("sqlList").toJavaList(String.class));
+
+                }
+            } else {
+                if (order_paymentnode.equals("3")) {
+                    BigDecimal custamount=BigDecimal.ZERO;
+                    for(Row row :itemRows){
+                        custamount=custamount.add(row.getBigDecimal("custamount").multiply(row.getBigDecimal("qty")));
+                    }
+                    CashbillEntity entity_custamount = getCashbillEntity(custamount.negate(), BigDecimal.ZERO, st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成","客户档案资料费");
+                    JSONObject createCashbillPay_custamount = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity_custamount, true);
+                    sqlList.addAll(createCashbillPay_custamount.getJSONArray("sqlList").toJavaList(String.class));
+                }
+            }
+        } else {
+            Rows accountbalancerows = dbConnect.runSqlQuery("select * from  sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
+            String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
+            if (rb == 1) {
+                if (order_paymentnode.equals("3")) {
+                    Rows cashbillRows_custamount =dbConnect.runSqlQuery("select amount,discountamount from sa_cashbill where ownerid="+st_stockbillid +" and ownertable='st_stockbill' and type=0 and class='客户档案资料费'");
+                    CashbillEntity entity_custamount = getCashbillEntity(cashbillRows_custamount.sum("amount").negate(), cashbillRows_custamount.sum("discountamount").negate(), st_stockbillid, "销售出库单反审核", billno, "由销售出库单" + billno + "反审核时生成","客户档案资料费");
+                    JSONObject createCashbillPay_custamount = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity_custamount, true);
+                    sqlList.addAll(createCashbillPay_custamount.getJSONArray("sqlList").toJavaList(String.class));
+                }
+            } else {
+                if (order_paymentnode.equals("3")) {
+                    Rows cashbillRows_custamount =dbConnect.runSqlQuery("select amount,discountamount from sa_cashbill where ownerid="+st_stockbillid +" and ownertable='st_stockbill' and type=0 and class='客户档案资料费'");
+                    CashbillEntity entity_custamount = getCashbillEntity(cashbillRows_custamount.sum("amount").negate(),cashbillRows_custamount.sum("discountamount").negate(), st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成","客户档案资料费");
+                    JSONObject createCashbillPay_custamount = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity_custamount, true);
+                    sqlList.addAll(createCashbillPay_custamount.getJSONArray("sqlList").toJavaList(String.class));
+                }
+            }
+
+        }
+        return sqlList;
+    }
+
+
     /**
      * 账户余额冻结
      *
@@ -352,7 +418,7 @@ public class XSCK extends BasicBill {
     public ArrayList<String> updateAccountbalance_freez(boolean addorsub) throws YosException {
         ArrayList<String> sqllist = new ArrayList<>();
         /******** 冻结数据 ********/
-        Rows rows = dbConnect.runSqlQuery("select t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum,t3.type,ROUND(sum(t1.qty*t2.price*ifnull(t2.pricerate,1)*ifnull(t2.rwpricerate,1)), 2) amount from st_stockbill_items t1 \n" +
+        Rows rows = dbConnect.runSqlQuery("select t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum,t3.type,ROUND(sum(t1.qty*(t1.price+t1.custamount)), 2) amount from st_stockbill_items t1 \n" +
                 "                   inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid\n" +
                 "                  inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid\n" +
                 "\t\t\t\t\t\t\t\t\tleft join sa_accountbalance t4 on t4.sa_accountclassid=t3.sa_accountclassid and t4.sys_enterpriseid=t3.sys_enterpriseid and t4.siteid=t3.siteid\n" +
@@ -389,8 +455,14 @@ public class XSCK extends BasicBill {
                 BigDecimal amount = row.getBigDecimal("amount");
                 Rows accountbalancefreezrows = dbConnect.runSqlQuery("select sa_accountbalance_freezid,amount from sa_accountbalance_freez where sourceid=" + sa_orderid + " and sourcetable='sa_order' and siteid='" + siteid + "'");
                 if (accountbalancefreezrows.size() > 0) {
-                    sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)-" + amount + " where sa_accountbalanceid=" + sa_accountbalanceid);
-                    sqllist.add("update sa_accountbalance_freez set amount=amount-" + amount + " where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
+                    if(accountbalancefreezrows.get(0).getBigDecimal("amount").compareTo(amount)>0){
+                        sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)-" + amount + " where sa_accountbalanceid=" + sa_accountbalanceid);
+                        sqllist.add("update sa_accountbalance_freez set amount=amount-" + amount + " where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
+                    }else{
+                        sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)-" + accountbalancefreezrows.get(0).getBigDecimal("amount") + " where sa_accountbalanceid=" + sa_accountbalanceid);
+                        sqllist.add("update sa_accountbalance_freez set amount=0 where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
+                    }
+
                 }
             }
         }
@@ -398,7 +470,7 @@ public class XSCK extends BasicBill {
     }
 
 
-    public static CashbillEntity getCashbillEntity(BigDecimal amount, BigDecimal discountamount, Long ownerid, String source, String sourcenotes, String remarks) throws YosException {
+    public static CashbillEntity getCashbillEntity(BigDecimal amount, BigDecimal discountamount, Long ownerid, String source, String sourcenotes, String remarks,String type) throws YosException {
         CashbillEntity entity = new CashbillEntity();
         entity.setAmount(amount);
         entity.setDiscountamountamount(discountamount);
@@ -406,6 +478,7 @@ public class XSCK extends BasicBill {
         entity.setOwnertable("st_stockbill");
         entity.setSource(source);
         entity.setRemarks(remarks);
+        entity.setType(type);
         entity.setSourcenote(sourcenotes);
         return entity;
 

+ 1 - 1
src/custom/restcontroller/sale/shoppingcart/ShoppingCart.java

@@ -362,7 +362,7 @@ public class ShoppingCart extends Controller {
                         row.put("gradeprice", itemPrice.getContractprice());
                     }
                 }
-                row.put("defaultprice", row.getBigDecimal("gradeprice").multiply(rwpricerate));
+                row.put("defaultprice", row.getBigDecimal("gradeprice"));
                 row.put("gradeprice", row.getBigDecimal("gradeprice").multiply(rwpricerate).add(row.getBigDecimal("custamount")));
 
 

+ 8 - 6
src/custom/restcontroller/webmanage/sale/order/Order.java

@@ -1669,6 +1669,7 @@ public class Order extends Controller {
 
 
         for (Row row : rowsdetail) {
+            BigDecimal defaultprice = row.getBigDecimal("price").subtract(row.getBigDecimal("custamount"));
             payamount=payamount.add(row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price")));
             insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
             insertSQL.setUniqueid(createTableID("st_stockbill_items"));
@@ -1679,17 +1680,18 @@ public class Order extends Controller {
             insertSQL.setValue("itemid", row.getLong("itemid"));
             insertSQL.setValue("sa_orderid", row.getLong("sa_orderid"));
             insertSQL.setValue("qty", row.getLong("undeliqty"));
-            insertSQL.setValue("discountrate", row.getBigDecimal("discountrate"));
+            insertSQL.setValue("discountrate", 1);
             insertSQL.setValue("sa_dispatch_itemsid", 0);
-            insertSQL.setValue("defaultprice", row.getBigDecimal("defaultprice"));
+            insertSQL.setValue("defaultprice", defaultprice);
             insertSQL.setValue("remarks", row.getString("remarks"));
             insertSQL.setValue("itemno", row.getString("itemno"));
             insertSQL.setValue("itemname", row.getString("itemname"));
             insertSQL.setValue("model", row.getString("model"));
-            insertSQL.setValue("price", row.getBigDecimal("price"));
-            insertSQL.setValue("amount", row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price")));
-            insertSQL.setValue("untaxedprice", row.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP));
-            insertSQL.setValue("untaxedamount", row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP)));
+            insertSQL.setValue("price",defaultprice);
+            insertSQL.setValue("amount", row.getBigDecimal("undeliqty").multiply(defaultprice));
+            insertSQL.setValue("untaxedprice", defaultprice.divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP));
+            insertSQL.setValue("untaxedamount", row.getBigDecimal("undeliqty").multiply(defaultprice.divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP)));
+            insertSQL.setValue("custamount",row.getBigDecimal("custamount"));
             insertSQL.setValue("skucontrol", row.getBoolean("skucontrol"));
             if(itemRowsMap.containsKey(row.getString("itemid"))){
                 if(itemRowsMap.get(row.getString("itemid")).get(0).getBoolean("ismodule")){

+ 8 - 2
src/custom/restcontroller/webmanage/sale/order/OrderItems.java

@@ -192,7 +192,7 @@ public class OrderItems extends Controller {
             if (price.compareTo(BigDecimal.ZERO) < 0) {
                 return getErrReturnObject().setErrMsg("价格不可小于0").toString();
             }
-            defaultprice = price.multiply(rwpricerate);
+            defaultprice = price;
             if (isInsert) {
                 sa_orderitemsids_insert.add(sa_orderitemsid);
                 price = price.multiply(rwpricerate).add(custamount);
@@ -204,7 +204,7 @@ public class OrderItems extends Controller {
                 price = price.multiply(rwpricerate).add(item.getBigDecimal("custamount"));
                 if(item.containsKey("defaultprice")){
                     defaultprice=item.getBigDecimal("defaultprice");
-                    price = defaultprice.multiply(pricerate).add(custamount);
+                    price = defaultprice.multiply(rwpricerate).add(custamount);
                 }
                 sqlList.add(orderItemsHelper.getUpdateSQL(sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, width, length).getSQL());
             }
@@ -1504,6 +1504,12 @@ public class OrderItems extends Controller {
         if (isclose) {
             if(dbConnect.runSqlQuery("select * from sa_orderitems where isclose=0 and undeliqty!=0 and sa_orderid="+sa_orderid).isEmpty()){
                 dbConnect.runSqlUpdate("update sa_order set status='关闭',closeby='"+username+"',closedate=CURRENT_TIME where sa_orderid=" +sa_orderid);
+                Rows accountbalancerows = dbConnect.runSqlQuery("select * from  sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + row.getLong("sys_enterpriseid"));
+                dbConnect.runSqlUpdate("UPDATE sa_accountbalance t1 " +
+                        "INNER JOIN sa_accountbalance_freez t2 ON t1.sa_accountbalanceid = t2.sa_accountbalanceid " +
+                        "SET t1.freezamount = case when ifnull(t1.freezamount,0)>t2.amount then t1.freezamount-t2.amount else 0 end " +
+                        "WHERE t1.sa_accountbalanceid="+accountbalancerows.get(0).getLong("sa_accountbalanceid")+" and t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
+                dbConnect.runSqlUpdate("delete from sa_accountbalance_freez t1 WHERE t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
             }
         }else{
             dbConnect.runSqlUpdate("update sa_order set status='审核',closeby='',closedate=null where sa_orderid=" +sa_orderid);

+ 5 - 4
src/custom/restcontroller/webmanage/sale/sendplan/sendplandetail.java

@@ -422,11 +422,12 @@ public class sendplandetail extends Controller {
                     sqlFactorydetail.addParameter("st_stockbillid", st_stockbillid);
 
                     if (orderdetailsRowsMap.containsKey(jsonObject.getLongValue("sa_orderitemsid"))) {
+                        BigDecimal defaultprice = orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getBigDecimal("price").subtract(orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getBigDecimal("custamount"));
                         sqlFactorydetail.addParameter("remarks", orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getString("remarks"));
-                        sqlFactorydetail.addParameter("price", orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getBigDecimal("price"));
-                        sqlFactorydetail.addParameter("amount", orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getBigDecimal("price").multiply(qty));
-                        sqlFactorydetail.addParameter("defaultprice", orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getBigDecimal("defaultprice"));
-                        sqlFactorydetail.addParameter("custamount", orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getString("custamount"));
+                        sqlFactorydetail.addParameter("price", defaultprice);
+                        sqlFactorydetail.addParameter("amount", defaultprice.multiply(qty));
+                        sqlFactorydetail.addParameter("defaultprice", defaultprice);
+                        sqlFactorydetail.addParameter("custamount", orderdetailsRowsMap.get(jsonObject.getLongValue("sa_orderitemsid")).get(0).getBigDecimal("custamount"));
                     } else {
                         sqlFactorydetail.addParameter("remarks", "");
                         sqlFactorydetail.addParameter("price", 0);

+ 7 - 5
src/custom/restcontroller/webmanage/sale/stockbill/stockbillitems.java

@@ -68,7 +68,7 @@ public class stockbillitems extends Controller {
 //
 //        Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "sa_orderitemsid", "sa_orderid",
-                "itemid","unit","undeliqty","remarks","rowno","customproperties","price","defaultprice");
+                "itemid","unit","undeliqty","remarks","rowno","customproperties","price","defaultprice","custamount");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t2", "t1.siteid = t2.siteid and t1.itemid = t2.itemid","itemno","itemname","model","spec","batchcontrol","icaddqty","icminqty","outplace");
         querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t3", "t1.siteid=t3.siteid and t1.sa_orderid=t3.sa_orderid","sonum","billdate","createdate","submitdate","checkdate","typemx","abstract","delivery","invoicename","invoicetaxno","invoiceaddress");
@@ -222,15 +222,16 @@ public class stockbillitems extends Controller {
                 insertSQL.setValue("itemid", iteminfo.getStringValue("itemid"));
                 insertSQL.setValue("sa_orderid", iteminfo.getLongValue("sa_orderid"));
                 insertSQL.setValue("qty", iteminfo.getStringValue("qty"));
-                insertSQL.setValue("discountrate", iteminfo.getBigDecimal("discountrate"));
+                insertSQL.setValue("discountrate",1);
                 insertSQL.setValue("sa_dispatch_itemsid", 0);
-                insertSQL.setValue("defaultprice", iteminfo.getStringValue("defaultprice"));
+                insertSQL.setValue("defaultprice", iteminfo.getBigDecimal("price").subtract(iteminfo.getBigDecimal("custamount")));
                 insertSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
                 insertSQL.setValue("itemno", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getString("itemno"):iteminfo.getString("itemno"));
                 insertSQL.setValue("itemname", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getString("itemname"):iteminfo.getString("itemname"));
                 insertSQL.setValue("model", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getString("model"):iteminfo.getString("model"));
-                insertSQL.setValue("price", iteminfo.getBigDecimal("price"));
-                insertSQL.setValue("amount", iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price")));
+                insertSQL.setValue("price",iteminfo.getBigDecimal("price").subtract(iteminfo.getBigDecimal("custamount")));
+                insertSQL.setValue("amount", iteminfo.getBigDecimal("qty").multiply((iteminfo.getBigDecimal("price").subtract(iteminfo.getBigDecimal("custamount")))));
+                insertSQL.setValue("custamount", iteminfo.getBigDecimal("custamount"));
                 insertSQL.setValue("untaxedprice", iteminfo.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP));
                 insertSQL.setValue("untaxedamount", iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP)));
                 insertSQL.setValue("skucontrol", itemRowsMap.containsKey(iteminfo.getStringValue("itemid"))?itemRowsMap.get(iteminfo.getStringValue("itemid")).get(0).getBoolean("skucontrol"):iteminfo.getBoolean("skucontrol"));
@@ -278,6 +279,7 @@ public class stockbillitems extends Controller {
                         updateSQL.setValue("model", iteminfo.getString("model"));
                         updateSQL.setValue("price", iteminfo.getString("price"));
                         updateSQL.setValue("amount", iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price")));
+                        updateSQL.setValue("custamount", iteminfo.getBigDecimal("custamount"));
                         updateSQL.setValue("untaxedprice", iteminfo.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP));
                         updateSQL.setValue("untaxedamount", iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP)));
                         updateSQL.setValue("batchno", iteminfo.getString("batchno"));