From 062212cffbb0a706a2ee5ba73f1f29ab3546636f Mon Sep 17 00:00:00 2001 From: wangpengfei <1928057482@qq.com> Date: Wed, 7 May 2025 08:42:41 +0800 Subject: [PATCH] 1 --- .../kelp/plat/controller/URoleController.java | 219 ++++++++ .../controller/UAccountController.java | 469 ++++++++++++++++++ .../controller/UContractController.java | 61 +++ .../website/controller/UIndexController.java | 29 ++ .../main/resources/static/plat/js/urole.js | 413 +++++++++++++++ .../main/resources/static/website/css/app.css | 41 ++ .../resources/static/website/css/district.css | 0 .../resources/static/website/css/issue.css | 41 ++ .../static/website/css/issue_reply.css | 41 ++ .../resources/static/website/css/jwytask.css | 41 ++ .../resources/static/website/css/member.css | 41 ++ .../static/website/css/self_info.css | 36 ++ .../resources/static/website/js/account.js | 328 ++++++++++++ .../main/resources/templates/plat/urole.ftl | 149 ++++++ .../resources/templates/website/account.ftl | 193 +++++++ .../framework/config/DataSourceConfig.java | 2 +- .../framework/config/InterceptorConfig.java | 9 +- .../framework/interceptor/UInterceptor.java | 141 ++++++ .../kelp/crm/service/ECustomerService.java | 3 +- .../kelp/crm/service/EnterpriseService.java | 1 + .../service/impl/ECustomerServiceImpl.java | 5 + .../service/impl/EnterpriseServiceImpl.java | 7 +- .../main/java/com/kelp/plat/dao/U_RFDao.java | 31 ++ .../java/com/kelp/plat/dao/U_RoleDao.java | 17 + .../com/kelp/plat/dao/impl/U_RFDaoImpl.java | 52 ++ .../com/kelp/plat/dao/impl/U_RoleDaoImpl.java | 68 +++ .../main/java/com/kelp/plat/entity/U_RF.java | 54 ++ .../java/com/kelp/plat/entity/U_Role.java | 60 +++ .../com/kelp/plat/service/U_RFService.java | 34 ++ .../com/kelp/plat/service/U_RoleService.java | 28 ++ .../plat/service/impl/U_RFServiceImpl.java | 82 +++ .../plat/service/impl/U_RoleServiceImpl.java | 76 +++ .../com/kelp/website/dao/UAccountDao.java | 14 + .../com/kelp/website/dao/UContractDao.java | 15 + .../website/dao/impl/UAccountDaoImpl.java | 23 + .../website/dao/impl/UContractDaoImpl.java | 33 ++ .../com/kelp/website/entity/UAccount.java | 85 ++++ .../com/kelp/website/entity/UAccountVo.java | 104 ++++ .../com/kelp/website/entity/UContract.java | 255 ++++++++++ .../kelp/website/service/UAccountService.java | 30 ++ .../website/service/UContractService.java | 16 + .../service/impl/UAccountServiceImpl.java | 68 +++ .../service/impl/UContractServiceImpl.java | 43 ++ 43 files changed, 3453 insertions(+), 5 deletions(-) create mode 100644 ksafepack-admin/src/main/java/com/kelp/plat/controller/URoleController.java create mode 100644 ksafepack-admin/src/main/java/com/kelp/website/controller/UAccountController.java create mode 100644 ksafepack-admin/src/main/java/com/kelp/website/controller/UContractController.java create mode 100644 ksafepack-admin/src/main/java/com/kelp/website/controller/UIndexController.java create mode 100644 ksafepack-admin/src/main/resources/static/plat/js/urole.js create mode 100644 ksafepack-admin/src/main/resources/static/website/css/app.css create mode 100644 ksafepack-admin/src/main/resources/static/website/css/district.css create mode 100644 ksafepack-admin/src/main/resources/static/website/css/issue.css create mode 100644 ksafepack-admin/src/main/resources/static/website/css/issue_reply.css create mode 100644 ksafepack-admin/src/main/resources/static/website/css/jwytask.css create mode 100644 ksafepack-admin/src/main/resources/static/website/css/member.css create mode 100644 ksafepack-admin/src/main/resources/static/website/css/self_info.css create mode 100644 ksafepack-admin/src/main/resources/static/website/js/account.js create mode 100644 ksafepack-admin/src/main/resources/templates/plat/urole.ftl create mode 100644 ksafepack-admin/src/main/resources/templates/website/account.ftl create mode 100644 ksafepack-framework/src/main/java/com/kelp/framework/interceptor/UInterceptor.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/dao/U_RFDao.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/dao/U_RoleDao.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RFDaoImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RoleDaoImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/entity/U_RF.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/entity/U_Role.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/service/U_RFService.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/service/U_RoleService.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RFServiceImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RoleServiceImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/dao/UAccountDao.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/dao/UContractDao.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/dao/impl/UAccountDaoImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/dao/impl/UContractDaoImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/entity/UAccount.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/entity/UAccountVo.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/entity/UContract.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/service/UAccountService.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/service/UContractService.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/service/impl/UAccountServiceImpl.java create mode 100644 ksafepack-system/src/main/java/com/kelp/website/service/impl/UContractServiceImpl.java diff --git a/ksafepack-admin/src/main/java/com/kelp/plat/controller/URoleController.java b/ksafepack-admin/src/main/java/com/kelp/plat/controller/URoleController.java new file mode 100644 index 0000000..706322c --- /dev/null +++ b/ksafepack-admin/src/main/java/com/kelp/plat/controller/URoleController.java @@ -0,0 +1,219 @@ +package com.kelp.plat.controller; + +import com.kelp.base.Page; +import com.kelp.framework.base.controller.BaseController; +import com.kelp.framework.base.controller.ErrorMessage; +import com.kelp.plat.entity.E_Role; +import com.kelp.plat.entity.U_Role; +import com.kelp.plat.service.E_RFService; +import com.kelp.plat.service.E_RoleService; +import com.kelp.plat.service.U_RFService; +import com.kelp.plat.service.U_RoleService; +import com.opensymphony.oscache.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@RequestMapping("/plat/urole") +@Controller +public class URoleController extends BaseController { + + @Autowired + private U_RoleService roleService; + + @Autowired + private U_RFService rfService; + + + @RequestMapping("/toPage") + public @ResponseBody ModelAndView toPage(HttpServletRequest request, HttpServletResponse response) { + ModelMap modelMap = new ModelMap(); + modelMap.put("mfs", rfService.getMFs()); + + return new ModelAndView("/plat/urole","modelMap", modelMap); + } + + @RequestMapping("/list") + public @ResponseBody Page list(HttpServletRequest request, Page page, String qname, String qtype, Integer qlevel) { + + if (page == null) { + page = new Page(); + } + + return roleService.getPage(page.getPageIndex(), page.getLimit(), qname, qlevel); + } + + @RequestMapping("/add") + public @ResponseBody ModelMap add(HttpServletRequest request,U_Role role) { + + ModelMap modelMap = new ModelMap(); + + ErrorMessage message = invalid(role); + if (!message.getStatus()) { + modelMap.put(MESSAGE, message.getMessage()); + modelMap.put(RESULT, message.getStatus()); + return modelMap; + } + + if (roleService.getByName(role.getName()) != null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "角色名称已经存在!"); + return modelMap; + } + + role.setId(null); + roleService.add(role); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "保存成功!"); + return modelMap; + } + + @RequestMapping("/update") + public @ResponseBody ModelMap update(HttpServletRequest request,U_Role role) { + + ModelMap modelMap = new ModelMap(); + + ErrorMessage message = invalid(role); + if (!message.getStatus()) { + modelMap.put(MESSAGE, message.getMessage()); + modelMap.put(RESULT, message.getStatus()); + return modelMap; + } + + if (role.getId() == null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "数据有误!"); + modelMap.put("role", role); + return modelMap; + } + + U_Role roleP = roleService.getByName(role.getName()); + if (roleP != null && !role.getId().equals(roleP.getId())) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "角色名称已经存在!"); + return modelMap; + } + + roleService.update(role); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "保存成功!"); + return modelMap; + } + + @RequestMapping("/toEdit") + public @ResponseBody ModelMap toEdit(HttpServletRequest request, String id) { + + ModelMap modelMap = new ModelMap(); + + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "非法操作!"); + + if (id != null && id.length() > 0 && id.length() <= 32) { + U_Role role = roleService.getById(id); + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "操作成功"); + modelMap.put("role", role); + } + + return modelMap; + } + + @RequestMapping("/delete") + public @ResponseBody ModelMap delete(HttpServletRequest request, String ids) { + + ModelMap modelMap = new ModelMap(); + + if (ids == null || ids.length() == 0) { + ids = ""; + } + + String[] ids_ = ids.split(","); + + roleService.delete(ids_); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "删除成功!"); + + return modelMap; + } + + private ErrorMessage invalid(U_Role role) { + + if (role == null) { + return new ErrorMessage("数据有误!", false); + } + + if (StringUtil.isEmpty(role.getName()) + || role.getName().length() > 20) { + return new ErrorMessage("角色名称不能为空或长度有误!", false); + } + + if (role.getLevel() == null) { + return new ErrorMessage("角色级别不能为空或长度有误!", false); + } + + if (!StringUtil.isEmpty(role.getDescription()) && role.getDescription().length() > 128) { + return new ErrorMessage("角色说明长度有误!", false); + } + + return new ErrorMessage("", true); + } + + @RequestMapping("/toGrant") + public @ResponseBody ModelMap toGrant(HttpServletRequest request, + String id) { + + ModelMap modelMap = new ModelMap(); + + if (id == null || id.length() > 32) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "非法操作!"); + return modelMap; + } + + modelMap.put(RESULT, true); + modelMap.put("role", roleService.getById(id)); + modelMap.put("rfs", rfService.getRFs(id)); + return modelMap; + } + + @RequestMapping("/grant") + public @ResponseBody ModelMap grant(HttpServletRequest request, + String roleId, String functionIds) { + + ModelMap modelMap = new ModelMap(); + + if (StringUtil.isEmpty(roleId) || roleId.length() > 32) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "非法数据!"); + return modelMap; + } + + if (StringUtil.isEmpty(functionIds)) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "授权成功!"); + return modelMap; + } + + if (functionIds.endsWith(",")) { + functionIds = functionIds.substring(0, functionIds.length() - 1); + } + + String[] functionIds_ = functionIds.split(","); + rfService.setRFs(roleId, functionIds_); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "授权成功!"); + + return modelMap; + } + +} diff --git a/ksafepack-admin/src/main/java/com/kelp/website/controller/UAccountController.java b/ksafepack-admin/src/main/java/com/kelp/website/controller/UAccountController.java new file mode 100644 index 0000000..44d5903 --- /dev/null +++ b/ksafepack-admin/src/main/java/com/kelp/website/controller/UAccountController.java @@ -0,0 +1,469 @@ +package com.kelp.website.controller; + +import com.google.code.kaptcha.Constants; +import com.kelp.base.Page; +import com.kelp.common.config.RedisBean; +import com.kelp.common.constant.KeyConstant; +import com.kelp.common.constant.RegexConstants; +import com.kelp.common.utils.CookieUtil; +import com.kelp.common.utils.jwt.JwtUtil; +import com.kelp.common.utils.security.Md5Utils; +import com.kelp.crm.entity.EAccount; +import com.kelp.plat.entity.Account; +import com.kelp.plat.service.E_RoleService; +import com.kelp.plat.service.RoleService; +import com.kelp.website.entity.UAccount; +import com.kelp.website.entity.UAccountVo; +import com.kelp.website.service.UAccountService; +import com.kelp.framework.base.controller.BaseController; +import com.kelp.framework.base.controller.ErrorMessage; +import com.opensymphony.oscache.util.StringUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; + +/** + * @author wangpengfei + * @date 2025/4/28 14:30 + */ +@RequestMapping("/website") +@Controller +public class UAccountController extends BaseController { + + protected String RESULT = "result"; + protected String MESSAGE = "message"; + + @Autowired + protected RedisBean redisBean; + @Autowired + private E_RoleService roleService; + @Autowired + private UAccountService uAccountService; + + @RequestMapping("/login") + public @ResponseBody ModelMap login(HttpServletRequest request, HttpServletResponse response, String telephone, + String password, String timestamp, String captcha) { + + ModelMap modelMap = new ModelMap(); + + if (StringUtil.isEmpty(telephone) || telephone.length() != 11) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "手机号格式有误!"); + return modelMap; + } + + if (StringUtil.isEmpty(password) || password.length() > 50) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "密码不能为空或长度错误!"); + return modelMap; + } + +// if (StringUtil.isEmpty(timestamp) || timestamp.length() > 128) { +// modelMap.put(RESULT, false); +// modelMap.put(MESSAGE, "非法请求!"); +// return modelMap; +// } + +// if (StringUtil.isEmpty(captcha) || captcha.length() > 4) { +// modelMap.put(RESULT, false); +// modelMap.put(MESSAGE, "非法请求!"); +// return modelMap; +// } + +// String captcha_ = redisBean.hget(Constants.KAPTCHA_SESSION_KEY, timestamp); +// if(captcha_ == null || !captcha_.equals(captcha)) { +// modelMap.put(RESULT, false); +// modelMap.put(MESSAGE, "验证码不正确或已过期!"); +// return modelMap; +// } + + // 验证登录信息 + UAccount sysUser = uAccountService.getByTelephone(telephone); + if (sysUser == null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "账号不存在!"); + return modelMap; + } + boolean a=!sysUser.getPassword().equals(password); +// if ((sysUser != null && !sysUser.getPassword().equals(password))) { +// modelMap.put(RESULT, false); +// modelMap.put(MESSAGE, "账号或密码错误!"); +// return modelMap; +// } +// if (sysUser.getState().equals("10")) { +// modelMap.put(RESULT, false); +// modelMap.put(MESSAGE, "账号已禁用!"); +// return modelMap; +// } + + // 删除redis中的验证码 + redisBean.hdel(Constants.KAPTCHA_SESSION_KEY, timestamp); + + String token = JwtUtil.sign(String.valueOf(sysUser.getId()), request.getSession().getId(), KeyConstant.JWTKEY); + // 设置token到cookie + CookieUtil.addCookie(response, "token", token); + + // 向redis中写入 + redisBean.hset(String.valueOf(sysUser.getId()), "u_token", token); + redisBean.hset(String.valueOf(sysUser.getId()), "u_role",sysUser.getRoleId()); + modelMap.put("enterpriseName",sysUser.getEnterpriseName()); + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "登录成功!"); + + return modelMap; + } + @RequestMapping("/register") + public @ResponseBody ModelMap register(HttpServletRequest request,HttpServletResponse response, UAccountVo sysUserVo ) { + ModelMap modelMap = new ModelMap(); + UAccount sysUser=new UAccount(); + BeanUtils.copyProperties(sysUserVo,sysUser); + ErrorMessage message = invalid(sysUser); + String timestamp=sysUserVo.getTimestamp(); + String captcha= sysUserVo.getCaptcha(); + if (StringUtil.isEmpty(timestamp) || timestamp.length() > 128) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "非法请求!"); + return modelMap; + } + String captcha_ = redisBean.hget(Constants.KAPTCHA_SESSION_KEY, timestamp); + if(captcha_ == null || !captcha_.equals(captcha)) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "验证码不正确或已过期!"); + return modelMap; + } + if (!message.getStatus()) { + modelMap.put(MESSAGE, message.getMessage()); + modelMap.put(RESULT, message.getStatus()); + return modelMap; + } + + if (uAccountService.getByTelephone(sysUser.getTelephone()) != null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "电话号码已经存在!"); + return modelMap; + } + + sysUser.setId(null); + sysUser.setPassword(Md5Utils.hash(sysUser.getPassword())); + sysUser.setRoleId("1"); + uAccountService.add(sysUser); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "保存成功!"); + return modelMap; + } + + + private ErrorMessage invalid(UAccount sysUser) { + + if (sysUser == null) { + return new ErrorMessage("数据有误!", false); + } + + if (StringUtils.isEmpty(sysUser.getName()) || sysUser.getName().length() > 128) { + return new ErrorMessage("昵称不能为空或长度有误!", false); + } + + if (StringUtils.isEmpty(sysUser.getTelephone()) || sysUser.getTelephone().length() > 128) { + return new ErrorMessage("手机号不能为空或长度有误!", false); + } + + if (!sysUser.getTelephone().matches(RegexConstants.MOBILE_PHONE_NUMBER_PATTERN)) { + return new ErrorMessage("手机号格式有误!", false); + } + + return new ErrorMessage("", true); + } + + @RequestMapping("/toPage") + public @ResponseBody ModelAndView toPage(HttpServletRequest request, HttpServletResponse response) { + + ModelMap modelMap = new ModelMap(); + modelMap.put("roles", roleService.getAll()); + + // 从redis中取当前登录人所属部门id + modelMap.put("departmentId", getDepartmentId(request)); + + return new ModelAndView("/website/account", "modelMap", modelMap); + } + + @RequestMapping("/list") + public @ResponseBody Page list(HttpServletRequest request, Page page, String qdepartmentId, + String qname, String qtelephone, String qroleId, String qstate) { + + if (page == null) { + page = new Page(); + } + + if (StringUtil.isEmpty(qdepartmentId)) { + // 从redis中取当前登录人所属部门id + qdepartmentId = getDepartmentId(request); + } + + return uAccountService.getPage(page.getPageIndex(), page.getLimit(), getEnterpriseId(request), qdepartmentId, + qname, qtelephone, qroleId, qstate); + } + + @RequestMapping("/toEdit") + public @ResponseBody ModelMap toEdit(HttpServletRequest request, String id) { + + ModelMap modelMap = new ModelMap(); + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "非法操作!"); + + if (id != null && id.length() > 0 && id.length() <= 32) { + UAccount account = uAccountService.getById(id); + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, ""); + modelMap.put("account", account); + } + + return modelMap; + } + + @RequestMapping("/add") + public @ResponseBody ModelMap add(HttpServletRequest request, UAccount account) { + ModelMap modelMap = new ModelMap(); + + ErrorMessage message = invalid(account); + if (!message.getStatus()) { + modelMap.put(MESSAGE, message.getMessage()); + modelMap.put(RESULT, message.getStatus()); + return modelMap; + } + + if (uAccountService.getByTelephone(account.getTelephone()) != null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "电话号码已经存在!"); + return modelMap; + } + + account.setId(null); + + account.setPassword(Md5Utils.hash("d1234567")); + uAccountService.add(account); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "保存成功!"); + return modelMap; + } + + @RequestMapping("/update") + public @ResponseBody ModelMap update(HttpServletRequest request, UAccount account) { + + ModelMap modelMap = new ModelMap(); + + ErrorMessage message = invalid(account); + if (!message.getStatus()) { + modelMap.put(MESSAGE, message.getMessage()); + modelMap.put(RESULT, message.getStatus()); + return modelMap; + } + + if (account.getId() == null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "数据有误!"); + modelMap.put("account", account); + return modelMap; + } + + UAccount accountP = uAccountService.getByTelephone(account.getTelephone()); + if (accountP != null && !account.getId().equals(accountP.getId())) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "电话号码已经存在!"); + return modelMap; + } + + accountP = uAccountService.getById(String.valueOf(account.getId())); + if (accountP == null) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "非法请求!"); + return modelMap; + } + + account.setCreateTime(accountP.getCreateTime()); + account.setUpdateTime(System.currentTimeMillis()); + account.setPassword(accountP.getPassword()); + + + uAccountService.update(account); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "保存成功!"); + return modelMap; + } + + @RequestMapping("/delete") + public @ResponseBody ModelMap delete(HttpServletRequest request, String ids) { + + ModelMap modelMap = new ModelMap(); + + if (ids != null && ids.length() > 0) { + String[] ids_ = ids.split(","); + uAccountService.delete(ids_); + } + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "删除成功!"); + + return modelMap; + + } + + private ErrorMessage invalid(EAccount account) { + + if (account == null) { + return new ErrorMessage("数据有误!", false); + } + + if (account.getDepartmentId() == null) { + return new ErrorMessage("所属部门不能为空或长度有误!", false); + } + + if (StringUtils.isEmpty(account.getName()) || account.getName().length() > 128) { + return new ErrorMessage("昵称不能为空或长度有误!", false); + } + + if (account.getRealName() != null && account.getRealName().length() > 128) { + return new ErrorMessage("真实姓名长度有误!", false); + } + + if (StringUtils.isEmpty(account.getTelephone()) || account.getTelephone().length() > 128) { + return new ErrorMessage("手机号不能为空或长度有误!", false); + } + + if (!account.getTelephone().matches(RegexConstants.MOBILE_PHONE_NUMBER_PATTERN)) { + return new ErrorMessage("手机号格式有误!", false); + } + + if (account.getSex() == null || account.getSex().length() != 1) { + return new ErrorMessage("性别不能为空或长度有误!", false); + } + + if (account.getRoleId() == null) { + return new ErrorMessage("账号角色不能为空或长度有误!", false); + } + + if (account.getState() == null || account.getState().length() != 2) { + return new ErrorMessage("账号状态不能为空或长度有误!", false); + } + + return new ErrorMessage("", true); + } + + @RequestMapping("/toSelfInfo") + public @ResponseBody ModelAndView toSelfInfo(HttpServletRequest request, HttpServletResponse response) { + ModelMap modelMap = new ModelMap(); + modelMap.put("roleName", roleService.getById(redisBean.hget(getAccountId(request), "e_role")).getName()); + + UAccount account = uAccountService.getById(getAccountId(request)); + modelMap.put("account", account); + + return new ModelAndView("/website/self_info", "modelMap", modelMap); + } + + @RequestMapping("/selfInfo") + public @ResponseBody ModelMap selfInof(HttpServletRequest request, HttpServletResponse response, UAccount account, + MultipartFile avatarFile) { + ModelMap modelMap = new ModelMap(); + + if (StringUtils.isEmpty(account.getName()) || account.getName().length() > 128) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "昵称不能为空或长度有误!"); + return modelMap; + } + + if (account.getName() != null && account.getName().length() > 128) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "真实姓名长度有误!"); + return modelMap; + } + + + + UAccount accountP = uAccountService.getById(getAccountId(request)); + accountP.setName(account.getName()); + + +// if (avatarFile != null && !avatarFile.isEmpty()) { +// String avatarPath = fileUploadService.uploadImageFile(avatarFile); +// if (avatarPath != null && avatarPath.equals("10")) { +// modelMap.put(RESULT, false); +// modelMap.put(MESSAGE, "文件格式不正确!"); +// return modelMap; +// } +// +// accountP.setAvatar(avatarPath); +// } + + uAccountService.update(accountP); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "个人资料修改成功!"); + + return modelMap; + } + + @RequestMapping("/toPassword") + public @ResponseBody ModelAndView toPassword(HttpServletRequest request, HttpServletResponse response) { + return new ModelAndView("/crm/password"); + } + + @RequestMapping("/password") + public @ResponseBody ModelMap password(HttpServletRequest request, HttpServletResponse response, String opassword, + String npassword, String cpassword) { + ModelMap modelMap = new ModelMap(); + + if (StringUtils.isEmpty(opassword) || opassword.length() < 6) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "原始密码不能为空!"); + return modelMap; + } + + if (StringUtils.isEmpty(npassword) || npassword.length() < 6) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "新密码不能为空且不能少于6位!"); + return modelMap; + } + + if (!opassword.matches(RegexConstants.LETTER_DIGIT_PATTERN)) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "新密码必须包含数字和字母!"); + return modelMap; + } + + if (StringUtils.isEmpty(cpassword) || !cpassword.equals(npassword)) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "新密码与确认密码不一致!"); + return modelMap; + } + + String accountId = getAccountId(request); + UAccount account = uAccountService.getById(accountId); + if (!Md5Utils.hash(opassword).equals(account.getPassword())) { + modelMap.put(RESULT, false); + modelMap.put(MESSAGE, "旧密码输入不正确!"); + return modelMap; + } + + account.setPassword(Md5Utils.hash(npassword)); + uAccountService.update(account); + + modelMap.put(RESULT, true); + modelMap.put(MESSAGE, "密码修改成功,建议您重新登录!"); + + return modelMap; + } + +} diff --git a/ksafepack-admin/src/main/java/com/kelp/website/controller/UContractController.java b/ksafepack-admin/src/main/java/com/kelp/website/controller/UContractController.java new file mode 100644 index 0000000..b3c3f11 --- /dev/null +++ b/ksafepack-admin/src/main/java/com/kelp/website/controller/UContractController.java @@ -0,0 +1,61 @@ +package com.kelp.website.controller; + +import com.kelp.base.Page; +import com.kelp.biz.entity.Dict; +import com.kelp.common.constant.KeyConstant; +import com.kelp.common.utils.AESUtil; +import com.kelp.common.utils.CookieUtil; +import com.kelp.common.utils.jwt.JwtUtil; +import com.kelp.crm.entity.ECustomer; +import com.kelp.crm.entity.Enterprise; +import com.kelp.crm.service.ECustomerService; +import com.kelp.crm.service.EnterpriseService; +import com.kelp.framework.base.controller.ErrorMessage; +import com.kelp.website.entity.UAccount; +import com.kelp.website.entity.UContract; +import com.kelp.website.service.UAccountService; +import com.kelp.website.service.UContractService; +import com.opensymphony.oscache.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author wangpengfei + * @date 2025/4/30 9:00 + */ +@RequestMapping("/website/contract") +@Controller +public class UContractController { + protected String RESULT = "result"; + protected String MESSAGE = "message"; + @Autowired + UContractService uContractService; + @Autowired + UAccountService uAccountService; + @Autowired + ECustomerService eCustomerService; + @Autowired + EnterpriseService enterpriseService; + @RequestMapping("/list") + public @ResponseBody Page list(HttpServletRequest request, Page page, String qname, String qtype, String qstate) { + String token = CookieUtil.getCookie(request, "token"); + String accountId = JwtUtil.getId(token); + UAccount uAccount = uAccountService.getById(accountId); + String encrypt = AESUtil.encrypt(uAccount.getTelephone(), KeyConstant.TELEPHONE); + ECustomer byPhone = eCustomerService.getByPhone(encrypt); + if(byPhone ==null){ + page = new Page(); + } + + if (page == null) { + page = new Page(); + } + + return uContractService.getPage(page.getPageIndex(), page.getLimit(), byPhone.getId()); + } +} diff --git a/ksafepack-admin/src/main/java/com/kelp/website/controller/UIndexController.java b/ksafepack-admin/src/main/java/com/kelp/website/controller/UIndexController.java new file mode 100644 index 0000000..0aeb4b6 --- /dev/null +++ b/ksafepack-admin/src/main/java/com/kelp/website/controller/UIndexController.java @@ -0,0 +1,29 @@ +package com.kelp.website.controller; + +import com.kelp.framework.base.controller.BaseController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 后端访问地址 + */ +@RequestMapping("/website") +@Controller +public class UIndexController extends BaseController { + + + /** + * springboot 启动访问的页面,如果不写默认访问index + * @param request + * @param response + * @return + */ + @RequestMapping("/index") + public String index(HttpServletRequest request, HttpServletResponse response) { + return "/website/login"; + } + +} diff --git a/ksafepack-admin/src/main/resources/static/plat/js/urole.js b/ksafepack-admin/src/main/resources/static/plat/js/urole.js new file mode 100644 index 0000000..ee9efad --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/plat/js/urole.js @@ -0,0 +1,413 @@ +layui.use([ 'form', 'table' ], function() { + var form = layui.form; + var table = layui.table; + + //table options + options = { + elem : '#dataTable', + url : basePath + '/plat/urole/list', + method: 'post', + where:{ + qname:$("#qname").val(), + qlevel:$("#qlevel").val() + }, + //分页请求参数 + request:{ + pageName: 'pageIndex', //页码 + limitName: 'limit' //每页多少数据 + }, + //返回的数据格式 + response:{ + statusName: 'status', //数据状态的字段名称,默认:code + statusCode: 200, //成功的状态码,默认:0 + msgName: 'message', //状态信息的字段名称,默认:msg + countName: 'total', //数据总数的字段名称,默认:count + dataName: 'data' //数据列表的字段名称,默认:data + }, + //每页10条数据 + limit: 10, + //加载时出现加载条 + loading: true, + toolbar : '#toolbar' // 开启头部工具栏,并为其绑定左侧模板 + , + defaultToolbar : [ + { // 自定义头部工具栏右侧图标 + title : '搜索', + layEvent : 'search_box_display', + icon : 'layui-icon-search' + } , + 'filter', 'exports', 'print'], + title : '角色列表', + cellMinWidth: 120, + cols: [[ + {type:'numbers'}, + {type: 'checkbox'}, + {field:'id',title: 'id', hide:true}, + {field:'name', title: '名称',event:'edit',style:'cursor: pointer;'}, + {field:'level', title: '级别'}, + {field:'description', title: '说明'}, + {field: 'right',title:'操作', toolbar: '#rowbar'}, + ]], + done:function (res) {//返回数据执行回调函数 + layer.close(layer.load(2)); //返回数据关闭loading + }, + fixedHeader: true, + id: 'dataTable', + page : true + }; + + //加载数据 + table.render(options); + + //监听toolbar事件 + table.on('toolbar(tablefilter)', function(obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch (obj.event) { + case 'add': + add(); + break; + case 'edit': + var data = checkStatus.data; + if(data.length == 0){ + layer.msg('请先选择要编辑的数据!',{icon:2,time:2000}); + return; + } + if(data.length > 1){ + layer.msg('只能选择一条要编辑的数据!',{icon:2,time:2000}); + return; + } + if(data.length == 1){ + edit(data[0].id); + } + break; + case 'delete': + var data = checkStatus.data; + if(data.length == 0){ + layer.msg('请先选择要删除的数据!',{icon:2,time:2000}); + return; + } + var ids_ = ""; + for(var i=0;i 0){ + url = basePath + "/plat/urole/update"; + } + + if(name.length == 0 || name.length > 20){ + layer.msg('名称不能为空且不能超过20个字符!',{icon:2,time:2000}); + return result; + } + + if(level.length == 0 || level.length > 2){ + layer.msg('级别不能为空且不能超过20个字符!',{icon:2,time:2000}); + return result; + } + + if(description.length == 0 || description.length > 20){ + layer.msg('说明不能超过20个字符!',{icon:2,time:2000}); + return result; + } + + $.ajax({ + url: url, + data: { + "id":id_, + "name":name, + "level":level, + "description":description, + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + layer.msg(data.message,{icon:1,time:2000}); + layer.closeAll("page"); + reload(); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('保存失败,请重试!',{icon:2,time:2000}); + } + }); + + return result; + + }); + + //编辑 + function edit(id){ + + $.ajax({ + url: basePath + "/plat/urole/toEdit", + data: { + "id":id + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + $("#edit_id_").val(data.role.id); + $("#name").val(data.role.name); + $("#level").val(data.role.level); + $("#description").val(data.role.description); + + //刷新页面 + form.render(); + + layer.open({ + title:"添加/编辑", + area: ['100%','100%'], + closeBtn:1, + type: 1, + scrollbar:false, + content:$("#form_edit"), + cancel: function(index, layero){ + layer.close(index); + return false; + } + }); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('服务器错误,请重试!',{icon:2,time:2000}); + } + }); + } + + //删除 + function delete_(ids){ + $.ajax({ + url: basePath + "/plat/urole/delete", + data: { + "ids":ids + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + reload(); + layer.msg('删除成功!',{icon:1,time:1000}); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('服务器错误,请重试!',{icon:2,time:2000}); + } + }); + } + + //监听全选事件 + form.on('checkbox(pgroup_)',function(data){ + if(data.elem.checked){ + $("input[name='" + data.elem.id +"']").each(function(){ + $(this).prop("checked",true); + }); + form.render(); + }else{ + $("input[name='" + data.elem.id +"']").each(function(){ + $(this).prop("checked",false); + }); + form.render(); + } + }); + + //打开授权页面 + function grant(id){ + + $.ajax({ + url: basePath + "/plat/urole/toGrant", + data: { + "id":id + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + + $("#grant_id_").val(data.role.id); + + $("input:checkbox").each(function(){ + $(this).prop("checked",false); + }); + + for(var i=0;i 32){ + layer.msg('角色信息有误!',{icon:2,time:2000}); + return result; + } + + if(functionIds.length == 0){ + layer.msg('请选择角色权限!',{icon:2,time:2000}); + return result; + } + + $.ajax({ + url: url, + data: { + "roleId":roleId, + "functionIds":functionIds + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + result = true; + layer.msg(data.message,{icon:1,time:2000}); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('服务器错误,请重试!',{icon:2,time:2000}); + } + }); + + return result; + + }); + + $('#reload').on('click', function(){ + reload(); + }); + + $("#resetq").on('click',function(){ + $("#qname").val(""); + $("#qlevel").val(""); + form.render(); + }); + + $("#resetf").on('click',function(){ + $("#form_edit")[0].reset(); + }); + + function reload(){ + layer.load(2); + options.where.qname = $("#qname").val(); + options.where.qlevel = $("#qlevel").val(); + table.reload("dataTable",options); + } +}); \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/css/app.css b/ksafepack-admin/src/main/resources/static/website/css/app.css new file mode 100644 index 0000000..9a8e18b --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/css/app.css @@ -0,0 +1,41 @@ +.layui-table-cell{ + height:auto!important; + white-space:normal; +} + +#avatarImg{ + width:200px; + height:200px; + margin-bottom:2px; +} + +.uploadButton { + width: 200px; + height: auto; + overflow: hidden; + + height: 40px; + line-height: 40px; + text-align: center; + background: #d8b49c; + display: block; + font-size: 16px; + border-radius: 2px; + + position: relative; +} + +.uploadFile { + display: block; + width: 100%; + height: 40px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + border-radius: 5px; +} + +.kelp-avatarPreview { + float:right; +} \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/css/district.css b/ksafepack-admin/src/main/resources/static/website/css/district.css new file mode 100644 index 0000000..e69de29 diff --git a/ksafepack-admin/src/main/resources/static/website/css/issue.css b/ksafepack-admin/src/main/resources/static/website/css/issue.css new file mode 100644 index 0000000..9a8e18b --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/css/issue.css @@ -0,0 +1,41 @@ +.layui-table-cell{ + height:auto!important; + white-space:normal; +} + +#avatarImg{ + width:200px; + height:200px; + margin-bottom:2px; +} + +.uploadButton { + width: 200px; + height: auto; + overflow: hidden; + + height: 40px; + line-height: 40px; + text-align: center; + background: #d8b49c; + display: block; + font-size: 16px; + border-radius: 2px; + + position: relative; +} + +.uploadFile { + display: block; + width: 100%; + height: 40px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + border-radius: 5px; +} + +.kelp-avatarPreview { + float:right; +} \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/css/issue_reply.css b/ksafepack-admin/src/main/resources/static/website/css/issue_reply.css new file mode 100644 index 0000000..9a8e18b --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/css/issue_reply.css @@ -0,0 +1,41 @@ +.layui-table-cell{ + height:auto!important; + white-space:normal; +} + +#avatarImg{ + width:200px; + height:200px; + margin-bottom:2px; +} + +.uploadButton { + width: 200px; + height: auto; + overflow: hidden; + + height: 40px; + line-height: 40px; + text-align: center; + background: #d8b49c; + display: block; + font-size: 16px; + border-radius: 2px; + + position: relative; +} + +.uploadFile { + display: block; + width: 100%; + height: 40px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + border-radius: 5px; +} + +.kelp-avatarPreview { + float:right; +} \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/css/jwytask.css b/ksafepack-admin/src/main/resources/static/website/css/jwytask.css new file mode 100644 index 0000000..9a8e18b --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/css/jwytask.css @@ -0,0 +1,41 @@ +.layui-table-cell{ + height:auto!important; + white-space:normal; +} + +#avatarImg{ + width:200px; + height:200px; + margin-bottom:2px; +} + +.uploadButton { + width: 200px; + height: auto; + overflow: hidden; + + height: 40px; + line-height: 40px; + text-align: center; + background: #d8b49c; + display: block; + font-size: 16px; + border-radius: 2px; + + position: relative; +} + +.uploadFile { + display: block; + width: 100%; + height: 40px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + border-radius: 5px; +} + +.kelp-avatarPreview { + float:right; +} \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/css/member.css b/ksafepack-admin/src/main/resources/static/website/css/member.css new file mode 100644 index 0000000..9a8e18b --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/css/member.css @@ -0,0 +1,41 @@ +.layui-table-cell{ + height:auto!important; + white-space:normal; +} + +#avatarImg{ + width:200px; + height:200px; + margin-bottom:2px; +} + +.uploadButton { + width: 200px; + height: auto; + overflow: hidden; + + height: 40px; + line-height: 40px; + text-align: center; + background: #d8b49c; + display: block; + font-size: 16px; + border-radius: 2px; + + position: relative; +} + +.uploadFile { + display: block; + width: 100%; + height: 40px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + border-radius: 5px; +} + +.kelp-avatarPreview { + float:right; +} \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/css/self_info.css b/ksafepack-admin/src/main/resources/static/website/css/self_info.css new file mode 100644 index 0000000..1d16483 --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/css/self_info.css @@ -0,0 +1,36 @@ +#avatarImg{ + width:200px; + height:200px; + margin-bottom:2px; +} + +.uploadButton { + width: 200px; + height: auto; + overflow: hidden; + + height: 40px; + line-height: 40px; + text-align: center; + background: #d8b49c; + display: block; + font-size: 16px; + border-radius: 2px; + + position: relative; +} + +.uploadFile { + display: block; + width: 100%; + height: 40px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + border-radius: 5px; +} + +.kelp-avatarPreview { + float:right; +} \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/static/website/js/account.js b/ksafepack-admin/src/main/resources/static/website/js/account.js new file mode 100644 index 0000000..a3c5938 --- /dev/null +++ b/ksafepack-admin/src/main/resources/static/website/js/account.js @@ -0,0 +1,328 @@ +layui.use([ 'form', 'table' ], function() { + var form = layui.form; + var table = layui.table; + + //table options + options = { + elem : '#dataTable', + url : basePath + '/website/account/list', + method: 'post', + where:{ + qname:$("#qname").val(), + qtelephone:$("#qtelephone").val(), + qroleId:$("#qroleId").val(), + qstate:$("#qstate").val(), + }, + //分页请求参数 + request:{ + pageName: 'pageIndex', //页码 + limitName: 'limit' //每页多少数据 + }, + //返回的数据格式 + response:{ + statusName: 'status', //数据状态的字段名称,默认:code + statusCode: 200, //成功的状态码,默认:0 + msgName: 'message', //状态信息的字段名称,默认:msg + countName: 'total', //数据总数的字段名称,默认:count + dataName: 'data' //数据列表的字段名称,默认:data + }, + //每页10条数据 + limit: 10, + //加载时出现加载条 + loading: true, + toolbar : '#toolbar' // 开启头部工具栏,并为其绑定左侧模板 + , + defaultToolbar : [ + { // 自定义头部工具栏右侧图标 + title : '搜索', + layEvent : 'search_box_display', + icon : 'layui-icon-search' + } , + 'filter', 'exports', 'print'], + title : '账号列表', + cellMinWidth: 120, + cols: [[ + {type:'numbers'}, + {type: 'checkbox'}, + {field:'id', title: 'id',hide:true}, + {field:'name', title: '昵称',sort:true}, + {field:'telephone', title: '手机号',sort:true}, + {field:'roleId', title: '所属角色',sort:true,templet: '#roleTpl'}, + {field:'state', title: '状态',templet: '#stateTpl'}, + {field: 'right',title:'操作', toolbar: '#rowbar'}, + ]], + done:function (res) {//返回数据执行回调函数 + layer.close(layer.load(2)); //返回数据关闭loading + }, + fixedHeader: true, + id: 'dataTable', + page : true + }; + + //加载数据 + table.render(options); + + //监听toolbar事件 + table.on('toolbar(tablefilter)', function(obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch (obj.event) { + case 'add': + add(); + break; + case 'edit': + var data = checkStatus.data; + if(data.length == 0){ + layer.msg('请先选择要编辑的数据!',{icon:2,time:2000}); + return; + } + if(data.length > 1){ + layer.msg('只能选择一条要编辑的数据!',{icon:2,time:2000}); + return; + } + if(data.length == 1){ + edit(data[0].id); + } + break; + case 'delete': + var data = checkStatus.data; + if(data.length == 0){ + layer.msg('请先选择要禁用的数据!',{icon:2,time:2000}); + return; + } + var ids_ = ""; + for(var i=0;i 0){ + url = basePath + "/website/account/update"; + } + + if(name.length == 0 || name.length > 50){ + layer.msg('昵称不能为空且不能超过50个字符!',{icon:2,time:2000}); + return result; + } + + if(realName != null && realName.length > 0 && realName.length > 50){ + layer.msg('真实姓名不能超过50个字符!',{icon:2,time:2000}); + return result; + } + + if(telephone.length == 0 || telephone.length > 20){ + layer.msg('手机号不能为空且不能超过20个字符!',{icon:2,time:2000}); + return result; + } + + if(sex.length == 0 || sex.length != 1){ + layer.msg('性别不能为空或数据非法!',{icon:2,time:2000}); + return result; + } + + if(roleId.length == 0 || roleId.length > 32){ + layer.msg('所属角色不能为空或数据非法!',{icon:2,time:2000}); + return result; + } + + if(state.length == 0 || state.length != 2){ + layer.msg('账号状态不能为空或数据非法!',{icon:2,time:2000}); + return result; + } + + $.ajax({ + url: url, + data: { + "id":id_, + "name":name, + "realName":realName, + "telephone":telephone, + "sex":sex, + "roleId":roleId, + "state":state, + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + layer.msg(data.message,{icon:1,time:2000}); + layer.closeAll("page"); + reload(); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('保存失败,请重试!',{icon:2,time:2000}); + } + }); + + return result; + + }); + + //编辑 + function edit(id){ + + $.ajax({ + url: basePath + "/website/account/toEdit", + data: { + "id":id + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + $("#edit_id_").val(data.account.id); + $("#name").val(data.account.name); + $("#realName").val(data.account.realName); + $("#telephone").val(data.account.telephone); + $("#sex").val(data.account.sex); + $("#roleId").val(data.account.roleId); + $("#state").val(data.account.state); + + //刷新页面 + form.render(); + + layer.open({ + title:"添加/编辑", + area: ['100%','100%'], + closeBtn:1, + type: 1, + scrollbar:false, + content:$("#form_edit"), + cancel: function(index, layero){ + layer.close(index); + return false; + } + }); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('服务器错误,请重试!',{icon:2,time:2000}); + } + }); + } + + //删除 + function delete_(ids){ + $.ajax({ + url: basePath + "/website/account/delete", + data: { + "ids":ids + }, + type : 'post', + dataType : 'json', + success : function(data) { + if (data.result == true) { + reload(); + layer.msg('删除成功!',{icon:1,time:1000}); + } else { + layer.msg(data.message,{icon:2,time:2000}); + } + }, + error : function() { + layer.msg('服务器错误,请重试!',{icon:2,time:2000}); + } + }); + } + + $('#reload').on('click', function(){ + reload(); + }); + + $("#resetq").on('click',function(){ + $("#qname").val(""); + $("#qtelephone").val(""); + $("#qroleId").val(""); + $("#qstate").val("00"); + form.render(); + }); + + $("#resetf").on('click',function(){ + $("#form_edit")[0].reset(); + }); + + function reload(){ + layer.load(2); + options.where.qname = $("#qname").val(); + options.where.qtelephone = $("#qtelephone").val(); + options.where.qroleId = $("#qroleId").val(); + options.where.qstate = $("#qstate").val(); + table.reload("dataTable",options); + } +}); \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/templates/plat/urole.ftl b/ksafepack-admin/src/main/resources/templates/plat/urole.ftl new file mode 100644 index 0000000..ef6fb10 --- /dev/null +++ b/ksafepack-admin/src/main/resources/templates/plat/urole.ftl @@ -0,0 +1,149 @@ + + + + + + + + + 客户角色管理 + <#include "/common/include.ftl"/> + <#include "/common/plugins.ftl"/> + <#include "/common/kelp.ftl"/> + + + + + + + + + +
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ksafepack-admin/src/main/resources/templates/website/account.ftl b/ksafepack-admin/src/main/resources/templates/website/account.ftl new file mode 100644 index 0000000..4f471ed --- /dev/null +++ b/ksafepack-admin/src/main/resources/templates/website/account.ftl @@ -0,0 +1,193 @@ + + + + + + + + + 账号管理 + <#include "/common/include.ftl"/> + <#include "/common/plugins.ftl"/> + <#include "/common/kelp.ftl"/> + + + + + + + + + +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ksafepack-framework/src/main/java/com/kelp/framework/config/DataSourceConfig.java b/ksafepack-framework/src/main/java/com/kelp/framework/config/DataSourceConfig.java index 3a944d9..be8dd51 100644 --- a/ksafepack-framework/src/main/java/com/kelp/framework/config/DataSourceConfig.java +++ b/ksafepack-framework/src/main/java/com/kelp/framework/config/DataSourceConfig.java @@ -63,7 +63,7 @@ public class DataSourceConfig { @Bean(name = "entityManagerFactory") public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,DynamicDataSource dynamicDataSource) { return builder.dataSource(dynamicDataSource) - .packages("com.kelp.zhishu.entity","com.kelp.plat.entity","com.kelp.biz.entity","com.kelp.business.entity","com.kelp.jwy.entity","com.kelp.crm.entity") // 设置实体类所在位置 + .packages("com.kelp.zhishu.entity","com.kelp.plat.entity","com.kelp.biz.entity","com.kelp.business.entity","com.kelp.jwy.entity","com.kelp.crm.entity","com.kelp.website.entity") // 设置实体类所在位置 .persistenceUnit("persistenceUnit").build(); } diff --git a/ksafepack-framework/src/main/java/com/kelp/framework/config/InterceptorConfig.java b/ksafepack-framework/src/main/java/com/kelp/framework/config/InterceptorConfig.java index 1d2dd3f..171295d 100644 --- a/ksafepack-framework/src/main/java/com/kelp/framework/config/InterceptorConfig.java +++ b/ksafepack-framework/src/main/java/com/kelp/framework/config/InterceptorConfig.java @@ -2,6 +2,7 @@ package com.kelp.framework.config; import java.util.List; +import com.kelp.framework.interceptor.UInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; @@ -35,8 +36,10 @@ public class InterceptorConfig extends WebMvcConfigurationSupport { public EInterceptor eInterceptor() { return new EInterceptor(); } - - + @Bean + public UInterceptor uInterceptor() { + return new UInterceptor(); + } @Override public void addInterceptors(InterceptorRegistry registry) { @@ -45,6 +48,8 @@ public class InterceptorConfig extends WebMvcConfigurationSupport { registry.addInterceptor(pInterceptor()).addPathPatterns("/plat/**").excludePathPatterns("/plat/index","/plat/login"); registry.addInterceptor(eInterceptor()).addPathPatterns("/crm/**").excludePathPatterns("/crm/index","/crm/login"); + + registry.addInterceptor(uInterceptor()).addPathPatterns("/website/**").excludePathPatterns("/website/index","/website/login").excludePathPatterns("/website/register"); } /** diff --git a/ksafepack-framework/src/main/java/com/kelp/framework/interceptor/UInterceptor.java b/ksafepack-framework/src/main/java/com/kelp/framework/interceptor/UInterceptor.java new file mode 100644 index 0000000..c678426 --- /dev/null +++ b/ksafepack-framework/src/main/java/com/kelp/framework/interceptor/UInterceptor.java @@ -0,0 +1,141 @@ +/** + * 解决nginx负载均衡问题 + */ +package com.kelp.framework.interceptor; + +import com.kelp.common.config.RedisBean; +import com.kelp.common.constant.KeyConstant; +import com.kelp.common.utils.AuthenticationBean; +import com.kelp.common.utils.CookieUtil; +import com.kelp.common.utils.jwt.JwtUtil; +import com.kelp.framework.exception.E_NOGrantException; +import com.kelp.framework.exception.E_NOLoginException; +import com.kelp.plat.service.U_RFService; +import com.opensymphony.oscache.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class UInterceptor extends HandlerInterceptorAdapter{ + + private static Logger log = LoggerFactory.getLogger(UInterceptor.class); + + @Autowired + private RedisBean redisBean; + + @Resource + private U_RFService ufService; + + @Value("${token.alive.time}") + private int tokenLiveCount; + + @Override + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + + System.out.println("user interceptor ----- "); + + String url = request.getRequestURL().toString(); + if (url.lastIndexOf("website") > 0) { + url = url.substring(url.lastIndexOf("website") - 1); + } + + System.out.println("enterprise u r accessing : " + url); + + log.error("enterprise u r accessing : " + url); + + String token = CookieUtil.getCookie(request, "token"); + + //如果没有token则没有登录 + if(StringUtil.isEmpty(token)){ + log.error("accessed without token."); + throw new E_NOLoginException("EL-001","accessed without token."); + } + + //验证token是否合法,不合法则登录 + if(!JwtUtil.verify(token, KeyConstant.JWTKEY)){ + System.out.println("the token is : expired..."); + log.error("the token is : expired..."); + throw new E_NOLoginException("EL-002","the token has expired."); + } + + String accountId = JwtUtil.getId(token); + String host = JwtUtil.getHost(token); + + //判断是否在另外的设备上登录 + if(!request.getSession().getId().equals(host)){ + System.out.println("u were logined on anather device."); + log.error("u logined on anather device."); + throw new E_NOLoginException("EL-003","u logined on anather device."); + } + + //如果redis中没有本次访问的token或本次访问的token与redis中不同 + if(null == redisBean.hget(accountId, "u_token") || !redisBean.hget(accountId, "u_token").equals(token)){ + System.out.println("there is no token in redis."); + log.error("there is no token in redis."); + throw new E_NOLoginException("EL-004","the token don't match token in at."); + } + + //从redis中获取departmentId +// String departmentId = redisBean.hget(accountId, "e_department"); + //如果没有找到,则视为没有登录 +// if(departmentId == null){ +// System.out.println("ur department is not valid."); +// log.error("ur department is not valid."); +// throw new E_NOLoginException("EL-005","the token of department has expired."); +// } + + //从redis中获取roleId + String roleId = redisBean.hget(accountId, "u_role"); + //如果没有找到,则视为没有登录 + if(roleId == null){ + System.out.println("ur role is not valid."); + log.error("ur role is not valid."); + throw new E_NOLoginException("EL-006","the token of role has expired."); + } + + + //判断此account在本系统中的权限 + if(!AuthenticationBean.getERfMap().containsKey(roleId)){ + AuthenticationBean.getERfMap().put(roleId, ufService.getSRFs(roleId)); + } + + if(!AuthenticationBean.getERfMap().get(roleId).containsKey(url)){ + System.out.println(url +",u r not granted to access this url."); + log.error("u r not granted to access this url."); + throw new E_NOGrantException("EG-001","u r not granted to access this url."); + } + + //更新token + token = JwtUtil.sign(accountId, request.getSession().getId(), KeyConstant.JWTKEY); + //更新redis + redisBean.hset(accountId, "u_token",token); + redisBean.hset(accountId, "u_role",roleId); +// redisBean.hset(accountId, "u_department",departmentId); + //更新cookie + CookieUtil.editCookie(request, response, "token", token); + + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, + HttpServletResponse response, Object handler, Exception ex) + throws Exception { + super.afterCompletion(request, response, handler, ex); + } + + @Override + public void postHandle(HttpServletRequest request, + HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + super.postHandle(request, response, handler, modelAndView); + } +} diff --git a/ksafepack-system/src/main/java/com/kelp/crm/service/ECustomerService.java b/ksafepack-system/src/main/java/com/kelp/crm/service/ECustomerService.java index 331796b..38548aa 100644 --- a/ksafepack-system/src/main/java/com/kelp/crm/service/ECustomerService.java +++ b/ksafepack-system/src/main/java/com/kelp/crm/service/ECustomerService.java @@ -4,6 +4,7 @@ import java.util.List; import com.kelp.base.Page; import com.kelp.crm.entity.ECustomer; +import com.kelp.crm.entity.Enterprise; public interface ECustomerService { @@ -23,5 +24,5 @@ public interface ECustomerService { String state); public Page getPage4NoVisit(int pageNumber, int pageSize, String startDate, String endDate); - + public ECustomer getByPhone(String phone); } diff --git a/ksafepack-system/src/main/java/com/kelp/crm/service/EnterpriseService.java b/ksafepack-system/src/main/java/com/kelp/crm/service/EnterpriseService.java index df8a54a..5121660 100644 --- a/ksafepack-system/src/main/java/com/kelp/crm/service/EnterpriseService.java +++ b/ksafepack-system/src/main/java/com/kelp/crm/service/EnterpriseService.java @@ -26,4 +26,5 @@ public interface EnterpriseService { public List listTop(Long pId); public List listdsub(String pId); public List listdsub(String pId ,String type); + public Enterprise getByPhone(String phone); } diff --git a/ksafepack-system/src/main/java/com/kelp/crm/service/impl/ECustomerServiceImpl.java b/ksafepack-system/src/main/java/com/kelp/crm/service/impl/ECustomerServiceImpl.java index 1fe0a44..cca1e47 100644 --- a/ksafepack-system/src/main/java/com/kelp/crm/service/impl/ECustomerServiceImpl.java +++ b/ksafepack-system/src/main/java/com/kelp/crm/service/impl/ECustomerServiceImpl.java @@ -81,6 +81,11 @@ public class ECustomerServiceImpl implements ECustomerService { return page; } + @Override + public ECustomer getByPhone(String phone) { + return customerDao.get("telePhone",phone); + } + @Override public List getAll(String state) { return customerDao.getAll(state); diff --git a/ksafepack-system/src/main/java/com/kelp/crm/service/impl/EnterpriseServiceImpl.java b/ksafepack-system/src/main/java/com/kelp/crm/service/impl/EnterpriseServiceImpl.java index 7eaf6ca..b4ec034 100644 --- a/ksafepack-system/src/main/java/com/kelp/crm/service/impl/EnterpriseServiceImpl.java +++ b/ksafepack-system/src/main/java/com/kelp/crm/service/impl/EnterpriseServiceImpl.java @@ -92,5 +92,10 @@ public class EnterpriseServiceImpl implements EnterpriseService { public List listdsub(String pId,String type) { return enterpriseDao.listdsub(Long.valueOf(pId),type); } - + + @Override + public Enterprise getByPhone(String phone) { + return enterpriseDao.get("phone",phone); + } + } diff --git a/ksafepack-system/src/main/java/com/kelp/plat/dao/U_RFDao.java b/ksafepack-system/src/main/java/com/kelp/plat/dao/U_RFDao.java new file mode 100644 index 0000000..4e0b258 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/dao/U_RFDao.java @@ -0,0 +1,31 @@ +package com.kelp.plat.dao; + +import com.kelp.base.dao.BaseDao; +import com.kelp.plat.entity.Function; +import com.kelp.plat.entity.U_RF; + +import java.util.List; + +public interface U_RFDao extends BaseDao { + + /** + * 取得这个Role可以访问的资源 + * @param roleId + * @return + */ + public List getSRFByRoleId(Long roleId); + + /** + * 保存权限信息 + * @param roleId + * @param functionIds + */ + public void setRFs(Long roleId,List functionIds); + + /** + * 取得这个Role的权限设置信息 + * @param roleId + * @return + */ + public List getRFsByRoleId(Long roleId); +} diff --git a/ksafepack-system/src/main/java/com/kelp/plat/dao/U_RoleDao.java b/ksafepack-system/src/main/java/com/kelp/plat/dao/U_RoleDao.java new file mode 100644 index 0000000..a2ec6bf --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/dao/U_RoleDao.java @@ -0,0 +1,17 @@ +package com.kelp.plat.dao; + +import com.kelp.base.Page; +import com.kelp.base.dao.BaseDao; +import com.kelp.plat.entity.U_Role; + +import java.util.List; + +public interface U_RoleDao extends BaseDao{ + + public Page getPage(int pageNumber, int pageSize,String name,Integer level); + + public List getByLevel(Integer level); + + public List getAll(); + +} \ No newline at end of file diff --git a/ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RFDaoImpl.java b/ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RFDaoImpl.java new file mode 100644 index 0000000..505c6dd --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RFDaoImpl.java @@ -0,0 +1,52 @@ +package com.kelp.plat.dao.impl; + + +import com.kelp.base.dao.impl.BaseDaoImpl; +import com.kelp.common.utils.IdWorker; +import com.kelp.plat.entity.E_RF; +import com.kelp.plat.entity.Function; +import com.kelp.plat.dao.U_RFDao; +import com.kelp.plat.entity.U_RF; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +@Transactional +public class U_RFDaoImpl extends BaseDaoImpl implements U_RFDao { + + @Autowired + private IdWorker idWorker; + + @SuppressWarnings("unchecked") + @Override + public List getSRFByRoleId(Long roleId) { + String sql = "select o from Function o where o.id in (select functionId from U_RF where roleId = :roleId) order by moduleId"; + return em.createQuery(sql).setParameter("roleId", roleId).getResultList(); + } + + @Override + @Transactional + public void setRFs(Long roleId, List functionIds) { + //先删除 + String sql = "delete U_RF where roleId = :roleId"; + em.createQuery(sql).setParameter("roleId", roleId).executeUpdate(); + + //再添加 + for(Long functionId : functionIds){ + E_RF rf = new E_RF(roleId,functionId); + rf.setId(idWorker.nextId()); + em.persist(rf); + } + } + + @SuppressWarnings("unchecked") + @Override + public List getRFsByRoleId(Long roleId) { + String sql = "select o from U_RF o where roleId = :roleId"; + return em.createQuery(sql).setParameter("roleId", roleId).getResultList(); + } + +} diff --git a/ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RoleDaoImpl.java b/ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RoleDaoImpl.java new file mode 100644 index 0000000..4bf8142 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/dao/impl/U_RoleDaoImpl.java @@ -0,0 +1,68 @@ +package com.kelp.plat.dao.impl; + +import com.kelp.base.Page; +import com.kelp.base.dao.impl.BaseDaoImpl; +import com.kelp.plat.dao.U_RoleDao; +import com.kelp.plat.entity.U_Role; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Repository +@Transactional +public class U_RoleDaoImpl extends BaseDaoImpl implements U_RoleDao { + + @Override + @Transactional + public boolean delete(List ids) { + + //处理RF + String sql = "delete U_RF where roleId in(:roleIds)"; + em.createQuery(sql).setParameter("roleIds", ids).executeUpdate(); + + super.delete(ids); + + return true; + } + + @Override + public Page getPage(int pageNumber, int pageSize,String name,Integer level) { + + String sql = " from U_Role o where 1=1 "; + List params = new ArrayList(); + + int i = 1; + if(name == null || name.length() == 0){ + name = ""; + sql += " and name like ?" + i++; + params.add("%" + name + "%"); + } + + if(level != null) { + sql += "and level = ?" + i++; + params.add(level); + } + + sql += "order by level"; + + return getBeanPage(pageNumber, pageSize, sql, params); + } + + @SuppressWarnings("unchecked") + @Override + public List getAll() { + String sql = "select o from U_Role o order by level"; + return em.createQuery(sql).getResultList(); + } + + @SuppressWarnings("unchecked") + @Override + public List getByLevel(Integer level) { + String sql = "select o from U_Role o where level = :level "; + + return em.createQuery(sql).setParameter("level", level).getResultList(); + } + +} diff --git a/ksafepack-system/src/main/java/com/kelp/plat/entity/U_RF.java b/ksafepack-system/src/main/java/com/kelp/plat/entity/U_RF.java new file mode 100644 index 0000000..a4e4a61 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/entity/U_RF.java @@ -0,0 +1,54 @@ +/** + * enterpirse rf + */ +package com.kelp.plat.entity; + +import com.kelp.base.BaseEntity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +@Entity +@Table(name="dt_user_rf") +public class U_RF extends BaseEntity { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public U_RF() {} + + public U_RF(Long roleId, Long functionId) { + this.roleId = roleId; + this.functionId = functionId; + } + + /** + * 角色id + */ + @Column(nullable = false) + private Long roleId; + + /** + * 资源id + */ + @Column(nullable = false) + private Long functionId; + + + public Long getRoleId() { + return roleId; + } + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + public Long getFunctionId() { + return functionId; + } + public void setFunctionId(Long functionId) { + this.functionId = functionId; + } +} \ No newline at end of file diff --git a/ksafepack-system/src/main/java/com/kelp/plat/entity/U_Role.java b/ksafepack-system/src/main/java/com/kelp/plat/entity/U_Role.java new file mode 100644 index 0000000..02ac01b --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/entity/U_Role.java @@ -0,0 +1,60 @@ +/** + * enterpirse role + */ +package com.kelp.plat.entity; + +import com.kelp.base.BaseEntity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +@Entity +@Table(name="dt_user_role") +public class U_Role extends BaseEntity { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * 角色名称 + */ + @Column(length = 50, nullable = false) + private String name; + + /** + * + */ + @Column(nullable = false) + private Integer level = 0; + + /** + * 描述 + */ + @Column(length=128) + private String description; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public Integer getLevel() { + return level; + } + public void setLevel(Integer level) { + this.level = level; + } + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + +} \ No newline at end of file diff --git a/ksafepack-system/src/main/java/com/kelp/plat/service/U_RFService.java b/ksafepack-system/src/main/java/com/kelp/plat/service/U_RFService.java new file mode 100644 index 0000000..35ef263 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/service/U_RFService.java @@ -0,0 +1,34 @@ +package com.kelp.plat.service; + +import com.kelp.plat.entity.MF; +import com.kelp.plat.entity.U_RF; + +import java.util.List; +import java.util.Map; + +public interface U_RFService { + + /** + * 取得权限信息,key为url,value为roleId + * @param roleId + * @return + */ + public Map getSRFs(String roleId); + + /** + * 保存权限信息 + * @param roleId + * @param functionIds + */ + public void setRFs(String roleId,String[] functionIds); + + public List getMFs(); + + /** + * 取得此角色所有的权限信息 + * @param roleId + * @return + */ + public List getRFs(String roleId); + +} diff --git a/ksafepack-system/src/main/java/com/kelp/plat/service/U_RoleService.java b/ksafepack-system/src/main/java/com/kelp/plat/service/U_RoleService.java new file mode 100644 index 0000000..4ca00f6 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/service/U_RoleService.java @@ -0,0 +1,28 @@ +package com.kelp.plat.service; + +import com.kelp.base.Page; +import com.kelp.plat.entity.U_Role; + +import java.util.List; + + +public interface U_RoleService { + + public void add(U_Role role); + + public void update(U_Role role); + + public void delete(String[] ids); + + public U_Role getById(String id); + + public U_Role getByName(String name); + + public Page getPage(int pageNumber, int pageSize,String name, Integer level); + + /////////////////////////////////////////// + + public List getByLevel(Integer level); + + public List getAll(); +} diff --git a/ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RFServiceImpl.java b/ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RFServiceImpl.java new file mode 100644 index 0000000..0222fcc --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RFServiceImpl.java @@ -0,0 +1,82 @@ +package com.kelp.plat.service.impl; + +import com.kelp.plat.dao.FunctionDao; +import com.kelp.plat.dao.ModuleDao; +import com.kelp.plat.entity.Function; +import com.kelp.plat.entity.MF; +import com.kelp.plat.entity.Module; +import com.kelp.plat.dao.U_RFDao; +import com.kelp.plat.entity.U_RF; +import com.kelp.plat.service.U_RFService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class U_RFServiceImpl implements U_RFService { + + @Resource + private U_RFDao ufDao; + + @Resource + private FunctionDao functiondao; + + @Resource + private ModuleDao moduleDao; + + @Override + public Map getSRFs(String roleId) { + + List functions = ufDao.getSRFByRoleId(Long.valueOf(roleId)); + Map rfMap = new HashMap(); + for(Function function : functions){ + rfMap.put(function.getUrl(), roleId); + } + + return rfMap; + } + + @Override + public void setRFs(String roleId, String[] functionIds) { + + List functionIds_ = new ArrayList(); + for(String functionId : functionIds){ + functionIds_.add(Long.valueOf(functionId)); + } + ufDao.setRFs(Long.valueOf(roleId), functionIds_); + } + + @Override + public List getMFs() { + + List mfs = new ArrayList(); + List modules = moduleDao.getAll("00"); + List allFunctions = functiondao.getAll("moduleId","asc"); + + for(Module module : modules){ + MF mf = new MF(); + mf.setModule(module); + List functions = new ArrayList(); + for(Function function : allFunctions){ + if(function.getModuleId().equals(module.getId())){ + functions.add(function); + } + } + mf.setFunctions(functions); + + mfs.add(mf); + } + + return mfs; + } + + @Override + public List getRFs(String roleId) { + return ufDao.getRFsByRoleId(Long.valueOf(roleId)); + } + +} \ No newline at end of file diff --git a/ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RoleServiceImpl.java b/ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RoleServiceImpl.java new file mode 100644 index 0000000..22b39e6 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/plat/service/impl/U_RoleServiceImpl.java @@ -0,0 +1,76 @@ +package com.kelp.plat.service.impl; + +import com.kelp.base.Page; +import com.kelp.common.utils.IdWorker; +import com.kelp.plat.dao.U_RoleDao; +import com.kelp.plat.entity.U_Role; +import com.kelp.plat.service.U_RoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +@Service +public class U_RoleServiceImpl implements U_RoleService { + + @Autowired + private IdWorker idWorker; + + @Resource + private U_RoleDao roleDao; + + @Override + public void add(U_Role role) { + role.setId(idWorker.nextId()); + roleDao.add(role); + } + + @Override + public void update(U_Role role) { + roleDao.update(role); + } + + @Override + public void delete(String[] ids) { + List ids_ = new ArrayList(); + for(String id : ids){ + ids_.add(Long.valueOf(id)); + } + roleDao.delete(ids_); + } + + @Override + public U_Role getById(String id) { + return roleDao.get(Long.valueOf(id)); + } + + @Override + public Page getPage(int pageNumber, int pageSize,String name, Integer level) { + + Page page = roleDao.getPage(pageNumber, pageSize,name,level); + + if(page == null){ + page = new Page(); + } + + return page; + } + + @Override + public U_Role getByName(String name) { + return roleDao.get("name", name); + } + + @Override + public List getAll() { + return roleDao.getAll(); + } + + @Override + public List getByLevel(Integer level) { + return roleDao.getByLevel(level); + } + +} \ No newline at end of file diff --git a/ksafepack-system/src/main/java/com/kelp/website/dao/UAccountDao.java b/ksafepack-system/src/main/java/com/kelp/website/dao/UAccountDao.java new file mode 100644 index 0000000..a3ef92d --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/dao/UAccountDao.java @@ -0,0 +1,14 @@ +package com.kelp.website.dao; + +import com.kelp.base.dao.BaseDao; +import com.kelp.website.entity.UAccount; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2025/4/28 14:24 + */ +public interface UAccountDao extends BaseDao { + public void setState(List ids, String state); +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/dao/UContractDao.java b/ksafepack-system/src/main/java/com/kelp/website/dao/UContractDao.java new file mode 100644 index 0000000..7da371a --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/dao/UContractDao.java @@ -0,0 +1,15 @@ +package com.kelp.website.dao; + +import com.kelp.base.Page; +import com.kelp.base.dao.BaseDao; +import com.kelp.biz.entity.Dict; +import com.kelp.website.entity.UAccount; +import com.kelp.website.entity.UContract; + +/** + * @author wangpengfei + * @date 2025/4/30 8:45 + */ +public interface UContractDao extends BaseDao { + public Page getPage(int pageNumber, int pageSize, long id ); +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/dao/impl/UAccountDaoImpl.java b/ksafepack-system/src/main/java/com/kelp/website/dao/impl/UAccountDaoImpl.java new file mode 100644 index 0000000..8922a09 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/dao/impl/UAccountDaoImpl.java @@ -0,0 +1,23 @@ +package com.kelp.website.dao.impl; + +import com.kelp.base.dao.impl.BaseDaoImpl; +import com.kelp.website.dao.UAccountDao; +import com.kelp.website.entity.UAccount; +import org.springframework.stereotype.Repository; + +import javax.transaction.Transactional; +import java.util.List; + +/** + * @author wangpengfei + * @date 2025/4/28 14:25 + */ +@Repository +public class UAccountDaoImpl extends BaseDaoImpl implements UAccountDao { + @Transactional + @Override + public void setState(List ids ,String state) { + String sql = "update EAccount set state = :state where id in (:ids)"; + em.createQuery(sql).setParameter("state", state).setParameter("ids", ids).executeUpdate(); + } +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/dao/impl/UContractDaoImpl.java b/ksafepack-system/src/main/java/com/kelp/website/dao/impl/UContractDaoImpl.java new file mode 100644 index 0000000..404ab5d --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/dao/impl/UContractDaoImpl.java @@ -0,0 +1,33 @@ +package com.kelp.website.dao.impl; + +import com.kelp.base.Page; +import com.kelp.base.dao.impl.BaseDaoImpl; +import com.kelp.biz.entity.Dict; +import com.kelp.website.dao.UAccountDao; +import com.kelp.website.dao.UContractDao; +import com.kelp.website.entity.UAccount; +import com.kelp.website.entity.UContract; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangpengfei + * @date 2025/4/30 8:45 + */ +@Repository +public class UContractDaoImpl extends BaseDaoImpl implements UContractDao { + @Override + public Page getPage(int pageNumber, int pageSize, long id) { + String sql = " from UContract o where 1 = 1 "; + List params = new ArrayList(); + int index = 1; + + sql += " and customerId = ?" + index++; + params.add(id); +// sql += " order by type,code,name "; + + return getBeanPage(pageNumber, pageSize, sql, params); + } +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/entity/UAccount.java b/ksafepack-system/src/main/java/com/kelp/website/entity/UAccount.java new file mode 100644 index 0000000..ccfec9e --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/entity/UAccount.java @@ -0,0 +1,85 @@ +package com.kelp.website.entity; + +import com.kelp.base.BaseEntity; +import com.kelp.common.constant.KeyConstant; +import com.kelp.common.utils.AESUtil; +import org.apache.commons.lang3.StringUtils; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +/** + * @author wangpengfei + * @date 2025/4/28 14:16 + */ +@Entity +@Table(name = "dt_user_account") +public class UAccount extends BaseEntity { + + private static final long serialVersionUID = 1L; + @Column(name="name",nullable = false) + private String name; + @Column(name="password",nullable = false) + private String password; + @Column(name="telephone",nullable = false) + private String telephone; + @Column(name="enterpriseName",nullable = false) + private String enterpriseName; + @Column(name="roleId",nullable = false) + private String roleId; + + + public UAccount(String name, String password, String telephone, String enterpriseName, String roleId) { + this.name = name; + this.password = password; + this.telephone = telephone; + this.enterpriseName = enterpriseName; + this.roleId = roleId; + } + + public UAccount() { + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTelephone() { + return telephone != null ? AESUtil.decrypt(telephone, KeyConstant.TELEPHONE) : ""; + } + public void setTelephone(String telephone) { + if (!StringUtils.isEmpty(telephone)) { + this.telephone = AESUtil.encrypt(telephone, KeyConstant.TELEPHONE); + } + } + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getRoleId() { + return roleId; + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/entity/UAccountVo.java b/ksafepack-system/src/main/java/com/kelp/website/entity/UAccountVo.java new file mode 100644 index 0000000..0ccf0c8 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/entity/UAccountVo.java @@ -0,0 +1,104 @@ +package com.kelp.website.entity; + +import javax.persistence.Column; + +/** + * @author wangpengfei + * @date 2025/4/28 17:43 + */ + +public class UAccountVo { + private String id; + @Column(name="name",nullable = false) + private String name; + @Column(name="password",nullable = false) + private String password; + @Column(name="realName",nullable = false) + private String realName; + @Column(name="telephone",nullable = false) + private String telephone; + @Column(name="enterpriseName",nullable = false) + private String enterpriseName; + @Column(name="enterpriseName",nullable = false) + private String captcha; + private String timestamp; + + public UAccountVo(String name, String password, String realName, String telephone, String enterpriseName, String captcha, String timestamp) { + + this.name = name; + this.password = password; + this.realName = realName; + this.telephone = telephone; + this.enterpriseName = enterpriseName; + this.captcha = captcha; + this.timestamp=timestamp; + } + + public UAccountVo() { + + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getCaptcha() { + return captcha; + } + + public void setCaptcha(String captcha) { + this.captcha = captcha; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/entity/UContract.java b/ksafepack-system/src/main/java/com/kelp/website/entity/UContract.java new file mode 100644 index 0000000..9c927ba --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/entity/UContract.java @@ -0,0 +1,255 @@ +package com.kelp.website.entity; + +import com.kelp.base.BaseEntity; +import com.kelp.common.constant.KeyConstant; +import com.kelp.common.utils.AESUtil; +import org.apache.commons.lang3.StringUtils; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import java.math.BigDecimal; + +/** + * @author wangpengfei + * @date 2025/4/30 8:47 + */ +@Entity +@Table(name = "dt_enterprise_contract") +public class UContract extends BaseEntity { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * 企业,目前不使用 + */ +// @Column(nullable = false,name="enterpriseId") +// private Long enterpriseId; + + /** + * 企业id path,目前不使用 + */ +// @Column(nullable = false,length = 512) +// private String eidPath; + + /** + * 部门,目前不使用 + */ +// @Column(nullable = false,name="departmentId") +// private Long departmentId; + + /** + * 部门id path,目前不使用 + */ +// @Column(nullable = false,length = 512) +// private String didPath; + + + /** + * 客户id,不可修改 + */ + @Column(nullable = false) + private Long customerId; + + /** + * 客户名称,不可修改 + */ + @Column(nullable = false,name="customerName",length = 128) + private String customerName_; + + /** + * 录入人,不可修改 + */ + @Column(nullable = false) + private Long accountId; + + /** + * 录入人姓名,不可修改 + */ + @Column(length = 128,nullable = false,name="accountName") + private String accountName_; + + /** + * 我方签订人 + */ + @Column(length = 128,nullable = false,name="staffName") + private String staffName_; + + /** + * 甲方签订人 + */ + @Column(length = 128,nullable = false,name="customerSignatory") + private String customerSignatory_; + + /** + * 签订时间 + */ + @Column(nullable = false) + private Long signTime; + + /** + * 合同终止时间 + */ + private Long endTime; + + /** + * 合同金额 + */ + private BigDecimal amount; + + /** + * 发票情况 + */ + @Column(length = 1024) + private String fapiao; + + /** + * 回款情况 + */ + @Column(length = 1024) + private String dso; + + /** + * 备注或内容 + */ + @Column(length = 1024) + private String content; + + + /** + * 状态:00-正常,10-删除 + */ + @Column(nullable = false,length = 2) + private String state; + +// public Long getEnterpriseId() { +// return enterpriseId; +// } +// public void setEnterpriseId(Long enterpriseId) { +// this.enterpriseId = enterpriseId; +// } + +// public String getEidPath() { +// return eidPath; +// } +// public void setEidPath(String eidPath) { +// this.eidPath = eidPath; +// } + +// public Long getDepartmentId() { +// return departmentId; +// } +// public void setDepartmentId(Long departmentId) { +// this.departmentId = departmentId; +// } + +// public String getDidPath() { +// return didPath; +// } +// public void setDidPath(String didPath) { +// this.didPath = didPath; +// } + + public Long getAccountId() { + return accountId; + } + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public String getAccountName() { + return accountName_ != null ? AESUtil.decrypt(accountName_, KeyConstant.REALNAME) : ""; + } + public void setAccountName(String accountName) { + if (!StringUtils.isEmpty(accountName)) { + this.accountName_ = AESUtil.encrypt(accountName, KeyConstant.REALNAME); + } + } + + public String getStaffName() { + return staffName_ != null ? AESUtil.decrypt(staffName_, KeyConstant.REALNAME) : ""; + } + public void setStaffName(String staffName) { + if (!StringUtils.isEmpty(staffName)) { + this.staffName_ = AESUtil.encrypt(staffName, KeyConstant.REALNAME); + } + } + + public Long getCustomerId() { + return customerId; + } + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName_ != null ? AESUtil.decrypt(customerName_, KeyConstant.REALNAME) : ""; + } + public void setCustomerName(String customerName) { + if (!StringUtils.isEmpty(customerName)) { + this.customerName_ = AESUtil.encrypt(customerName, KeyConstant.REALNAME); + } + } + + public String getCustomerSignatory() { + return customerSignatory_ != null ? AESUtil.decrypt(customerSignatory_, KeyConstant.REALNAME) : ""; + } + public void setCustomerSignatory(String customerSignatory) { + if (!StringUtils.isEmpty(customerSignatory)) { + this.customerSignatory_ = AESUtil.encrypt(customerSignatory, KeyConstant.REALNAME); + } + } + + public Long getSignTime() { + return signTime; + } + public void setSignTime(Long signTime) { + this.signTime = signTime; + } + + public Long getEndTime() { + return endTime; + } + public void setEndTime(Long endTime) { + this.endTime = endTime; + } + + public BigDecimal getAmount() { + return amount; + } + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getFapiao() { + return fapiao; + } + public void setFapiao(String fapiao) { + this.fapiao = fapiao; + } + + public String getDso() { + return dso; + } + public void setDso(String dso) { + this.dso = dso; + } + + public String getContent() { + return content; + } + public void setContent(String content) { + this.content = content; + } + + public String getState() { + return state; + } + public void setState(String state) { + this.state = state; + } + +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/service/UAccountService.java b/ksafepack-system/src/main/java/com/kelp/website/service/UAccountService.java new file mode 100644 index 0000000..d436b19 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/service/UAccountService.java @@ -0,0 +1,30 @@ +package com.kelp.website.service; + +import com.kelp.base.Page; +import com.kelp.crm.entity.EAccount; +import com.kelp.website.entity.UAccount; + +/** + * @author wangpengfei + * @date 2025/4/28 14:26 + */ +public interface UAccountService { + + public UAccount getByTelephone(String telephone); + public void add(UAccount uAccount); + public UAccount getById(String id); + public void update(UAccount uAccount); + public void delete(String[] ids); + /** + * + * @param pageNumber + * @param pageSize + * @param name - 昵称 + * @param telephone + * @param roleId + * @param state + * @return + */ + public Page getPage(int pageNumber, int pageSize, String enterpriseId, String departmentId, String name, + String telephone, String roleId, String state); +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/service/UContractService.java b/ksafepack-system/src/main/java/com/kelp/website/service/UContractService.java new file mode 100644 index 0000000..e7d0821 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/service/UContractService.java @@ -0,0 +1,16 @@ +package com.kelp.website.service; + +import com.kelp.base.Page; +import com.kelp.website.entity.UContract; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2025/4/30 8:47 + */ +public interface UContractService { + + + public Page getPage(int pageNumber, int pageSize,long id); +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/service/impl/UAccountServiceImpl.java b/ksafepack-system/src/main/java/com/kelp/website/service/impl/UAccountServiceImpl.java new file mode 100644 index 0000000..a97299e --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/service/impl/UAccountServiceImpl.java @@ -0,0 +1,68 @@ +package com.kelp.website.service.impl; + +import com.kelp.base.Page; +import com.kelp.common.constant.KeyConstant; +import com.kelp.common.utils.AESUtil; +import com.kelp.common.utils.IdWorker; +import com.kelp.crm.entity.EAccount; +import com.kelp.website.dao.UAccountDao; +import com.kelp.website.entity.UAccount; +import com.kelp.website.service.UAccountService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangpengfei + * @date 2025/4/28 14:26 + */ +@Service +public class UAccountServiceImpl implements UAccountService { + @Autowired + private UAccountDao uAccountDao; + @Autowired + private IdWorker idWorker; + + @Override + public UAccount getByTelephone(String telephone) { + return uAccountDao.get("telephone", AESUtil.encrypt(telephone, KeyConstant.TELEPHONE)); + } + + @Override + public void add(UAccount uAccount) { + uAccount.setId(idWorker.nextId()); + uAccountDao.add(uAccount); + } + + @Override + public UAccount getById(String id) { + return uAccountDao.get(Long.valueOf(id)); + } + + @Override + public void update(UAccount uAccount) { + uAccountDao.update(uAccount); + } + + @Override + public void delete(String[] ids) { + List ids_ = new ArrayList(); + for(String id : ids){ + try { + ids_.add(Long.valueOf(id)); + } catch (Exception e) { + return; + } + } + uAccountDao.setState(ids_, "10"); + } + + @Override + public Page getPage(int pageNumber, int pageSize, String enterpriseId, String departmentId, String name, String telephone, String roleId, String state) { + return null; + } + + +} diff --git a/ksafepack-system/src/main/java/com/kelp/website/service/impl/UContractServiceImpl.java b/ksafepack-system/src/main/java/com/kelp/website/service/impl/UContractServiceImpl.java new file mode 100644 index 0000000..35b3ef5 --- /dev/null +++ b/ksafepack-system/src/main/java/com/kelp/website/service/impl/UContractServiceImpl.java @@ -0,0 +1,43 @@ +package com.kelp.website.service.impl; + +import com.kelp.base.Page; +import com.kelp.common.utils.IdWorker; +import com.kelp.common.utils.jwt.JwtUtil; +import com.kelp.crm.service.EnterpriseService; +import com.kelp.website.dao.UContractDao; +import com.kelp.website.entity.UContract; +import com.kelp.website.service.UContractService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangpengfei + * @date 2025/4/30 8:47 + */ +@Service +public class UContractServiceImpl implements UContractService { + @Autowired + UContractDao uContractDao; + @Autowired + private IdWorker idWorker; + @Autowired + EnterpriseService enterpriseService; + + + + @Override + public Page getPage(int pageNumber, int pageSize, long id ) { + + Page page = uContractDao.getPage(pageNumber, pageSize,id); + + if(page == null){ + page = new Page(); + } + + return page; + } + +}