Quellcode durchsuchen

意见反馈管理

eganwu vor 1 Jahr
Ursprung
Commit
3cf28fd476

+ 24 - 1
src/custom/restcontroller/ClientUserInfo.java

@@ -7,6 +7,7 @@ import common.UserInfo;
 import common.YosException;
 import common.data.Row;
 import common.data.Rows;
+import org.apache.commons.lang.StringUtils;
 
 import java.util.ArrayList;
 
@@ -133,7 +134,7 @@ public class ClientUserInfo extends UserInfo {
     }
 
     //获取微信操作端信息
-    public String getWechatAppPage(String systemclient,String name) throws YosException {
+    public String getWechatAppPage(String systemclient, String name) throws YosException {
         String path = "";
         Rows rows = controller.dbConnect.runSqlQuery("SELECT * from sys_wechatapp  WHERE systemclient='" + systemclient + "'");
         if (rows.isEmpty()) {
@@ -151,4 +152,26 @@ public class ClientUserInfo extends UserInfo {
     }
 
 
+    public String getAreaName(Controller controller) throws YosException {
+        Rows areaRows = controller.dbConnect.runSqlQuery("SELECT DISTINCT t1.areaname from sa_salearea t1 " +
+                "INNER JOIN sys_enterprise_tradefield t2 ON t2.sa_saleareaid = t1.sa_saleareaid " +
+                "WHERE t2.sys_enterpriseid=" + controller.sys_enterpriseid + " and t1.siteid='" + controller.siteid + "'");
+        return StringUtils.join(areaRows.toArray("areaname"), ",");
+    }
+
+    public String getUserRoleName(Controller controller, Long userid) throws YosException {
+        Rows rolenameRows = controller.dbConnect.runSqlQuery("select rolename from sys_userrole t1 " +
+                "inner join sys_role t2 ON t2.roleid=t1.roleid and t2.siteid=t1.siteid " +
+                "WHERE t1.userid=" + userid + " and t1.siteid='" + controller.siteid + "'");
+
+        return StringUtils.join(rolenameRows.toArray("rolename"), ",");
+    }
+
+    public String getSiteLogo(Controller controller) throws YosException {
+        Row row = controller.dbConnect.runSqlQuery(0, "select siteuid,siteid,sitename,enterprisename from sys_site where siteid='" + controller.siteid + "'");
+        Rows rows = controller.getAttachmentUrl("sys_site", row.getLong("siteuid"));
+
+        return rows.isNotEmpty() ? rows.get(0).getString("url") : "";
+    }
+
 }

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

@@ -6488,6 +6488,36 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID20240517102502 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID20240517102602 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID20240517102702 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID20240517102802 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID20240517102902 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID20240517103002 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 35 - 0
src/custom/restcontroller/system/datacomment/datacomment.java

@@ -7,6 +7,8 @@ import common.annotation.API;
 import common.data.*;
 import restcontroller.R;
 
+import java.util.ArrayList;
+
 /**
  * 用户评论
  */
@@ -38,6 +40,9 @@ public class datacomment extends Controller {
         if (ownertable.equals("sat_sharematerial")) {
             updateSharematerial(ownerid);
         }
+        if (ownertable.equals("sa_feedback")) {
+            updateFeedBack(ownerid);
+        }
         return list();
     }
 
@@ -60,6 +65,9 @@ public class datacomment extends Controller {
         if (rows.get(0).getString("ownertable").equals("sat_sharematerial")) {
             updateSharematerial(rows.get(0).getLong("ownerid"));
         }
+        if (rows.get(0).getString("ownertable").equals("sa_feedback")) {
+            updateFeedBack(rows.get(0).getLong("ownerid"));
+        }
 
         return getSucReturnObject().toString();
     }
@@ -75,10 +83,25 @@ public class datacomment extends Controller {
         querySQL.setWhere("ownerid", ownerid);
         querySQL.setPage(pageSize, pageNumber).setOrderBy("t1.createdate desc");
         Rows rows = querySQL.query();
+
+        ArrayList<String> sqlList = new ArrayList<>();
+
         for (Row row : rows) {
             row.put("headpic", getHeadPic(row.getLong("userid")));
+            row.put("rolenames", userInfo.getUserRoleName(this, row.getLong("userid")));
+            row.put("namedetail", row.getString("name")+"("+row.getString("rolenames")+")");
+
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sys_datacomment_read");
+            insertSQL.setSiteid(siteid);
+            insertSQL.setUniqueid(createTableID("sys_datacomment_read"));
+            insertSQL.setValue("userid", userid);
+            insertSQL.setValue("sys_datacommentid", row.getString("sys_datacommentid"));
+            insertSQL.setWhere("not exists(select 1 from  sys_datacomment_read where userid=" + userid + " and sys_datacommentid=" + row.getString("sys_datacommentid") + "  )");
+            sqlList.add(insertSQL.getSQL());
         }
 
+        dbConnect.runSqlUpdate(sqlList);
+
         return getSucReturnObject().setData(rows).toString();
     }
 
@@ -93,4 +116,16 @@ public class datacomment extends Controller {
 
         updateSQL.update();
     }
+
+    public void updateFeedBack(Long ownerid) throws YosException {
+        Row row = dbConnect.runSqlQuery(0, "SELECT count(*) count from sys_datacomment WHERE ownertable='sa_feedback' and ownerid=" + ownerid + "  and siteid='" + siteid + "'");
+
+        UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_feedback");
+        updateSQL.setSiteid(siteid);
+        updateSQL.setUniqueid(ownerid);
+
+        updateSQL.setValue("replycount", row.getLong("count"));
+
+        updateSQL.update();
+    }
 }

+ 240 - 0
src/custom/restcontroller/webmanage/saletool/feedback/FeedBack.java

@@ -0,0 +1,240 @@
+package restcontroller.webmanage.saletool.feedback;
+
+import beans.attachment.Attachment;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.mysql.cj.x.protobuf.MysqlxCrud;
+import common.Controller;
+import common.YosException;
+import common.annotation.API;
+import common.data.*;
+import restcontroller.R;
+
+import java.util.ArrayList;
+
+/**
+ * 意见反馈
+ */
+
+public class FeedBack extends Controller {
+    /**
+     * 构造函数
+     *
+     * @param content
+     */
+    public FeedBack(JSONObject content) throws YosException {
+        super(content);
+    }
+
+    @API(title = "意见反馈新增或编辑", apiversion = R.ID20240517102502.v1.class)
+    public String insertOrUpdate() throws YosException {
+        Long sa_feedbackid = content.getLongValue("sa_feedbackid");
+
+        if (sa_feedbackid <= 0) {
+            sa_feedbackid = createTableID("sa_feedback");
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_feedback");
+            insertSQL.setSiteid(siteid);
+            insertSQL.setUniqueid(sa_feedbackid);
+            insertSQL.setValue("type", content.getStringValue("type"));
+            insertSQL.setValue("depname", getDepartment(userid).getString("depname"));
+            insertSQL.setValue("phonenumber", getUser(userid).getString("phonenumber"));
+            insertSQL.setValue("remarks", content.getStringValue("remarks"));
+            insertSQL.setValue("name", username);
+            insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
+            insertSQL.setValue("areaname", userInfo.getAreaName(this));
+            insertSQL.insert();
+            content.put("sa_feedbackid", sa_feedbackid);
+        } else {
+            UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_feedback");
+            updateSQL.setSiteid(siteid);
+            updateSQL.setUniqueid(sa_feedbackid);
+            updateSQL.setValue("type", content.getStringValue("type"));
+            updateSQL.setValue("depname", getDepartment(userid).getString("depname"));
+            updateSQL.setValue("phonenumber", getUser(userid).getString("phonenumber"));
+            updateSQL.setValue("remarks", content.getStringValue("remarks"));
+            updateSQL.setValue("name", username);
+            updateSQL.setValue("sys_enterpriseid", sys_enterpriseid);
+            updateSQL.setValue("areaname", userInfo.getAreaName(this));
+            updateSQL.update();
+        }
+
+
+        return detail();
+    }
+
+    @API(title = "意见反馈详情", apiversion = R.ID20240517102602.v1.class)
+    public String detail() throws YosException {
+        Long sa_feedbackid = content.getLongValue("sa_feedbackid");
+
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_feedback").setTableAlias("t1");
+        querySQL.setSiteid(siteid);
+        querySQL.setUniqueid(sa_feedbackid);
+        Rows rows = querySQL.query();
+        if (rows.isEmpty()) {
+            return getSucReturnObject().setData(new Row()).toString();
+        }
+        Row row = rows.get(0);
+        row.put("attinfos", Attachment.get(this, "sa_feedback", sa_feedbackid));
+        row.put("depareaname", row.getString("depname") + row.getString("areaname"));
+
+
+        return getSucReturnObject().setData(row).toString();
+    }
+
+    @API(title = "意见反馈删除", apiversion = R.ID20240517102702.v1.class)
+    public String delete() throws YosException {
+        JSONArray sa_feedbackids = content.getJSONArray("sa_feedbackids");
+        if (sa_feedbackids.size() == 0) {
+            return getErrReturnObject().setErrMsg("请选择要删除的数据").toString();
+        }
+
+        DeleteSQL sqlFactory = SQLFactory.createDeleteSQL(this, "sa_feedback");
+        sqlFactory.setSiteid(siteid);
+        sqlFactory.setWhere("sa_feedbackid", sa_feedbackids.toArray());
+        sqlFactory.delete();
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "意见反馈列表", apiversion = R.ID20240517102802.v1.class)
+    public String list() throws YosException {
+        /*
+          过滤条件设置
+         */
+        StringBuffer where = new StringBuffer(" 1=1 ");
+        if (content.containsKey("where")) {
+            JSONObject whereObject = content.getJSONObject("where");
+            if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
+                where.append(" and (");
+                where.append("t1.name like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t1.phonenumber like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append(")");
+            }
+            if (whereObject.containsKey("type") && !"".equals(whereObject.getString("type"))) {
+                where.append(" and (");
+                where.append("t1.type ='").append(whereObject.getString("type")).append("' ");
+                where.append(")");
+            }
+
+        }
+        if (pageSorting.equals("''")) {
+            pageSorting = "t1.createdate desc";
+        }
+
+
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_feedback")
+                .setTableAlias("t1");
+        querySQL.setSiteid(siteid);
+        querySQL.setWhere(where.toString());
+        querySQL.setOrderBy(pageSorting).setPage(pageSize, pageNumber);
+        Rows rows = querySQL.query();
+
+        RowsMap readRowsMap = FeedBackHelper.getReadRows(this, rows.toArrayList("sa_feedbackid", new ArrayList<>()));
+        for (Row row : rows) {
+            row.put("depareaname", row.getString("depname") + row.getString("areaname"));
+            Long replycount = row.getLong("replycount");
+            Long userreplycount = 0L;
+
+            Rows readRows = readRowsMap.getOrDefault(row.getString("sa_feedbackid"), new Rows());
+            if (readRows.isNotEmpty()) {
+                userreplycount = readRows.get(0).getLong("count");
+            }
+            if (replycount != userreplycount) {
+                row.put("isnew", 1);
+            } else {
+                row.put("isnew", 0);
+            }
+        }
+
+
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+    @API(title = "我的意见反馈列表", apiversion = R.ID20240517102902.v1.class)
+    public String mylist() throws YosException {
+         /*
+          过滤条件设置
+         */
+        StringBuffer where = new StringBuffer(" 1=1 ");
+        if (content.containsKey("where")) {
+            JSONObject whereObject = content.getJSONObject("where");
+            if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
+                where.append(" and (");
+                where.append("t1.name like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t1.phonenumber like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append(")");
+            }
+            if (whereObject.containsKey("type") && !"".equals(whereObject.getString("type"))) {
+                where.append(" and (");
+                where.append("t1.type ='").append(whereObject.getString("type")).append("' ");
+                where.append(")");
+            }
+
+        }
+        if (pageSorting.equals("''")) {
+            pageSorting = "t1.createdate desc";
+        }
+
+
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_feedback")
+                .setTableAlias("t1");
+        querySQL.setSiteid(siteid);
+        querySQL.setWhere("createuserid", userid);
+        querySQL.setWhere(where.toString());
+        querySQL.setOrderBy(pageSorting).setPage(pageSize, pageNumber);
+        Rows rows = querySQL.query();
+
+        RowsMap readRowsMap = FeedBackHelper.getReadRows(this, rows.toArrayList("sa_feedbackid", new ArrayList<>()));
+
+        for (Row row : rows) {
+            Long replycount = row.getLong("replycount");
+            Long userreplycount = 0L;
+
+            Rows readRows = readRowsMap.getOrDefault(row.getString("sa_feedbackid"), new Rows());
+            if (readRows.isNotEmpty()) {
+                userreplycount = readRows.get(0).getLong("count");
+            }
+            if (replycount != userreplycount) {
+                row.put("isnew", 1);
+            } else {
+                row.put("isnew", 0);
+            }
+        }
+
+
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+    @API(title = "小程序意见反馈回复列表", apiversion = R.ID20240517103002.v1.class)
+    public String replylist() throws YosException {
+        String ownertable = "sa_feedback";
+        Long sa_feedbackid = content.getLongValue("sa_feedbackid");
+
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_datacomment").setTableAlias("t1");
+        querySQL.setSiteid(siteid);
+        querySQL.setWhere("ownertable", ownertable);
+        querySQL.setWhere("ownerid", sa_feedbackid);
+        querySQL.setPage(pageSize, pageNumber).setOrderBy("t1.createdate desc");
+        Rows rows = querySQL.query();
+        ArrayList<String> sqlList = new ArrayList<>();
+        for (Row row : rows) {
+            row.put("headpic", getHeadPic(row.getLong("userid")));
+            if (userid != row.getLong("userid")) {
+                row.put("name", "官方");
+                row.put("headpic", userInfo.getSiteLogo(this));
+            }
+
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sys_datacomment_read");
+            insertSQL.setSiteid(siteid);
+            insertSQL.setUniqueid(createTableID("sys_datacomment_read"));
+            insertSQL.setValue("userid", userid);
+            insertSQL.setValue("sys_datacommentid", row.getString("sys_datacommentid"));
+            insertSQL.setWhere("not exists(select 1 from  sys_datacomment_read where userid=" + userid + " and sys_datacommentid=" + row.getString("sys_datacommentid") + "  )");
+            sqlList.add(insertSQL.getSQL());
+        }
+
+        dbConnect.runSqlUpdate(sqlList);
+
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+}

+ 30 - 0
src/custom/restcontroller/webmanage/saletool/feedback/FeedBackHelper.java

@@ -0,0 +1,30 @@
+package restcontroller.webmanage.saletool.feedback;
+
+import common.BaseClass;
+import common.Controller;
+import common.YosException;
+import common.data.QuerySQL;
+import common.data.Rows;
+import common.data.RowsMap;
+import common.data.SQLFactory;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.ArrayList;
+
+public class FeedBackHelper extends BaseClass {
+
+
+    public static RowsMap getReadRows(Controller controller, ArrayList<Long> sa_feedbackids) throws YosException {
+        QuerySQL querySQL = SQLFactory.createQuerySQL(controller, "sys_datacomment",
+                "ownerid").setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.inner, "sys_datacomment_read", "t2", "t2.sys_datacommentid=t1.sys_datacommentid and t2.siteid=t1.siteid");
+        querySQL.addQueryFields("count", "count(t2.userid)");
+        querySQL.setSiteid(controller.siteid);
+        querySQL.setWhere("ownerid", sa_feedbackids);
+        querySQL.setWhere("ownertable", "sa_feedback");
+        querySQL.setWhere("t2.userid", controller.userid);
+        querySQL.addGroupBy("ownerid");
+        return querySQL.query().toRowsMap("ownerid");
+    }
+
+}

+ 1 - 4
src/custom/restcontroller/webmanage/users/visitors.java

@@ -83,11 +83,8 @@ public class visitors extends Controller {
                 "WHERE t1.sys_enterpriseid=" + sys_enterpriseid + " and t1.siteid='" + siteid + "' and t3.userid='" + userid + "'");
         row.put("stores", storerows);
 
-        Rows areaRows = dbConnect.runSqlQuery("SELECT DISTINCT t1.areaname from sa_salearea t1 \n" +
-                "INNER JOIN sys_enterprise_tradefield t2 ON t2.sa_saleareaid = t1.sa_saleareaid\n" +
-                "WHERE t2.sys_enterpriseid=" + sys_enterpriseid + " and t1.siteid='" + siteid + "'");
 
-        row.put("areaname", StringUtils.join(areaRows.toArray("areaname"), ","));
+        row.put("areaname", userInfo.getAreaName(this));
         row.put("sys_enterpriseid", sys_enterpriseid);
 
         row.put("enterprise_hr", userInfo.getEnterprise_HrRow());