在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例WEB/WAP应用开发 → 商品进销存管理系统、ERP系统源码

商品进销存管理系统、ERP系统源码

WEB/WAP应用开发

下载此实例
  • 开发语言:Java
  • 实例大小:10.43M
  • 下载次数:59
  • 浏览次数:367
  • 发布时间:2021-03-29
  • 实例类别:WEB/WAP应用开发
  • 发 布 人:javaWCheng
  • 所需积分:5

实例介绍

【实例简介】

采用SpringBoot、HTML、JqueryUI、mysql实现的一整套进销存ERP系统,功能比较齐全,能立刻部署运行支持普通公司的ERP运营,附带测试使用的数据库,后管默认登录账号:admin 密码:123456

【实例截图】

from clipboard


from clipboard

from clipboard

from clipboard

【核心代码】



package com.jsh.erp.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.constants.ExceptionConstants; import com.jsh.erp.datasource.entities.Account; import com.jsh.erp.datasource.vo.AccountVo4InOutList; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.service.account.AccountService; import com.jsh.erp.utils.BaseResponseInfo; import com.jsh.erp.utils.ErpInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; /**  * @author jishenghua 75271*8920  */ @RestController @RequestMapping(value = "/account") public class AccountController { private Logger logger = LoggerFactory.getLogger(AccountController.class); @Resource  private AccountService accountService; /**  * 查找结算账户信息-下拉框  * @param request  * @return  */  @GetMapping(value = "/findBySelect") public String findBySelect(HttpServletRequest request) throws Exception {
        String res = null; try {
            List<Account> dataList = accountService.findBySelect(); //存放数据json数组  JSONArray dataArray = new JSONArray(); if (null != dataList) { for (Account account : dataList) {
                    JSONObject item = new JSONObject();
                    item.put("Id", account.getId()); //结算账户名称  item.put("AccountName", account.getName());
                    dataArray.add(item);
                }
            }
            res = dataArray.toJSONString();
        } catch(Exception e){
            e.printStackTrace();
            res = "获取数据失败";
        } return res;
    } /**  * 获取所有结算账户  * @param request  * @return  */  @GetMapping(value = "/getAccount") public BaseResponseInfo getAccount(HttpServletRequest request) throws Exception {
        BaseResponseInfo res = new BaseResponseInfo();
        Map<String, Object> map = new HashMap<String, Object>(); try {
            List<Account> accountList = accountService.getAccount();
            map.put("accountList", accountList);
            res.code = 200;
            res.data = map;
        } catch(Exception e){
            e.printStackTrace();
            res.code = 500;
            res.data = "获取数据失败";
        } return res;
    } /**  * 账户流水信息  * @param currentPage  * @param pageSize  * @param accountId  * @param initialAmount  * @param request  * @return  */  @GetMapping(value = "/findAccountInOutList") public BaseResponseInfo findAccountInOutList(@RequestParam("currentPage") Integer currentPage, @RequestParam("pageSize") Integer pageSize, @RequestParam("accountId") Long accountId, @RequestParam("initialAmount") BigDecimal initialAmount,
                                                 HttpServletRequest request) throws Exception{
        BaseResponseInfo res = new BaseResponseInfo();
        Map<String, Object> map = new HashMap<String, Object>(); try {
            List<AccountVo4InOutList> dataList = accountService.findAccountInOutList(accountId, (currentPage-1)*pageSize, pageSize); int total = accountService.findAccountInOutListCount(accountId);
            map.put("total", total); //存放数据json数组  JSONArray dataArray = new JSONArray(); if (null != dataList) { for (AccountVo4InOutList aEx : dataList) {
                    String timeStr = aEx.getOperTime().toString();
                    BigDecimal balance = accountService.getAccountSum(accountId, timeStr, "date").add(accountService.getAccountSumByHead(accountId, timeStr, "date"))
                            .add(accountService.getAccountSumByDetail(accountId, timeStr, "date")).add(accountService.getManyAccountSum(accountId, timeStr, "date")).add(initialAmount);
                    aEx.setBalance(balance);
                    dataArray.add(aEx);
                }
            }
            map.put("rows", dataArray);
            res.code = 200;
            res.data = map;
        } catch(Exception e){
            e.printStackTrace();
            res.code = 500;
            res.data = "获取数据失败";
        } return res;
    } @PostMapping(value = "/updateAmountIsDefault") public String updateAmountIsDefault(@RequestParam("isDefault") Boolean isDefault, @RequestParam("accountId") Long accountId,
                                 HttpServletRequest request) throws Exception{
        Map<String, Object> objectMap = new HashMap<String, Object>(); int res = accountService.updateAmountIsDefault(isDefault, accountId); if(res > 0) { return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
        } else { return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
        }
    } /**  * create by: qiankunpingtai  * websitehttps://qiankunpingtai.cn  * description:  * 批量删除账户信息  * create time: 2019/3/29 10:49  * @Param: ids  * @return java.lang.Object  */  @RequestMapping(value = "/batchDeleteAccountByIds") public Object batchDeleteAccountByIds(@RequestParam("ids") String ids,@RequestParam(value="deleteType",
            required =false,defaultValue=BusinessConstants.DELETE_TYPE_NORMAL)String deleteType) throws Exception {

        JSONObject result = ExceptionConstants.standardSuccess(); /**  * create by: qiankunpingtai  * create time: 2019/4/10 10:19  * websitehttps://qiankunpingtai.cn  * description:  * 出于兼容性考虑,没有传递删除类型时,默认为正常删除  */  int i=0; if(BusinessConstants.DELETE_TYPE_NORMAL.equals(deleteType)){
             i= accountService.batchDeleteAccountByIdsNormal(ids);
        }else if(BusinessConstants.DELETE_TYPE_FORCE.equals(deleteType)){
             i= accountService.batchDeleteAccountByIds(ids);
        }else{ logger.error("异常码[{}],异常提示[{}],参数,ids[{}],deleteType[{}]",
                    ExceptionConstants.DELETE_REFUSED_CODE,ExceptionConstants.DELETE_REFUSED_MSG,ids,deleteType); throw new BusinessRunTimeException(ExceptionConstants.DELETE_REFUSED_CODE,
                    ExceptionConstants.DELETE_REFUSED_MSG);
        } if(i<1){ logger.error("异常码[{}],异常提示[{}],参数,ids[{}]",
                    ExceptionConstants.ACCOUNT_DELETE_FAILED_CODE,ExceptionConstants.ACCOUNT_DELETE_FAILED_MSG,ids); throw new BusinessRunTimeException(ExceptionConstants.ACCOUNT_DELETE_FAILED_CODE,
                    ExceptionConstants.ACCOUNT_DELETE_FAILED_MSG);
        } return result;
    }

}




package com.jsh.erp.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.constants.ExceptionConstants; import com.jsh.erp.datasource.entities.Tenant; import com.jsh.erp.datasource.entities.User; import com.jsh.erp.datasource.entities.UserEx; import com.jsh.erp.datasource.vo.TreeNodeEx; import com.jsh.erp.exception.BusinessParamCheckingException; import com.jsh.erp.service.log.LogService; import com.jsh.erp.service.tenant.TenantService; import com.jsh.erp.service.user.UserService; import com.jsh.erp.utils.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; /**  * @author ji_sheng_hua 华夏erp  */ @RestController @RequestMapping(value = "/user") public class UserController { private Logger logger = LoggerFactory.getLogger(UserController.class); @Value("${manage.roleId}") private Integer manageRoleId; @Resource  private UserService userService; @Resource  private TenantService tenantService; @Resource  private LogService logService; private static String message = "成功"; private static final String HTTP = "http://"; private static final String CODE_OK = "200";

    @PostMapping(value = "/login") public BaseResponseInfo login(@RequestParam(value = "loginame", required = false) String loginame,
                        @RequestParam(value = "password", required = false) String password,
                        HttpServletRequest request)throws Exception {
        logger.info("============用户登录 login 方法调用开始==============");
        String msgTip = "";
        User user=null;
        BaseResponseInfo res = new BaseResponseInfo(); try {
            String username = loginame.trim();
            password = password.trim(); //判断用户是否已经登录过,登录过不再处理  Object userInfo = request.getSession().getAttribute("user");
            User sessionUser = new User(); if (userInfo != null) {
                sessionUser = (User) userInfo;
            } if (sessionUser != null && username.equalsIgnoreCase(sessionUser.getLoginame())) {
                logger.info("====用户 "  username "已经登录过, login 方法调用结束====");
                msgTip = "user already login";
            } //获取用户状态  int userStatus = -1; try {
                userStatus = userService.validateUser(username, password);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error(">>>>>>>>>>>>>用户 "  username " 登录 login 方法 访问服务层异常====", e);
                msgTip = "access service exception";
            } switch (userStatus) { case ExceptionCodeConstants.UserExceptionCode.USER_NOT_EXIST:
                    msgTip = "user is not exist"; break; case ExceptionCodeConstants.UserExceptionCode.USER_PASSWORD_ERROR:
                    msgTip = "user password error"; break; case ExceptionCodeConstants.UserExceptionCode.BLACK_USER:
                    msgTip = "user is black"; break; case ExceptionCodeConstants.UserExceptionCode.USER_ACCESS_EXCEPTION:
                    msgTip = "access service error"; break; default: try {
                        msgTip = "user can login"; //验证通过 ,可以登录,放入session,记录登录日志  user = userService.getUserByUserName(username);
                        request.getSession().setAttribute("user",user); if(user.getTenantId()!=null) {
                            Tenant tenant = tenantService.getTenantByTenantId(user.getTenantId()); if(tenant!=null) {
                                Long tenantId = tenant.getTenantId();
                                Integer userNumLimit = tenant.getUserNumLimit();
                                Integer billsNumLimit = tenant.getBillsNumLimit(); if(tenantId!=null) {
                                    request.getSession().setAttribute("tenantId",tenantId); //租户tenantId  request.getSession().setAttribute("userNumLimit",userNumLimit); //用户限制数  request.getSession().setAttribute("billsNumLimit",billsNumLimit); //单据限制数  }
                            }
                        }
                        logService.insertLog("用户", new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_LOGIN).append(user.getId()).toString(),
                                ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
                    } catch (Exception e) {
                        e.printStackTrace();
                        logger.error(">>>>>>>>>>>>>>>查询用户名为:"  username " ,用户信息异常", e);
                    } break;
            }
            Map<String, Object> data = new HashMap<String, Object>();
            data.put("msgTip", msgTip); /**  * IE模式下,无法获取到user数据,  * 在此处明确添加上user信息  * */  if(user!=null){
                data.put("user",user);
            }
            res.code = 200;
            res.data = data;
            logger.info("===============用户登录 login 方法调用结束===============");
        } catch(Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            res.code = 500;
            res.data = "用户登录失败";
        } return res;
    }

    @GetMapping(value = "/getUserSession") public BaseResponseInfo getSessionUser(HttpServletRequest request)throws Exception {
        BaseResponseInfo res = new BaseResponseInfo(); try {
            Map<String, Object> data = new HashMap<String, Object>();
            Object userInfo = request.getSession().getAttribute("user"); if(userInfo!=null) {
                User user = (User) userInfo;
                user.setPassword(null);
                data.put("user", user);
            }
            res.code = 200;
            res.data = data;
        } catch(Exception e){
            e.printStackTrace();
            res.code = 500;
            res.data = "获取session失败";
        } return res;
    }

    @GetMapping(value = "/logout") public BaseResponseInfo logout(HttpServletRequest request, HttpServletResponse response)throws Exception {
        BaseResponseInfo res = new BaseResponseInfo(); try {
            request.getSession().removeAttribute("user");
            request.getSession().removeAttribute("tenantId");
            request.getSession().removeAttribute("userNumLimit");
            request.getSession().removeAttribute("billsNumLimit");
            response.sendRedirect("/login.html");
        } catch(Exception e){
            e.printStackTrace();
            res.code = 500;
            res.data = "退出失败";
        } return res;
    }

    @PostMapping(value = "/resetPwd") public String resetPwd(@RequestParam("id") Long id,
                                     HttpServletRequest request) throws Exception {
        Map<String, Object> objectMap = new HashMap<String, Object>();
        String password = "123456";
        String md5Pwd = Tools.md5Encryp(password); int update = userService.resetPwd(md5Pwd, id); if(update > 0) { return returnJson(objectMap, message, ErpInfo.OK.code);
        } else { return returnJson(objectMap, message, ErpInfo.ERROR.code);
        }
    }

    @PostMapping(value = "/updatePwd") public String updatePwd(@RequestParam("userId") Long userId, @RequestParam("password") String password,
                            @RequestParam("oldpwd") String oldpwd, HttpServletRequest request)throws Exception {
        Integer flag = 0;
        Map<String, Object> objectMap = new HashMap<String, Object>(); try {
            User user = userService.getUser(userId);
            String oldPassword = Tools.md5Encryp(oldpwd);
            String md5Pwd = Tools.md5Encryp(password); //必须和原始密码一致才可以更新密码  if(user.getLoginame().equals("jsh")){
                flag = 3; //管理员jsh不能修改密码  } else if (oldPassword.equalsIgnoreCase(user.getPassword())) {
                user.setPassword(md5Pwd);
                flag = userService.updateUserByObj(user); //1-成功  } else {
                flag = 2; //原始密码输入错误  }
            objectMap.put("status", flag); if(flag > 0) { return returnJson(objectMap, message, ErpInfo.OK.code);
            } else { return returnJson(objectMap, message, ErpInfo.ERROR.code);
            }
        } catch (Exception e) {
            logger.error(">>>>>>>>>>>>>修改用户ID为 : "  userId "密码信息失败", e);
            flag = 3;
            objectMap.put("status", flag); return returnJson(objectMap, message, ErpInfo.ERROR.code);
        }
    } /**  * 获取全部用户数据列表  * @param request  * @return  */  @GetMapping(value = "/getAllList") public BaseResponseInfo getAllList(HttpServletRequest request)throws Exception {
        BaseResponseInfo res = new BaseResponseInfo(); try {
            Map<String, Object> data = new HashMap<String, Object>();
            List<User> dataList = userService.getUser(); if(dataList!=null) {
                data.put("userList", dataList);
            }
            res.code = 200;
            res.data = data;
        } catch(Exception e){
            e.printStackTrace();
            res.code = 500;
            res.data = "获取失败";
        } return res;
    } /**  * create by: cjl  * description:  * 查询分页用户列表  * create time: 2019/3/8 15:08  * @Param: pageSize   * @Param: currentPage   * @Param: search  * @return java.lang.String  */  @GetMapping(value = "/getUserList") public String getUserList(@RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize,
                                       @RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage,
                                       @RequestParam(value = Constants.SEARCH, required = false) String search)throws Exception {

        Map<String, Object> parameterMap = new HashMap<String, Object>(); //查询参数  JSONObject obj= JSON.parseObject(search);
        Set<String> key= obj.keySet(); for(String keyEach: key){
            parameterMap.put(keyEach,obj.getString(keyEach));
        }
        PageQueryInfo queryInfo = new PageQueryInfo();
        Map<String, Object> objectMap = new HashMap<String, Object>(); if (pageSize == null || pageSize <= 0) {
            pageSize = BusinessConstants.DEFAULT_PAGINATION_PAGE_SIZE;
        } if (currentPage == null || currentPage <= 0) {
            currentPage = BusinessConstants.DEFAULT_PAGINATION_PAGE_NUMBER;
        }
        PageHelper.startPage(currentPage,pageSize,true);
        List<UserEx> list = userService.getUserList(parameterMap); //获取分页查询后的数据  PageInfo<UserEx> pageInfo = new PageInfo<>(list);
        objectMap.put("page", queryInfo); if (list == null) {
            queryInfo.setRows(new ArrayList<Object>());
            queryInfo.setTotal(BusinessConstants.DEFAULT_LIST_NULL_NUMBER); return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code);
        }
        queryInfo.setRows(list);
        queryInfo.setTotal(pageInfo.getTotal()); return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
    } /**  * create by: cjl  * description:  * 新增用户及机构和用户关系  * create time: 2019/3/8 16:06  * @Param: beanJson  * @return java.lang.Object  */  @PostMapping("/addUser")
    @ResponseBody public Object addUser(@RequestParam("info") String beanJson, HttpServletRequest request)throws Exception{
        JSONObject result = ExceptionConstants.standardSuccess();
        Long userNumLimit = Long.parseLong(request.getSession().getAttribute("userNumLimit").toString());
        Long count = userService.countUser(null,null); if(count>= userNumLimit) { throw new BusinessParamCheckingException(ExceptionConstants.USER_OVER_LIMIT_FAILED_CODE,
                    ExceptionConstants.USER_OVER_LIMIT_FAILED_MSG);
        } else {
            UserEx ue= JSON.parseObject(beanJson, UserEx.class);
            userService.addUserAndOrgUserRel(ue);
        } return result;
    } /**  * 注册用户  * @param loginame  * @param password  * @return  * @throws Exception  */  @PostMapping(value = "/registerUser") public Object registerUser(@RequestParam(value = "loginame", required = false) String loginame,
                               @RequestParam(value = "password", required = false) String password,
                               HttpServletRequest request)throws Exception{
        JSONObject result = ExceptionConstants.standardSuccess();
        UserEx ue= new UserEx();
        ue.setUsername(loginame);
        ue.setLoginame(loginame);
        ue.setPassword(password);
        userService.checkUserNameAndLoginName(ue); //检查用户名和登录名  ue = userService.registerUser(ue,manageRoleId,request); return result;
    } /**  * create by: cjl  * description:  * 修改用户及机构和用户关系  * create time: 2019/3/8 16:06  * @Param: beanJson  * @return java.lang.Object  */  @PostMapping("/updateUser")
    @ResponseBody public Object updateUser(@RequestParam("info") String beanJson,@RequestParam("id") Long id)throws Exception{
        JSONObject result = ExceptionConstants.standardSuccess();
        UserEx ue= JSON.parseObject(beanJson, UserEx.class);
        ue.setId(id);
        userService.updateUserAndOrgUserRel(ue); return result;
    }
    @PostMapping("/deleteUser")
    @ResponseBody public Object deleteUser(@RequestParam("ids") String ids)throws Exception{
        JSONObject result = ExceptionConstants.standardSuccess();
        userService.batDeleteUser(ids); return result;
    }
    @PostMapping("/batchDeleteUser")
    @ResponseBody public Object batchDeleteUser(@RequestParam("ids") String ids)throws Exception{
        JSONObject result = ExceptionConstants.standardSuccess();
        userService.batDeleteUser(ids); return result;
    }
    @RequestMapping("/getOrganizationUserTree") public JSONArray getOrganizationUserTree()throws Exception{
        JSONArray arr=new JSONArray();
        List<TreeNodeEx> organizationUserTree= userService.getOrganizationUserTree(); if(organizationUserTree!=null&&organizationUserTree.size()>0){ for(TreeNodeEx node:organizationUserTree){
                String str=JSON.toJSONString(node);
                JSONObject obj=JSON.parseObject(str);
                arr.add(obj) ;
            }
        } return arr;
    }
}



由于代码较多,附上源码下载,需要了解的可以直接下载源码获取,整套源码可直接下载部署

实例下载地址

商品进销存管理系统、ERP系统源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 哎! 发表于: 2021-03-30 10:15 55
什么数据库

支持(0) 盖楼(回复)

第 2 楼 哎! 发表于: 2021-03-30 10:16 02
什么数据库

支持(0) 盖楼(回复)

第 3 楼 哎! 发表于: 2021-03-30 10:16 02
什么数据库

支持(0) 盖楼(回复)

第 4 楼 哎! 发表于: 2021-03-30 10:16 06
什么数据库

支持(0) 盖楼(回复)

第 5 楼 哎! 发表于: 2021-03-30 10:16 08
什么数据库

支持(0) 盖楼(回复)

第 6 楼 哎! 发表于: 2021-03-30 10:16 09
什么数据库

支持(0) 盖楼(回复)

第 7 楼 哎! 发表于: 2021-03-30 10:16 10
什么数据库

支持(0) 盖楼(回复)

第 8 楼 哎! 发表于: 2021-03-30 10:16 11
什么数据库

支持(0) 盖楼(回复)

第 9 楼 哎! 发表于: 2021-03-30 10:16 13
什么数据库

支持(0) 盖楼(回复)

第 10 楼 哎! 发表于: 2021-03-30 10:16 14
什么数据库

支持(0) 盖楼(回复)

第 11 楼 哎! 发表于: 2021-03-30 10:16 16
什么数据库

支持(0) 盖楼(回复)

第 12 楼 哎! 发表于: 2021-03-30 10:16 17
什么数据库

支持(0) 盖楼(回复)

第 13 楼 哎! 发表于: 2021-03-30 10:16 18
什么数据库

支持(0) 盖楼(回复)

第 14 楼 哎! 发表于: 2021-03-30 10:16 19
什么数据库

支持(0) 盖楼(回复)

第 15 楼 哎! 发表于: 2021-03-30 10:16 20
什么数据库

支持(0) 盖楼(回复)

第 16 楼 哎! 发表于: 2021-03-30 10:16 21
什么数据库

支持(0) 盖楼(回复)

第 17 楼 哎! 发表于: 2021-03-30 10:16 23
什么数据库

支持(0) 盖楼(回复)

第 18 楼 哎! 发表于: 2021-03-30 10:16 24
什么数据库

支持(0) 盖楼(回复)

第 19 楼 哎! 发表于: 2021-03-30 10:16 26
什么数据库

支持(0) 盖楼(回复)

第 20 楼 哎! 发表于: 2021-03-30 10:16 28
什么数据库

支持(0) 盖楼(回复)

第 21 楼 javaWCheng 发表于: 2021-04-01 10:48 08
什么数据库

哎! 2021-03-30 10:15 55

mysql 1.5以上即可

支持(0) 盖楼(回复)

第 22 楼 javaWCheng 发表于: 2021-04-01 14:19 58
我来说两句...

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有22条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警