源码获取:博客首页 "资源" 里下载!
一、项目简述
本系统功能包括: 商品模块: 商品添加、规格设置,商品上下架等 订单模块: 下单、购物车、支付,发货、收货、评 退款等 营销模块: 积分、优惠券、分销、砍价、拼团、秒 多门店等 微信模块: 自定义菜单、自动回复、微信授权、图文 管理、模板消息推送 五:配置模块:各种配置 六:用户模块:登陆、注册、会员卡、充值等 七:其他等
二、项目运行
环境配置: 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);
@Autowired
private DtsRoleService roleService;
@Autowired
private 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();
}
@Autowired
private 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);
@Autowired
private DtsUserService userService;
@Autowired
private 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);
@Autowired
private 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);
}
}
源码获取:博客首页 "资源" 里下载!