源码获取:博客首页 "资源" 里下载!

一、项目简述

本系统功能包括: 商品模块: 商品添加、规格设置,商品上下架等 订单模块: 下单、购物车、支付,发货、收货、评 退款等 营销模块: 积分、优惠券、分销、砍价、拼团、秒 多门店等 微信模块: 自定义菜单、自动回复、微信授权、图文 管理、模板消息推送 五:配置模块:各种配置 六:用户模块:登陆、注册、会员卡、充值等 七:其他等

二、项目运行

环境配置: 1.1 springframework4.3.7.RELEASE 1.2 mybatis3.1.0s MyBatis-Plus 3.1.0 1.3 shirol.3.2 1.4 servlet3.1.0 1.5 druid1.0.28 1.6 slf4j1.7.19 1.7 fastjson1.2.30 1.8 poi3.15 1.9 velocityl .7 1.10 quartz2.2.3 1.11 mysql5.1.39 1.12 swagger2.4 1.13 j2cache2.3.22-release 1.14 weixin-java-mp3.2.0 1.15 MybatisPlus3.1.0 1.16 lombok等等

项目技术

2.1 Vue2.5.1

2.2 iview

2.3 layer3.0.3

2.4 jquery2.2.4

2.5 bootstraps.3.7等等。

管理员角色控制层:

@RestController
@RequestMapping("/admin/role")
@Validated
public class AdminRoleController {private static final Logger logger = LoggerFactory.getLogger(AdminRoleController.class);@Autowiredprivate DtsRoleService roleService;@Autowiredprivate DtsPermissionService permissionService;@RequiresPermissions("admin:role:list")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色查询")@GetMapping("/list")public Object list(String name, @RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer limit,@Sort @RequestParam(defaultValue = "add_time") String sort,@Order @RequestParam(defaultValue = "desc") String order) {logger.info("【请求开始】系统管理->角色管理->角色查询,请求参数,name:{},page:{}", name, page);List<DtsRole> roleList = roleService.querySelective(name, page, limit, sort, order);long total = PageInfo.of(roleList).getTotal();Map<String, Object> data = new HashMap<>();data.put("total", total);data.put("items", roleList);logger.info("【请求结束】系统管理->角色管理->角色查询,响应结果:{}", JSONObject.toJSONString(data));return ResponseUtil.ok(data);}@GetMapping("/options")public Object options() {List<DtsRole> roleList = roleService.queryAll();logger.info("【请求开始】系统管理->角色管理->查询所有角色");List<Map<String, Object>> options = new ArrayList<>(roleList.size());for (DtsRole role : roleList) {Map<String, Object> option = new HashMap<>(2);option.put("value", role.getId());option.put("label", role.getName());options.add(option);}logger.info("【请求结束】系统管理->角色管理->查询所有角色,响应结果:{}", JSONObject.toJSONString(options));return ResponseUtil.ok(options);}@RequiresPermissions("admin:role:read")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色详情")@GetMapping("/read")public Object read(@NotNull Integer id) {logger.info("【请求开始】系统管理->角色管理->角色详情,请求参数,id:{}", id);DtsRole role = roleService.findById(id);logger.info("【请求结束】系统管理->角色管理->角色详情,响应结果:{}", JSONObject.toJSONString(role));return ResponseUtil.ok(role);}private Object validate(DtsRole role) {String name = role.getName();if (StringUtils.isEmpty(name)) {return ResponseUtil.badArgument();}return null;}@RequiresPermissions("admin:role:create")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色添加")@PostMapping("/create")public Object create(@RequestBody DtsRole role) {logger.info("【请求开始】系统管理->角色管理->角色添加,请求参数:{}", JSONObject.toJSONString(role));Object error = validate(role);if (error != null) {return error;}if (roleService.checkExist(role.getName())) {logger.info("系统管理->角色管理->角色添加错误:{}", ROLE_NAME_EXIST.desc());return AdminResponseUtil.fail(ROLE_NAME_EXIST);}roleService.add(role);logger.info("【请求结束】系统管理->角色管理->角色添加,响应结果:{}", JSONObject.toJSONString(role));return ResponseUtil.ok(role);}@RequiresPermissions("admin:role:update")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色编辑")@PostMapping("/update")public Object update(@RequestBody DtsRole role) {logger.info("【请求开始】系统管理->角色管理->角色编辑,请求参数:{}", JSONObject.toJSONString(role));Object error = validate(role);if (error != null) {return error;}roleService.updateById(role);logger.info("【请求结束】系统管理->角色管理->角色编辑,响应结果:{}", "成功!");return ResponseUtil.ok();}@RequiresPermissions("admin:role:delete")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色删除")@PostMapping("/delete")public Object delete(@RequestBody DtsRole role) {logger.info("【请求开始】系统管理->角色管理->角色删除,请求参数,id:{}", JSONObject.toJSONString(role));Integer id = role.getId();if (id == null) {return ResponseUtil.badArgument();}roleService.deleteById(id);logger.info("【请求结束】系统管理->角色管理->角色删除,响应结果:{}", "成功!");return ResponseUtil.ok();}@Autowiredprivate ApplicationContext context;private List<PermVo> systemPermissions = null;private Set<String> systemPermissionsString = null;private List<PermVo> getSystemPermissions() {final String basicPackage = "com.qiguliuxing.dts.admin";if (systemPermissions == null) {List<Permission> permissions = PermissionUtil.listPermission(context, basicPackage);systemPermissions = PermissionUtil.listPermVo(permissions);systemPermissionsString = PermissionUtil.listPermissionString(permissions);}return systemPermissions;}private Set<String> getAssignedPermissions(Integer roleId) {// 这里需要注意的是,如果存在超级权限*,那么这里需要转化成当前所有系统权限。// 之所以这么做,是因为前端不能识别超级权限,所以这里需要转换一下。Set<String> assignedPermissions = null;if (permissionService.checkSuperPermission(roleId)) {getSystemPermissions();assignedPermissions = systemPermissionsString;} else {assignedPermissions = permissionService.queryByRoleId(roleId);}return assignedPermissions;}/*** 管理员的权限情况** @return 系统所有权限列表和管理员已分配权限*/@RequiresPermissions("admin:role:permission:get")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "权限详情")@GetMapping("/permissions")public Object getPermissions(Integer roleId) {logger.info("【请求开始】系统管理->角色管理->权限详情,请求参数,roleId:{}", roleId);List<PermVo> systemPermissions = getSystemPermissions();Set<String> assignedPermissions = getAssignedPermissions(roleId);Map<String, Object> data = new HashMap<>();data.put("systemPermissions", systemPermissions);data.put("assignedPermissions", assignedPermissions);logger.info("【请求结束】系统管理->角色管理->权限详情,响应结果:{}", JSONObject.toJSONString(data));return ResponseUtil.ok(data);}/*** 更新管理员的权限** @param body* @return*/@RequiresPermissions("admin:role:permission:update")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "权限变更")@PostMapping("/permissions")public Object updatePermissions(@RequestBody String body) {logger.info("【请求开始】系统管理->角色管理->权限变更,请求参数,body:{}", body);Integer roleId = JacksonUtil.parseInteger(body, "roleId");List<String> permissions = JacksonUtil.parseStringList(body, "permissions");if (roleId == null || permissions == null) {return ResponseUtil.badArgument();}// 如果修改的角色是超级权限,则拒绝修改。if (permissionService.checkSuperPermission(roleId)) {logger.error("系统管理->角色管理->权限变更 错误:{}", AdminResponseCode.ROLE_SUPER_SUPERMISSION.desc());return AdminResponseUtil.fail(AdminResponseCode.ROLE_SUPER_SUPERMISSION);}// 先删除旧的权限,再更新新的权限permissionService.deleteByRoleId(roleId);for (String permission : permissions) {DtsPermission DtsPermission = new DtsPermission();DtsPermission.setRoleId(roleId);DtsPermission.setPermission(permission);permissionService.add(DtsPermission);}logger.info("【请求结束】系统管理->角色管理->权限变更,响应结果:{}", "成功!");return ResponseUtil.ok();}}

管理员用户控制层:

@RestController
@RequestMapping("/admin/user")
@Validated
public class AdminUserController {private static final Logger logger = LoggerFactory.getLogger(AdminUserController.class);@Autowiredprivate DtsUserService userService;@Autowiredprivate QCodeService qCodeService;@RequiresPermissions("admin:user:list")@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "查询")@GetMapping("/list")public Object list(String username, String mobile, @RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer limit,@Sort @RequestParam(defaultValue = "add_time") String sort,@Order @RequestParam(defaultValue = "desc") String order) {logger.info("【请求开始】用户管理->会员管理->查询,请求参数,username:{},code:{},page:{}", username, mobile, page);List<DtsUser> userList = userService.querySelective(username, mobile, page, limit, sort, order);long total = PageInfo.of(userList).getTotal();Map<String, Object> data = new HashMap<>();data.put("total", total);data.put("items", userList);logger.info("【请求结束】用户管理->会员管理->查询:响应结果:{}", JSONObject.toJSONString(data));return ResponseUtil.ok(data);}/*** 订单详情** @param id* @return*/@RequiresPermissions("admin:user:read")@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "代理详情")@GetMapping("/detailApprove")public Object detailApprove(@NotNull Integer id) {logger.info("【请求开始】用户管理->会员管理->代理详情,请求参数:id:{}", id);DtsUserAccount dbAccount = userService.detailApproveByUserId(id);if (dbAccount == null) {logger.error("用户管理->会员管理->代理详情 错误:userID:{},{}",id,"代理账号信息不存在");ResponseUtil.badArgumentValue();}logger.info("【请求结束】用户管理->会员管理->代理详情:响应结果:{}", JSONObject.toJSONString(dbAccount));return ResponseUtil.ok(dbAccount);}@RequiresPermissions("admin:user:approveAgency")@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "代理审批")@PostMapping("/approveAgency")public Object approveAgency(@RequestBody String body) {logger.info("【请求开始】用户管理->会员管理->代理审批,请求参数:{}",body);Integer userId = JacksonUtil.parseInteger(body, "userId");Integer settlementRate = JacksonUtil.parseInteger(body, "settlementRate");if (userId == null || settlementRate == null || settlementRate.intValue() <= 0 ){return ResponseUtil.badArgument();}try {/** 生成代理用户独有分享的二维码需要小程序已经上线,所以未上线小程序这里调用会异常* 建议通过后台参数控制,因为定制用户对这里的特殊性要求,本程序暂不做调整*/String shareUrl = qCodeService.createShareUserImage(userId);userService.approveAgency(userId,settlementRate,shareUrl);}catch (Exception e) {logger.error("用户管理->会员管理->代理审批 出错:{}",e.getMessage());e.printStackTrace();}logger.info("【请求结束】用户管理->会员管理->代理审批:响应结果:{}", "成功!");return ResponseUtil.ok();}}

管理员订单管理层:

@RestController
@RequestMapping("/admin/order")
@Validated
public class AdminOrderController {private static final Logger logger = LoggerFactory.getLogger(AdminOrderController.class);@Autowiredprivate AdminOrderService adminOrderService;/*** 查询订单** @param userId* @param orderSn* @param orderStatusArray* @param page* @param limit* @param sort* @param order* @return*/@RequiresPermissions("admin:order:list")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "查询")@GetMapping("/list")public Object list(Integer userId, String orderSn, @RequestParam(required = false) List<Short> orderStatusArray,@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit,@Sort @RequestParam(defaultValue = "add_time") String sort,@Order @RequestParam(defaultValue = "desc") String order) {logger.info("【请求开始】商场管理->订单管理->查询,请求参数:userId:{},orderSn:{},page:{}", userId, orderSn, page);return adminOrderService.list(userId, orderSn, orderStatusArray, page, limit, sort, order);}/*** 订单详情** @param id* @return*/@RequiresPermissions("admin:order:read")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "详情")@GetMapping("/detail")public Object detail(@NotNull Integer id) {logger.info("【请求开始】商场管理->订单管理->详情,请求参数:id:{}", id);return adminOrderService.detail(id);}/*** 订单退款** @param body 订单信息,{ orderId:xxx }* @return 订单退款操作结果*/@RequiresPermissions("admin:order:refund")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "订单退款")@PostMapping("/refund")public Object refund(@RequestBody String body) {logger.info("【请求开始】商场管理->订单管理->订单退款,请求参数,body:{}", body);return adminOrderService.refund(body);}/*** 发货** @param body 订单信息,{ orderId:xxx, shipSn: xxx, shipChannel: xxx }* @return 订单操作结果*/@RequiresPermissions("admin:order:ship")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "订单发货")@PostMapping("/ship")public Object ship(@RequestBody String body) {logger.info("【请求开始】商场管理->订单管理->订单发货,请求参数,body:{}", body);return adminOrderService.ship(body);}/*** 回复订单商品** @param body 订单信息,{ orderId:xxx }* @return 订单操作结果*/@RequiresPermissions("admin:order:reply")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "订单商品回复")@PostMapping("/reply")public Object reply(@RequestBody String body) {logger.info("【请求开始】商场管理->订单管理->订单商品回复,请求参数,body:{}", body);return adminOrderService.reply(body);}}

源码获取:博客首页 "资源" 里下载!

Java项目:(小程序)全套商城系统(spring+spring mvc+mybatis+layui+微信小程)相关推荐

  1. Java项目:(小程序)前台+后台相结合水果商城系统(spring+spring mvc+mybatis+layui+微信小程)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 水果商城系统前台展示,分类后买,下单,支付,发货, 地址等等,后台商品上传,用户管理,订单管理,地址管理等等 ...

  2. Java项目:(小程序)前台+后台相结合在线点餐系统(spring+spring mvc+mybatis+layui+微信小程)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 1 .微信小程序扫码点单 2 .微信小程序外卖点单 3 .后台可对微信小程序主页进行自定义(如颜色.布局. ...

  3. Java项目:(小程序)幼儿园报名系统(java+weixin-java-mp+spring+spring mvc+mybatis+layui+微信小程序)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 1 .登记管理 2 .基础管理 3 .公示公告 4 .首页展示 二.项目运行 环境配置: jdk8+tomc ...

  4. Java项目:(小程序)物业管理系统(spring+spring mvc+mybatis+layui+微信小程)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 微信小程序物业管理系统,微信朝胞括以下几个模 块: 社区公告.报修.信息采集.生活缴费.二手置换 微信小程序 ...

  5. 微信小程序购物商城系统开发系列-工具篇

    微信小程序购物商城系统开发系列-工具篇 微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操 ...

  6. 微信小程序分析送积分功能如何实现_微信小程序积分商城系统如何裂变营销购物?...

    小程序积分商城系统通过以积分的形式,通过购物返积分,签到领积分等各种方式,让消费者对品牌和产品形成一定认知和信赖,从而提高消费者的购物积极性,提高产品的复购率,通过微信访问.传播.交易一体化的裂变营销 ...

  7. 积分商城小程序一般用多大服务器,微信小程序积分商城系统运营需要注意哪些细节...

    积分商城系统是广大商家营销首选工具,积分营销对于实体店来说,不仅仅是打通线上线下流量,还能帮助商家通过积分营销活动低成本拉新获客.促活留存.微信小程序积分商城系统在运营过程中需要注意哪些细节呢? 一. ...

  8. 小程序分销商城系统八大功能都有哪些?一起来了解吧

    首先小程序分销商城系统我们在开发过程中大致开发的功能模块一共有8大模块,分别是:商品模块,店铺装修模块,会员模块,订单模块,营销模块,统计模块,应用模块,设置模块. 商品模块: 实物商品:已经审核通过 ...

  9. 仿微信导航网站源码 小程序商店商城系统 PHPCMS

    介绍: 本小程序商店可直接扫码进入. 小程序可以通过扫描二维码 二维码或是搜一搜,就能立即使用. 可以进行关联,并相互跳转. 通过公众号查看并进入所绑定的小程序一个公众号可以绑五个小程序. 小程序&q ...

最新文章

  1. 用c语言实现去bmp图片的背景,菲律宾博牛网-官方网站
  2. python中使用函数编程的意义_总结Python编程中函数的使用要点
  3. 号码锁 Combination Lock
  4. 病毒行为分析初探(三)
  5. sqlsession.selectlist 会返回null么_StackOverflow经典问题:代码中如何去掉烦人的“!=nullquot;判空语句...
  6. linux cpu负载巡检,linux服务器巡检报告.doc
  7. c语言错误重定义,C语言的重定义错误求解
  8. 为什么Docker对初创企业有意义
  9. 二、Merge sort
  10. 服务器训练数据 关闭终端,一文明白使用nohup将服务器训练程序后台运行不关闭+随时通过查看训练情况输出与visdom可视化...
  11. (软件工程复习核心重点)第六章实现和测试-第八节:调试
  12. java程序经过编译后会产生byte code_Java 虚拟机(JVM)内存模型
  13. Java中Spring中的方法加上try catch后事务管理器失效无法回滚的情况
  14. 数据库软件dbForge Studio for MySQL更新至v.6.1
  15. 统计系统中所有进程占用内存的方法
  16. Python单元测试框架之pytest -- fixtures
  17. CANoe软件使用(一)——软件界面介绍
  18. android 生成bks_android双向认证(自签名证书) bks的生成方法
  19. 利用 Pyecharts 制作饼图
  20. 计算机论文的字体要求,关于计算机硕士论文格式要求 论文字体格式

热门文章

  1. 360浏览器如何设置为像chrome谷歌浏览器那样输入网址回车在当前页面,而不是新建一个标签打开
  2. C++中stl使用过程中的一些tips
  3. C# http 性能优化500毫秒到 60 毫秒
  4. BZOJ2275[Coci2010]HRPA——斐波那契博弈
  5. 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化
  6. 367. Valid Perfect Square
  7. (转)二叉树系列面试问题
  8. 【VS开发】【智能语音处理】Windows下麦克风语音采集
  9. TOJ--3456--数学题
  10. UVA 216 Getting in Line