项目介绍
本项目为小程序商城系统前后台,前台为普通会员用户登录,后台为管理员登录;
程序功能:
1.小程序前台:用户注册登录、首页、轮播图、新品推荐、分类、购物车、我的订单。
2.网站后台:管理员登录、用户管理、商品类别管理、商品管理、订单管理、公告管理;
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目: 否;
技术栈
1. 后端:spring+struts+hibernate
2. 前端:JSP+css+javascript+jquery
使用说明
后台运行:
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中config/jdbc.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入http://localhost:8080/shop
管理员:admin/111111
前台小程序运行:
1.使用微信开发者工具导入项目;
2.导入成功后编译运行;
3.运行成功后登录账号;
普通用户:ceshi/111111
商品管理控制层:
@RestController
@RequestMapping("/admin/goods")
@Validated
public class AdminGoodsController {
private static final Logger logger = LoggerFactory.getLogger(AdminGoodsController.class);
@Autowired
private AdminGoodsService adminGoodsService;
/**
* 查询商品
*
* @param goodsSn
* @param name
* @param page
* @param limit
* @param sort
* @param order
* @return
*/
@RequiresPermissions("admin:goods:list")
@RequiresPermissionsDesc(menu = { "商品管理", "商品管理" }, button = "查询")
@GetMapping("/list")
public Object list(String goodsSn, 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("【请求开始】商品管理->商品管理->查询,请求参数:goodsSn:{},name:{},page:{}", goodsSn, name, page);
return adminGoodsService.list(goodsSn, name, page, limit, sort, order);
}
@GetMapping("/catAndBrand")
public Object list2() {
return adminGoodsService.list2();
}
/**
* 编辑商品
*
* @param goodsAllinone
* @return
*/
@RequiresPermissions("admin:goods:update")
@RequiresPermissionsDesc(menu = { "商品管理", "商品管理" }, button = "编辑")
@PostMapping("/update")
public Object update(@RequestBody GoodsAllinone goodsAllinone) {
logger.info("【请求开始】商品管理->商品管理->编辑,请求参数:{}", JSONObject.toJSONString(goodsAllinone));
return adminGoodsService.update(goodsAllinone);
}
/**
* 删除商品
*
* @param goods
* @return
*/
@RequiresPermissions("admin:goods:delete")
@RequiresPermissionsDesc(menu = { "商品管理", "商品管理" }, button = "删除")
@PostMapping("/delete")
public Object delete(@RequestBody DtsGoods goods) {
logger.info("【请求开始】商品管理->商品管理->删除,请求参数:{}", JSONObject.toJSONString(goods));
return adminGoodsService.delete(goods);
}
/**
* 添加商品
*
* @param goodsAllinone
* @return
*/
@RequiresPermissions("admin:goods:create")
@RequiresPermissionsDesc(menu = { "商品管理", "商品管理" }, button = "上架")
@PostMapping("/create")
public Object create(@RequestBody GoodsAllinone goodsAllinone) {
logger.info("【请求开始】商品管理->商品管理->上架,请求参数:{}", JSONObject.toJSONString(goodsAllinone));
return adminGoodsService.create(goodsAllinone);
}
/**
* 商品详情
*
* @param id
* @return
*/
@RequiresPermissions("admin:goods:read")
@RequiresPermissionsDesc(menu = { "商品管理", "商品管理" }, button = "详情")
@GetMapping("/detail")
public Object detail(@NotNull Integer id) {
logger.info("【请求开始】商品管理->商品管理->详情,请求参数,id:{}", id);
return adminGoodsService.detail(id);
}
}
订单管理控制层:
@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);
}
}
用户管理控制层:
@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();
}
}