Browse Source

Merge remote-tracking branch 'origin/develop' into develop

shenjingwei 4 months ago
parent
commit
baa1cb5c1a

+ 56 - 1
src/custom/beans/stockbill/bills/BasicBill.java

@@ -86,6 +86,23 @@ public abstract class BasicBill {
             if (itemRows.min("qty").doubleValue() < 0) {
                 throw new YosException("表体数量不能小于0");
             }
+            if(rb==0){
+                Rows olditemRows =dbConnect.runSqlQuery("select * from st_stockbill_items where siteid='"+siteid+"' and st_stockbillid="+billRow.getLong("sourceid"));
+                RowsMap olditemRowsMap = olditemRows.toRowsMap("st_stockbill_itemsid");
+                for (Row row :itemRows){
+                    if(!row.getString("sourceobject").equals("st_stockbill_items")){
+                        throw new YosException("行号为:" + row.getString("rowno") + "的物料不在原单中,不可进行红冲");
+                    }
+                    if(olditemRowsMap.containsKey(row.getString("sourceid"))){
+                        Row row1=olditemRowsMap.get(row.getString("sourceid")).get(0);
+                        if(row.getBigDecimal("qty").compareTo((row1.getBigDecimal("qty").subtract(row1.getBigDecimal("hongqty"))))>0){
+                            throw new YosException("行号为:" + row.getString("rowno") + "的商品红冲数量超过原单可红冲数量"+row1.getBigDecimal("qty").subtract(row1.getBigDecimal("hongqty")));
+                        }
+                    }else{
+                        throw new YosException("行号为:" + row.getString("rowno") + "的物料不在原单中,不可进行红冲");
+                    }
+                }
+            }
         } else {
             if (!status.equals("审核")) {
                 throw new YosException("单号为:【" + billno + "】的出入库单为非审核状态,无法反审核");
@@ -97,6 +114,8 @@ public abstract class BasicBill {
         ArrayList<String> sqlList = new ArrayList<>();
         sqlList.addAll(updateInvbal(ischeck));//更新库存
         sqlList.addAll(updateMCode(ischeck));//更新序列号
+        sqlList.addAll(updateHongqty(ischeck));//更新红冲数量
+        sqlList.addAll(updateStatus(ischeck));//更新状态
         return sqlList;
     }
 
@@ -158,6 +177,42 @@ public abstract class BasicBill {
         }
         return sqlList;
     }
+    /**
+     * 更新已红冲数量
+     *
+     * @param ischeck
+     * @return
+     * @throws YosException
+     */
+    private ArrayList<String> updateHongqty(boolean ischeck) throws YosException {
+        ArrayList<String> sqlList = new ArrayList<>();
+        if(rb==0){
+            for (Row row : itemRows) {
+                long sourceid = row.getLong("sourceid");
+                BigDecimal qty = ischeck ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
+                sqlList.add("update st_stockbill_items set hongqty=ifnull(hongqty,0)+"+qty+" where st_stockbill_itemsid="+sourceid);
+            }
+        }
+        return sqlList;
+    }
+
+    /**
+     * 更新状态
+     *
+     * @param ischeck
+     * @return
+     * @throws YosException
+     */
+    private ArrayList<String> updateStatus(boolean ischeck) throws YosException {
+        ArrayList<String> sqlList = new ArrayList<>();
+
+        if(ischeck){
+            sqlList.add("update st_stockbill set status='审核',checkby='"+ controller.username+"',checkdate=CURRENT_TIMESTAMP where st_stockbillid = "+st_stockbillid+" and siteid='"+siteid+"'");
+        }else{
+            sqlList.add("update st_stockbill set status='新建',checkby='',checkdate=null where st_stockbillid = "+st_stockbillid+" and siteid='"+siteid+"'");
+        }
+        return sqlList;
+    }
 
     /**
      * 更新序列号
@@ -214,7 +269,7 @@ public abstract class BasicBill {
         this.siteid = billRow.getString("siteid");
         this.status = billRow.getString("status");
         itemRows = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='" + st_stockbillid + "'");
-        codeRows = dbConnect.runSqlQuery("select t1.* from st_stockbill_items_sku  where t1.st_stockbillid ='" + st_stockbillid + "'");
+        codeRows = dbConnect.runSqlQuery("select t1.* from st_stockbill_items_sku t1 where t1.st_stockbillid ='" + st_stockbillid + "'");
     }
 
 

+ 5 - 0
src/custom/restcontroller/R.java

@@ -6327,6 +6327,11 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID2025072809441203 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 9 - 0
src/custom/restcontroller/sale/serviceorder/serviceorder.java

@@ -229,6 +229,8 @@ public class serviceorder extends Controller {
     @CACHEING_CLEAN(apiversions = {serviceorder.class, restcontroller.webmanage.sale.serviceorder.serviceorder.class})
     public String refuse() throws YosException {
         Long sa_serviceorderid = content.getLong("sa_serviceorderid");
+        String refusereason = content.getStringValue("refusereason");
+        String refuseremarks = content.getStringValue("refuseremarks");
         Rows rows = dbConnect
                 .runSqlQuery("select sa_serviceorderid,status,billno,sys_enterpriseid,province,city,county from sa_serviceorder where sa_serviceorderid ='"
                         + sa_serviceorderid + "' and  siteid='" + siteid + "'");
@@ -237,6 +239,10 @@ public class serviceorder extends Controller {
                 return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非待受理状态,无法拒绝受理")
                         .toString();
             }
+            if (StringUtils.isBlank(row.getString("refusereason"))) {
+                return getErrReturnObject().setErrMsg("拒绝原因为空,无法拒绝受理")
+                        .toString();
+            }
         }
         ArrayList<String> sqlList = new ArrayList<>();
 
@@ -244,6 +250,9 @@ public class serviceorder extends Controller {
         updateSQL.setUniqueid(sa_serviceorderid);
         updateSQL.setSiteid(siteid);
         updateSQL.setValue("status", "拒绝受理");
+        updateSQL.setValue("refusereason", refusereason);
+        updateSQL.setValue("refuseremarks", refuseremarks);
+
         updateSQL.setValue("changeby", username);
         updateSQL.setDateValue("changedate");
         sqlList.add(updateSQL.getSQL());

+ 3 - 1
src/custom/restcontroller/webmanage/sale/serviceorder/serviceorder.java

@@ -517,7 +517,7 @@ public class serviceorder extends Controller {
 
 
         sqlList.add(sqlFactory.getSQL());
-        sqlList.add("update sa_serviceorder set status='处理' where sa_serviceorderid=" + sa_serviceorderid);
+        sqlList.add("update sa_serviceorder set status='处理' where sa_serviceorderid=" + sa_serviceorderid);
         if (projectlearders != null && !projectlearders.isEmpty()) {
             sqlList.add("delete from sys_datateam where ownertable='sa_workorder' and ownerid="
                     + sa_workorderid + " and siteid='" + siteid + "'");
@@ -642,6 +642,8 @@ public class serviceorder extends Controller {
                 workpresetInfo.setRequired(row.getLong("required"));
                 workpresetInfo.setTextedit(row.getLong("textedit"));
                 workpresetInfo.setSignature(row.getLong("signature"));
+                workpresetInfo.setPasscheck(row.getString("passcheck"));
+                workpresetInfo.setQuestionedit(row.getString("questionedit"));
                 String workpresetjson = JSONObject.toJSONString(workpresetInfo);
                 SQLFactory sqlFactory = new SQLFactory(this, "服务工单流程节点新增");
                 long sa_workorder_nodeid = createTableID("sa_workorder_node");

+ 114 - 1
src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java

@@ -192,7 +192,18 @@ public class stockbill extends Controller {
                 where.append(")");
             }
             if (whereObject.containsKey("type") && !"".equals(whereObject.getString("type"))) {
-                where.append(" and t1.type ='").append(whereObject.getString("type")).append("' ");
+                JSONArray jsonArray =whereObject.getJSONArray("type");
+                if(!jsonArray.isEmpty()){
+                    StringBuffer str=new StringBuffer("(");
+                    for(Object o :jsonArray){
+                        str.append("'"+(String)o+"',");
+                    }
+                    String result = str.substring(0, str.length() - 1);
+                    result=result+")";
+                    where.append(" and(");
+                    where.append("t1.type in"+result);
+                    where.append(")");
+                }
             }
             if (whereObject.containsKey("typemx") && !"".equals(whereObject.getString("typemx"))) {
                 where.append(" and t1.typemx ='").append(whereObject.getString("typemx")).append("' ");
@@ -647,6 +658,108 @@ public class stockbill extends Controller {
         return getSucReturnObject().toString();
     }
 
+    @API(title = "红冲", apiversion = R.ID2025072409344603.v1.class)
+    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
+    public String hongc() throws YosException {
+        long st_stockbillid=content.getLong("st_stockbillid");
+        ArrayList<String> sqlList = new ArrayList<>();
+        Rows rows = dbConnect.runSqlQuery("select t1.*,ifnull(t2.sa_sendrepairid,0) sa_sendrepairid from st_stockbill t1 left join sa_sendrepair t2 on t1.st_stockbillid=t2.sourceid and t1.siteid=t2.siteid and t2.sourcetable='st_stockbill'  where t1.st_stockbillid ='"
+                + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+        Rows rowsdetail = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='"
+                + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+        if(rows.isEmpty()){
+            return getErrReturnObject().setErrMsg("该出入库单不存在")
+                    .toString();
+        }
+        if(!rows.get(0).getString("status").equals("审核")){
+            return getErrReturnObject().setErrMsg("非审核的出入库单无法红冲")
+                    .toString();
+        }
+        if(rows.get(0).getInteger("rb")==0){
+            return getErrReturnObject().setErrMsg("只能红冲蓝字出入库单")
+                    .toString();
+        }
+        if(rows.get(0).getInteger("sa_sendrepairid")!=0){
+            return getErrReturnObject().setErrMsg("来源于送修单的出库单不能红冲")
+                    .toString();
+        }
+
+        st_stockbillid = createTableID("st_stockbill");
+        InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
+        insertSQL.setUniqueid(st_stockbillid);
+        insertSQL.setSiteid(siteid);
+        insertSQL.setValue("sys_enterpriseid", rows.get(0).getLong("sys_enterpriseid"));
+        insertSQL.setValue("rec_contactsid", rows.get(0).getLong("rec_contactsid"));
+        insertSQL.setValue("departmentid", rows.get(0).getLong("departmentid"));
+        insertSQL.setValue("stockid", rows.get(0).getLong("stockid"));
+        insertSQL.setValue("type", rows.get(0).getString("type"));
+        insertSQL.setValue("typemx", rows.get(0).getString("typemx"));
+        insertSQL.setValue("sa_supplierid", rows.get(0).getLong("sa_supplierid"));
+        insertSQL.setValue("rb", 0);
+        insertSQL.setValue("remarks", rows.get(0).getString("remarks"));
+        insertSQL.setValue("billdate", getDateTime_Str());
+        insertSQL.setValue("billno", createBillCode("stockbill"));
+        insertSQL.setValue("outplace",  rows.get(0).getString("outplace"));
+        insertSQL.setValue("delivery",  rows.get(0).getString("delivery"));
+        insertSQL.setValue("invoice_enterprisename",  rows.get(0).getString("invoice_enterprisename"));
+        insertSQL.setValue("invoice_address",  rows.get(0).getString("invoice_address"));
+        insertSQL.setValue("invoice_taxno",  rows.get(0).getString("invoice_taxno"));
+        insertSQL.setValue("tracknumber",  rows.get(0).getString("tracknumber"));
+        insertSQL.setValue("isconfirm",  rows.get(0).getString("isconfirm"));
+
+        insertSQL.setValue("sourceobject",  "st_stockbill");
+        insertSQL.setValue("sourceid",  rows.get(0).getLong("st_stockbillid"));
+
+        insertSQL.setValue("period", rows.get(0).getString("period"));
+
+        insertSQL.setValue("createby", username);
+        insertSQL.setDateValue("createdate");
+        insertSQL.setValue("changeby", username);
+        insertSQL.setDateValue("changedate");
+        insertSQL.setValue("status", "新建");
+        insertSQL.setValue("payamount", 0);
+        insertSQL.setValue("paydiscountamount", 0);
+        sqlList.add(insertSQL.getSQL());
+
+        int i = 0;
+        for(Row row : rowsdetail){
+            InsertSQL  insertDetailSQL= SQLFactory.createInsertSQL(this, "st_stockbill_items");
+            insertDetailSQL.setUniqueid(createTableID("st_stockbill_items"));
+            insertDetailSQL.setSiteid(siteid);
+            insertDetailSQL.setValue("rowno",   i + 1);
+            insertDetailSQL.setValue("st_stockbillid", st_stockbillid);
+            insertDetailSQL.setValue("sa_orderitemsid", row.getLong("sa_orderitemsid"));
+            insertDetailSQL.setValue("itemid", row.getString("itemid"));
+            insertDetailSQL.setValue("sa_orderid", row.getString("sa_orderid"));
+            insertDetailSQL.setValue("qty", row.getString("qty"));
+            insertDetailSQL.setValue("discountrate", row.getBigDecimal("discountrate"));
+            insertDetailSQL.setValue("sa_dispatch_itemsid", 0);
+            insertDetailSQL.setValue("defaultprice", row.getBigDecimal("defaultprice"));
+            insertDetailSQL.setValue("remarks", row.getString("remarks"));
+            insertDetailSQL.setValue("sku", row.getString("sku"));
+            insertDetailSQL.setValue("itemno", row.getString("itemno"));
+            insertDetailSQL.setValue("itemname", row.getString("itemname"));
+            insertDetailSQL.setValue("model", row.getString("model"));
+            insertDetailSQL.setValue("price", row.getBigDecimal("price"));
+            insertDetailSQL.setValue("stockid", row.getString("stockid"));
+            insertDetailSQL.setValue("amount", row.getBigDecimal("qty").multiply(row.getBigDecimal("price")));
+            insertDetailSQL.setValue("untaxedprice", row.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP));
+            insertDetailSQL.setValue("untaxedamount", row.getBigDecimal("qty").multiply(row.getBigDecimal("price").divide(new BigDecimal(1.13),2, BigDecimal.ROUND_HALF_UP)));
+
+            insertDetailSQL.setValue("sourceid", row.getLong("st_stockbill_itemsid"));
+            insertDetailSQL.setValue("sourceobject", "st_stockbill_items");
+            sqlList.add(insertDetailSQL.getSQL());
+        }
+
+        sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
+
+        dbConnect.runSqlUpdate(sqlList);
+        content.put("st_stockbillid", st_stockbillid);
+
+
+        return queryStockbillMain();
+    }
+
 
     @API(title = "更新站点信息详情详情", apiversion = R.ID20230720143503.v1.class)
     public String updateParameterSiteInfo() throws YosException {

+ 3 - 1
src/custom/restcontroller/webmanage/sale/workorder/SQL/服务工单列表查询.sql

@@ -2,6 +2,8 @@ select  t1.*,
         t2.billno servicebillno,
         t2.class1,
         t2.class2,
+        t2.name customername,
+        t2.phonenumber customerphonenumber,
         t4.name templatename,
         t6.agentnum,
         t5.abbreviation,
@@ -23,7 +25,7 @@ select  t1.*,
 		t9.spec,
         t10.enterprisename serviceenterprisename,
         t10.abbreviation serviceabbreviation,
-        t10.phonenumber servicephonenumber,
+        t10.phonenumber servicephonenumber
         from  sa_workorder t1 
    left join sa_serviceorder t2 on t1.sa_serviceorderid=t2.sa_serviceorderid and t1.siteid=t2.siteid 
    left join sa_workorder_template t4 on t1.sa_workorder_templateid=t4.sa_workorder_templateid and t1.siteid=t4.siteid

+ 1 - 1
src/custom/restcontroller/webmanage/sale/workorder/SQL/服务工单模板明细列表查询.sql

@@ -1 +1 @@
-SELECT t1.*,t2.workname,t2.remarks,t2.additem, t2.itemtype,t2.contractupload,t2.fileupload,t2.textedit,t2.confirm,t2.confirm_options,t2.amountpay,t2.required,t2.signature FROM sa_workorder_template_works t1 left join sa_workpreset t2 on t2.sa_workpresetid=t1.sa_workpresetid and  t1.siteid=t2.siteid where t1.siteid=$siteid$ and t1.sa_workorder_templateid=$sa_workorder_templateid$  and t1.parentid=$parentid$  and $where$
+SELECT t1.*,t2.workname,t2.remarks,t2.additem, t2.itemtype,t2.contractupload,t2.fileupload,t2.textedit,t2.confirm,t2.confirm_options,t2.amountpay,t2.required,t2.signature,t2.passcheck,t2.questionedit  FROM sa_workorder_template_works t1 left join sa_workpreset t2 on t2.sa_workpresetid=t1.sa_workpresetid and  t1.siteid=t2.siteid where t1.siteid=$siteid$ and t1.sa_workorder_templateid=$sa_workorder_templateid$  and t1.parentid=$parentid$  and $where$

+ 7 - 2
src/custom/restcontroller/webmanage/sale/workorder/SQL/服务工单状态统计.sql

@@ -2,12 +2,17 @@ select COUNT(1) totalCount,
     ifnull(SUM(CASE WHEN t1.status = '待接单' THEN 1 ELSE 0 END),0) toacceptCount,
 	ifnull(SUM(CASE WHEN t1.status = '待开始' THEN 1 ELSE 0 END),0) tostartCount,
 	ifnull(SUM(CASE WHEN t1.status = '进行中' THEN 1 ELSE 0 END),0) startingCount,
-	ifnull(SUM(CASE WHEN t1.status = '已完' THEN 1 ELSE 0 END),0) completeCount,
-	ifnull(SUM(CASE WHEN t1.status = '暂停' THEN 1 ELSE 0 END),0) tostopCount
+	ifnull(SUM(CASE WHEN t1.status = '已完' THEN 1 ELSE 0 END),0) completeCount,
+	ifnull(SUM(CASE WHEN t1.status = '提交' THEN 1 ELSE 0 END),0) submitCount
 from sa_workorder t1
    left join sa_serviceorder t2 on t1.sa_serviceorderid=t2.sa_serviceorderid and t1.siteid=t2.siteid 
    left join sa_workorder_template t4 on t1.sa_workorder_templateid=t4.sa_workorder_templateid and t1.siteid=t4.siteid
    left join sys_enterprise t5 on t5.sys_enterpriseid=t1.sys_enterpriseid and t1.siteid=t5.siteid
    left join sa_agents t6 on t6.sys_enterpriseid=t1.sys_enterpriseid and t1.siteid=t6.siteid
    left join sys_hr t7 on t7.hrid=t2.saler_hrid and t7.siteid=t2.siteid
+   left join (SELECT * FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY sa_serviceorderid ORDER BY sa_serviceorderitemsid ASC) AS rowno FROM sa_serviceorderitems) t WHERE rowno = 1) t8 on t8.sa_serviceorderid=t1.sa_serviceorderid and t8.siteid=t1.siteid
+   left join plm_item t9 on t9.itemid=t8.itemid and t9.siteid=t8.siteid
+   LEFT JOIN sys_enterprise t10 ON t10.sys_enterpriseid = t2.sys_enterpriseid_service
+    AND t10.siteid = t2.siteid
+   LEFT JOIN sa_agents t11 ON t11.sys_enterpriseid = t10.sys_enterpriseid
 where t1.siteid=$siteid$ and t1.status<>'作废' 

+ 1 - 0
src/custom/restcontroller/webmanage/sale/workorder/SQL/服务工单节点查询全部.sql

@@ -0,0 +1 @@
+select * from (SELECT * FROM(SELECT( @i := CASE WHEN ( @parentid = parentid AND @sa_workorderid = sa_workorderid ) THEN @i + 1 ELSE 1 END ) rownum,( @parentid := parentid ),( @sa_workorderid := sa_workorderid ),( @siteid := siteid ),b.* FROM	sa_workorder_node b,( SELECT @i:= 0, @parentid := '', @sa_workorderid := '', @siteid := '' ) AS a )t)t where sa_workorderid=$sa_workorderid$ and siteid=$siteid$

+ 114 - 9
src/custom/restcontroller/webmanage/sale/workorder/workorder.java

@@ -17,6 +17,7 @@ import restcontroller.webmanage.executorService.Executor;
 import restcontroller.webmanage.sale.order.Order;
 import restcontroller.webmanage.sale.order.OrderItems;
 import restcontroller.webmanage.sale.serviceorder.serviceorder;
+import restcontroller.webmanage.sale.serviceorder.tools.VerificationManage;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
@@ -25,6 +26,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.regex.Pattern;
 
 /**
  * 服务工单管理
@@ -172,6 +174,9 @@ public class workorder extends Controller {
         sqlFactory.addParameter("siteid", siteid);
         Rows rows = dbConnect.runSqlQuery(sqlFactory);
         Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
+
+        RowsMap rowsMapdetails = queryWorkOrderNodedetails(sa_workorderid);
+
         if (!row.isEmpty()) {
             /** 工单工序查询 **/
             Rows rowsOneLevelWorkpreset = dbConnect
@@ -201,6 +206,7 @@ public class workorder extends Controller {
                     }
                     rowOneLevel.put("attinfos",
                             attRowsMap.get(rowOneLevel.getString("sa_workorder_nodeid")));
+                    rowOneLevel.put("detail",rowsMapdetails.get(rowOneLevel.getString("sa_workorder_nodeid")));
                     Rows lowerRows = rowsTwoLevelMap.get(rowOneLevel.getString("sa_workorder_nodeid"));
                     if (!lowerRows.isEmpty()) {
                         for (Row lowerRow : lowerRows) {
@@ -210,6 +216,7 @@ public class workorder extends Controller {
 
                             lowerRow.put("attinfos",
                                     attRowsMap.get(lowerRow.getString("sa_workorder_nodeid")));
+                            lowerRow.put("detail",rowsMapdetails.get(lowerRow.getString("sa_workorder_nodeid")));
                         }
                     }
                     rowOneLevel.put("child", lowerRows);
@@ -236,16 +243,94 @@ public class workorder extends Controller {
         return getSucReturnObject().setData(row).toString();
     }
 
+    public RowsMap queryWorkOrderNodedetails(long sa_workorderid) throws YosException {
+        SQLFactory sqlFactory = new SQLFactory(this, "服务工单节点查询全部");
+        sqlFactory.addParameter("sa_workorderid", sa_workorderid);
+        sqlFactory.addParameter("siteid", siteid);
+        //System.out.println(sqlFactory.getSQL());
+        Rows rows = dbConnect.runSqlQuery(sqlFactory);
+        Rows sa_workorder_templateids = dbConnect.runSqlQuery("select sa_workorder_templateid from sa_workorder where sa_workorderid=" + sa_workorderid);
+        long sa_workorder_templateid = 0;
+        if (!sa_workorder_templateids.isEmpty()) {
+            sa_workorder_templateid = sa_workorder_templateids.get(0).getLong("sa_workorder_templateid");
+        }
+
+        Rows workorderteamRows = dbConnect
+                .runSqlQuery("select * from sys_datateam where ownertable='sa_workorder_node' and siteid='" + siteid
+                        + "'");
+        RowsMap workorderteamRowsMap = workorderteamRows.toRowsMap("ownerid");
+
+        /** 工单节点物料查询 **/
+        Rows oldworkorderitemRows = dbConnect.runSqlQuery(
+                "select t1.*,t2.itemno,t2.model,t2.itemname,t2.spec from sa_workorder_node_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where  t1.sa_workorderid=" + sa_workorderid + " and ifnull(t1.isnew,0)=0 and t1.siteid='"
+                        + siteid + "'");
+        RowsMap oldworkorderitemRowsMap = oldworkorderitemRows.toRowsMap("sa_workorder_nodeid");
+
+        Rows newworkorderitemRows = dbConnect.runSqlQuery(
+                "select t1.*,t2.itemno,t2.model,t2.itemname,t2.spec from sa_workorder_node_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.sa_workorderid=" + sa_workorderid + " and ifnull(t1.isnew,0)=1 and t1.siteid='"
+                        + siteid + "'");
+        RowsMap newworkorderitemRowsMap = newworkorderitemRows.toRowsMap("sa_workorder_nodeid");
+
+        /** 节点关联培训人员查询 **/
+        Rows trainers = dbConnect.runSqlQuery(
+                "select t1.sa_workorder_node_teamid,t1.createuserid,t1.createby,t1.createdate,t1.sa_workorderid,t1.sa_workorder_nodeid,if(t1.userid>0,t3.name,t1.name) name,if(t1.userid>0,t3.phonenumber,t1.phonenumber) phonenumber,if(t1.userid>0,t3.position,t1.position) position,t2.enterprisename,t2.phonenumber enterprisephonenumber from sa_workorder_node_team t1 left join sys_enterprise t2 on t1.sys_enterpriseid=t2.sys_enterpriseid and t1.siteid=t2.siteid left join sys_hr t3 on t1.userid=t3.userid and t1.siteid=t3.siteid  where t1.sa_workorderid=" + sa_workorderid + " and t1.siteid='"
+                        + siteid + "'");
+        RowsMap trainersRowsMap = trainers.toRowsMap("sa_workorder_nodeid");
+        for(Row row :rows){
+            if (row.getJSONObject("workpresetjson") == null || row.getJSONObject("workpresetjson").isEmpty()) {
+                if (row.getLong("parentid") == 0) {
+                    row.put("workpresetjson", queryCorrespondingWorkpresetInfo(sa_workorder_templateid, row.getString("rownum"), 0));
+                } else {
+                    Rows sa_workorder_template_worksids = dbConnect.runSqlQuery("select sa_workorder_template_worksid from  sa_workorder_template_works  where sa_workorder_templateid=" + sa_workorder_templateid + " and parentid=0 and sequence=(select t.rownum from  (SELECT * FROM(SELECT( @i := CASE WHEN ( @parentid = parentid AND @sa_workorderid = sa_workorderid ) THEN @i + 1 ELSE 1 END ) rownum,( @parentid := parentid ),( @sa_workorderid := sa_workorderid ),( @siteid := siteid ),b.* FROM	sa_workorder_node b,( SELECT @i:= 0, @parentid := '', @sa_workorderid := '', @siteid := '' ) AS a )t) t where t.sa_workorder_nodeid=" + row.getLong("parentid") + ")");
+                    if (!sa_workorder_template_worksids.isEmpty()) {
+                        row.put("workpresetjson", queryCorrespondingWorkpresetInfo(sa_workorder_templateid, row.getString("sequence"), sa_workorder_template_worksids.get(0).getLong("sa_workorder_template_worksid")));
+                    }
+
+                }
+            } else {
+                row.put("workpresetjson", JSONObject.parseObject(row.getString("workpresetjson"))); // 转化成json
+            }
+
+            /** 工单节点附件 **/
+            ArrayList<Long> ids = rows.toArrayList("sa_workorder_nodeid", new ArrayList<>());
+            RowsMap attRowsMap = getAttachmentUrl("sa_workorder_node", ids);
+            row.put("attinfos", attRowsMap.get(row.getString("sa_workorder_nodeid")));
+            /** 工单节点团队查询 **/
+
+            row.put("team", workorderteamRowsMap.get(row.getString("sa_workorder_nodeid")));
+
+            /** 工单节点物料查询 **/
+            row.put("oldtitems", oldworkorderitemRowsMap.get(row.getString("sa_workorder_nodeid")));
+
+
+            row.put("newtitems", newworkorderitemRowsMap.get(row.getString("sa_workorder_nodeid")));
+
+//			 /** 节点关联培训物料查询 **/
+//			  Rows traintitem = dbConnect.runSqlQuery("select * from sa_workorder_node_items where sa_workorder_nodeid="+sa_workorder_nodeid+" and sa_workorderid="
+//						+ sa_workorderid+" and siteid='"+siteid+"'");
+//			  row.put("traintitem", traintitem);
+
+            /** 节点关联培训人员查询 **/
+
+            row.put("trainers", trainersRowsMap.get(row.getString("sa_workorder_nodeid")));
+        }
+
+        return rows.toRowsMap("sa_workorder_nodeid");
+    }
+
     @API(title = "查询服务工单列表", apiversion = R.ID20230208140203.v1.class)
     @CACHEING
     public String queryworkorderList() throws YosException {
 
         StringBuffer where = new StringBuffer(" 1=1 ");
-//        if (!content.getBooleanValue("isadmin")) {
-//            where.append(
-//                            " and exists(select 1 from sys_datateam where ownerid=t1.sa_workorderid and ownertable='sa_workorder' and userid='")
-//                    .append(userid).append("')");
-//        }
+        if (!content.getBooleanValue("isadmin")) {
+            where.append(
+                            " and exists(select 1 from sys_datateam where ownerid=t1.sa_workorderid and ownertable='sa_workorder' and userid='")
+                    .append(userid).append("')");
+        }
+        if(sys_enterpriseid!=0){
+            where.append(" and t2.sys_enterpriseid_service ='").append(sys_enterpriseid).append("'");
+        }
 
         if (content.containsKey("where")) {
             JSONObject whereObject = content.getJSONObject("where");
@@ -255,6 +340,7 @@ public class workorder extends Controller {
                 where.append("or t1.remarks 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("'");
             }
@@ -656,8 +742,8 @@ public class workorder extends Controller {
             sa_serviceorderid = rows.get(0).getLong("sa_serviceorderid");
         }
         for (Row row : rows) {
-            if (row.getString("status").equals("已完")) {
-                return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的工单为非已完状态,无法作废工单")
+            if (row.getString("status").equals("已完")) {
+                return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的工单为非已完状态,无法作废工单")
                         .toString();
             }
         }
@@ -757,7 +843,7 @@ public class workorder extends Controller {
                         + "' and sa_workorderid !=" + sa_workorderid);
         boolean isallcomplete = true;
         for (int i = 0; i < workorders.size(); i++) {
-            if (!workorders.get(i).getString("status").equals("已完")
+            if (!workorders.get(i).getString("status").equals("已完")
                     && !workorders.get(i).getString("status").equals("关闭")
                     && !workorders.get(i).getString("status").equals("作废")) {
                 isallcomplete = false;
@@ -799,7 +885,7 @@ public class workorder extends Controller {
 
         }
 
-        sqlList.add("update sa_workorder set status='已完',finishby='" + username
+        sqlList.add("update sa_workorder set status='已完',finishby='" + username
                 + "',finishdate=CURRENT_TIME  where sa_workorderid=" + sa_workorderid);
         sqlList.add(DataContrlLog.createLog(this, "sa_workorder", sa_workorderid, "工单完结", "服务工单完结成功").getSQL());
 
@@ -808,6 +894,21 @@ public class workorder extends Controller {
         return getSucReturnObject().toString();
     }
 
+    @API(title = "验证手机", apiversion = R.ID2025072809441203.v1.class, accesstoken = false)
+    @CACHEING
+    public String sendMessage() throws YosException {
+        String customerphone = content.getStringValue("customerphone");
+        if (!Pattern.matches("^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$", customerphone)) {
+            return getErrReturnObject().setErrMsg("手机格式有误").toString();
+        }
+        Rows rows = dbConnect.runSqlQuery("select t1.*,t2.accountno,t3.isservice from sys_enterprise_hr t1 inner join sys_users t2 on t2.userid = t1.userid inner join  sa_agents t3 on t1.sys_enterpriseid=t3.sys_enterpriseid where t1.siteid='" + siteid + "' and t3.isservice=1 and t1.phonenumber=" + customerphone);
+        if (rows.isEmpty()) {
+            return getErrReturnObject().setErrMsg("您的手机号暂无使用权限!").toString();
+        }
+
+        return getSucReturnObject().toString();
+    }
+
     private ArrayList<String> getAddWorkorderNodeSql(long sa_workorder_templateid, long sa_workorderid)
             throws YosException {
         ArrayList sqList = new ArrayList<String>();
@@ -831,6 +932,8 @@ public class workorder extends Controller {
                 workpresetInfo.setRequired(row.getLong("required"));
                 workpresetInfo.setTextedit(row.getLong("textedit"));
                 workpresetInfo.setSignature(row.getLong("signature"));
+                workpresetInfo.setPasscheck(row.getString("passcheck"));
+                workpresetInfo.setQuestionedit(row.getString("questionedit"));
                 String workpresetjson = JSONObject.toJSONString(workpresetInfo);
                 SQLFactory sqlFactory = new SQLFactory(this, "服务工单流程节点新增");
                 long sa_workorder_nodeid = createTableID("sa_workorder_node");
@@ -1001,6 +1104,8 @@ public class workorder extends Controller {
             workpresetInfo.setRequired(row.getLong("required"));
             workpresetInfo.setTextedit(row.getLong("textedit"));
             workpresetInfo.setSignature(row.getLong("signature"));
+            workpresetInfo.setPasscheck(row.getString("passcheck"));
+            workpresetInfo.setQuestionedit(row.getString("questionedit"));
             jsonObject = JSONArray.parseObject(JSON.toJSONString(workpresetInfo));
 
         }

+ 2 - 2
src/custom/restcontroller/webmanage/sale/workorder/workorderTemplateWorks.java

@@ -82,7 +82,7 @@ public class workorderTemplateWorks extends Controller{
 		 * 查询所有指定工单模板的服务工单模板明细
 		 */
 		Rows allrows = dbConnect.runSqlQuery(
-				"SELECT t1.*,t2.workname,t2.remarks,t2.additem, t2.itemtype,t2.contractupload,t2.fileupload,t2.textedit,t2.confirm,t2.confirm_options,t2.amountpay,t2.required,t2.signature FROM sa_workorder_template_works t1 left join sa_workpreset t2 on t2.sa_workpresetid=t1.sa_workpresetid and  t1.siteid=t2.siteid where t1.siteid='"
+				"SELECT t1.*,t2.workname,t2.remarks,t2.additem, t2.itemtype,t2.contractupload,t2.fileupload,t2.textedit,t2.confirm,t2.confirm_options,t2.amountpay,t2.required,t2.signature,t2.passcheck,t2.questionedit FROM sa_workorder_template_works t1 left join sa_workpreset t2 on t2.sa_workpresetid=t1.sa_workpresetid and  t1.siteid=t2.siteid where t1.siteid='"
 						+ siteid + "' and t1.sa_workorder_templateid ="+sa_workorder_templateid);
 		/*
 		 * 获取所有一级分类
@@ -132,7 +132,7 @@ public class workorderTemplateWorks extends Controller{
 	 * 递归查询下级服务工单模板明细
 	 *
 	 * @param root
-	 * @param allDepartments
+	 * @param
 	 * @return
 	 */
 	private Rows getSubWorkorderTemplate(Row root, Rows allWorkorderTemplate) {

+ 20 - 1
src/custom/restcontroller/webmanage/sale/workorder/workpresetInfo.java

@@ -17,7 +17,26 @@ public class workpresetInfo {
 	private Long amountpay;
 	private Long required;
 	private Long signature;
-	
+	private String passcheck;
+	private String questionedit;
+
+	public String getPasscheck() {
+		return passcheck;
+	}
+
+	public void setPasscheck(String passcheck) {
+		this.passcheck = passcheck;
+	}
+
+	public String getQuestionedit() {
+		return questionedit;
+	}
+
+	public void setQuestionedit(String questionedit) {
+		this.questionedit = questionedit;
+	}
+
+
 	public String getWorkname() {
 		return workname;
 	}