From eec5e2227c5c2a1e8eff83fe2c19ee2b20394645 Mon Sep 17 00:00:00 2001 From: Menethil Date: Wed, 8 Aug 2018 03:17:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=A2=E8=B4=AD=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/web/AdminGrouponController.java | 176 +++++++++++ litemall-admin/src/api/groupon.js | 41 +++ litemall-admin/src/router/index.js | 15 + litemall-admin/src/views/groupon/list.vue | 290 ++++++++++++++++++ litemall-admin/src/views/groupon/record.vue | 279 +++++++++++++++++ .../service/LitemallGrouponRulesService.java | 34 ++ .../db/service/LitemallGrouponService.java | 31 ++ .../litemall/wx/service/HomeCacheManager.java | 1 + 8 files changed, 867 insertions(+) create mode 100644 litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGrouponController.java create mode 100644 litemall-admin/src/api/groupon.js create mode 100644 litemall-admin/src/views/groupon/list.vue create mode 100644 litemall-admin/src/views/groupon/record.vue diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGrouponController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGrouponController.java new file mode 100644 index 00000000..20fb0323 --- /dev/null +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGrouponController.java @@ -0,0 +1,176 @@ +package org.linlinjava.litemall.admin.web; + +import org.linlinjava.litemall.admin.annotation.LoginAdmin; +import org.linlinjava.litemall.core.util.JacksonUtil; +import org.linlinjava.litemall.core.util.ResponseUtil; +import org.linlinjava.litemall.core.validator.Order; +import org.linlinjava.litemall.core.validator.Sort; +import org.linlinjava.litemall.db.domain.LitemallGoods; +import org.linlinjava.litemall.db.domain.LitemallGroupon; +import org.linlinjava.litemall.db.domain.LitemallGrouponRules; +import org.linlinjava.litemall.db.service.LitemallGoodsService; +import org.linlinjava.litemall.db.service.LitemallGrouponRulesService; +import org.linlinjava.litemall.db.service.LitemallGrouponService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/admin/groupon") +@Validated +public class AdminGrouponController { + @Autowired + private LitemallGrouponRulesService rulesService; + @Autowired + private LitemallGoodsService goodsService; + @Autowired + private LitemallGrouponService grouponService; + + @GetMapping("/listRecord") + public Object listRecord(@LoginAdmin Integer adminId, + String grouponId, + @RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer limit, + @Sort @RequestParam(defaultValue = "add_time") String sort, + @Order @RequestParam(defaultValue = "desc") String order) { + if (adminId == null) { + return ResponseUtil.unlogin(); + } + + List grouponList = grouponService.querySelective(grouponId, page, limit, sort, order); + int total = grouponService.countSelective(grouponId, page, limit, sort, order); + + List> records = new ArrayList<>(); + for (LitemallGroupon groupon : grouponList) { + Map RecordData = new HashMap<>(); + List subGrouponList = grouponService.queryJoiners(groupon.getId()); + LitemallGrouponRules rules = rulesService.queryById(groupon.getRulesId()); + LitemallGoods goods = goodsService.findById(rules.getGoodsId()); + + RecordData.put("groupon", groupon); + RecordData.put("subGroupons", subGrouponList); + RecordData.put("rules", rules); + RecordData.put("goods", goods); + + records.add(RecordData); + } + + Map data = new HashMap<>(); + data.put("total", total); + data.put("items", records); + + return ResponseUtil.ok(data); + } + + @GetMapping("/list") + public Object list(@LoginAdmin Integer adminId, + String goodsId, + @RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer limit, + @Sort @RequestParam(defaultValue = "add_time") String sort, + @Order @RequestParam(defaultValue = "desc") String order) { + if (adminId == null) { + return ResponseUtil.unlogin(); + } + + List rulesList = rulesService.querySelective(goodsId, page, limit, sort, order); + int total = rulesService.countSelective(goodsId, page, limit, sort, order); + Map data = new HashMap<>(); + data.put("total", total); + data.put("items", rulesList); + + return ResponseUtil.ok(data); + } + + @PostMapping("/update") + public Object update(@LoginAdmin Integer adminId, @RequestBody String grouponRulesBody) { + if (adminId == null) { + return ResponseUtil.unlogin(); + } + + Integer id = JacksonUtil.parseInteger(grouponRulesBody, "id"); + Integer goodsId = JacksonUtil.parseInteger(grouponRulesBody, "goodsId"); + String discount = JacksonUtil.parseString(grouponRulesBody, "discount"); + Integer discountMember = JacksonUtil.parseInteger(grouponRulesBody, "discountMember"); + String expireTimeString = JacksonUtil.parseString(grouponRulesBody, "expireTime"); + + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime expireTime = LocalDateTime.parse(expireTimeString, df); + + LitemallGoods goods = goodsService.findById(goodsId); + if (goods == null) { + return ResponseUtil.badArgumentValue(); + } + + LitemallGrouponRules grouponRules = rulesService.queryById(id); + if (grouponRules == null) { + return ResponseUtil.badArgumentValue(); + } + + grouponRules.setGoodsId(goodsId); + grouponRules.setDiscount(new BigDecimal(discount)); + grouponRules.setDiscountMember(discountMember); + grouponRules.setGoodsName(goods.getName()); + grouponRules.setExpireTime(expireTime); + grouponRules.setPicUrl(goods.getPicUrl()); + + rulesService.update(grouponRules); + + return ResponseUtil.ok(); + } + + + @PostMapping("/create") + public Object create(@LoginAdmin Integer adminId, @RequestBody String grouponRulesBody) { + if (adminId == null) { + return ResponseUtil.unlogin(); + } + + Integer goodsId = JacksonUtil.parseInteger(grouponRulesBody, "goodsId"); + String discount = JacksonUtil.parseString(grouponRulesBody, "discount"); + Integer discountMember = JacksonUtil.parseInteger(grouponRulesBody, "discountMember"); + String expireTimeString = JacksonUtil.parseString(grouponRulesBody, "expireTime"); + + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime expireTime = LocalDateTime.parse(expireTimeString, df); + + LitemallGoods goods = goodsService.findById(goodsId); + if (goods == null) { + return ResponseUtil.badArgumentValue(); + } + + LitemallGrouponRules grouponRules = new LitemallGrouponRules(); + grouponRules.setGoodsId(goodsId); + grouponRules.setDiscount(new BigDecimal(discount)); + grouponRules.setDiscountMember(discountMember); + grouponRules.setAddTime(LocalDateTime.now()); + grouponRules.setGoodsName(goods.getName()); + grouponRules.setExpireTime(expireTime); + grouponRules.setPicUrl(goods.getPicUrl()); + + rulesService.createRules(grouponRules); + + return ResponseUtil.ok(); + } + + + @PostMapping("/delete") + public Object delete(@LoginAdmin Integer adminId, @RequestBody String body) { + if (adminId == null) { + return ResponseUtil.unlogin(); + } + + Integer id = JacksonUtil.parseInteger(body, "id"); + + rulesService.delete(id); + return ResponseUtil.ok(); + } +} diff --git a/litemall-admin/src/api/groupon.js b/litemall-admin/src/api/groupon.js new file mode 100644 index 00000000..ce30366a --- /dev/null +++ b/litemall-admin/src/api/groupon.js @@ -0,0 +1,41 @@ +import request from '@/utils/request' + +export function listRecord(query) { + return request({ + url: '/groupon/listRecord', + method: 'get', + params: query + }) +} + +export function listGroupon(query) { + return request({ + url: '/groupon/list', + method: 'get', + params: query + }) +} + +export function deleteGroupon(data) { + return request({ + url: '/groupon/delete', + method: 'post', + data + }) +} + +export function publishGroupon(data) { + return request({ + url: '/groupon/create', + method: 'post', + data + }) +} + +export function editGroupon(data) { + return request({ + url: '/groupon/update', + method: 'post', + data + }) +} diff --git a/litemall-admin/src/router/index.js b/litemall-admin/src/router/index.js index af5fd599..2cb3f56e 100644 --- a/litemall-admin/src/router/index.js +++ b/litemall-admin/src/router/index.js @@ -105,6 +105,21 @@ export const asyncRouterMap = [ ] }, + { + path: '/groupon', + component: Layout, + redirect: 'noredirect', + name: 'grouponManage', + meta: { + title: '团购管理', + icon: 'chart' + }, + children: [ + { path: 'list', component: _import('groupon/list'), name: 'list', meta: { title: '团购规则', noCache: true }}, + { path: 'record', component: _import('groupon/record'), name: 'record', meta: { title: '团购活动', noCache: true }} + ] + }, + { path: '/promotion', component: Layout, diff --git a/litemall-admin/src/views/groupon/list.vue b/litemall-admin/src/views/groupon/list.vue new file mode 100644 index 00000000..03580304 --- /dev/null +++ b/litemall-admin/src/views/groupon/list.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/litemall-admin/src/views/groupon/record.vue b/litemall-admin/src/views/groupon/record.vue new file mode 100644 index 00000000..82f6d69d --- /dev/null +++ b/litemall-admin/src/views/groupon/record.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java index 875d50ba..72b2f4db 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java @@ -1,5 +1,6 @@ package org.linlinjava.litemall.db.service; +import com.alibaba.druid.util.StringUtils; import com.github.pagehelper.PageHelper; import org.linlinjava.litemall.db.dao.LitemallGrouponRulesMapper; import org.linlinjava.litemall.db.domain.LitemallGrouponRules; @@ -41,4 +42,37 @@ public class LitemallGrouponRulesService { PageHelper.startPage(offset, limit); return mapper.selectByExample(example); } + + public List querySelective(String goodsId, Integer page, Integer size, String sort, String order) { + LitemallGrouponRulesExample example = new LitemallGrouponRulesExample(); + LitemallGrouponRulesExample.Criteria criteria = example.createCriteria(); + + if (!StringUtils.isEmpty(goodsId)) { + criteria.andGoodsIdEqualTo(Integer.parseInt(goodsId)); + } + criteria.andDeletedEqualTo(false); + + PageHelper.startPage(page, size); + return mapper.selectByExample(example); + } + + public int countSelective(String goodsId, Integer page, Integer limit, String sort, String order) { + LitemallGrouponRulesExample example = new LitemallGrouponRulesExample(); + LitemallGrouponRulesExample.Criteria criteria = example.createCriteria(); + + if (!StringUtils.isEmpty(goodsId)) { + criteria.andGoodsIdEqualTo(Integer.parseInt(goodsId)); + } + criteria.andDeletedEqualTo(false); + + return (int) mapper.countByExample(example); + } + + public void delete(Integer id) { + mapper.deleteByPrimaryKey(id); + } + + public void update(LitemallGrouponRules grouponRules) { + mapper.updateByPrimaryKeySelective(grouponRules); + } } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java index 649e74f9..186eaf0c 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java @@ -1,5 +1,7 @@ package org.linlinjava.litemall.db.service; +import com.alibaba.druid.util.StringUtils; +import com.github.pagehelper.PageHelper; import org.linlinjava.litemall.db.dao.LitemallGrouponMapper; import org.linlinjava.litemall.db.domain.LitemallGroupon; import org.linlinjava.litemall.db.domain.LitemallGrouponExample; @@ -99,4 +101,33 @@ public class LitemallGrouponService { public int createGroupon(LitemallGroupon groupon) { return mapper.insertSelective(groupon); } + + public List querySelective(String rulesId, Integer page, Integer size, String sort, String order) { + LitemallGrouponExample example = new LitemallGrouponExample(); + LitemallGrouponExample.Criteria criteria = example.createCriteria(); + + if (!StringUtils.isEmpty(rulesId)) { + criteria.andRulesIdEqualTo(Integer.parseInt(rulesId)); + } + criteria.andDeletedEqualTo(false); + criteria.andPayedEqualTo(true); + criteria.andGrouponIdEqualTo(0); + + PageHelper.startPage(page, size); + return mapper.selectByExample(example); + } + + public int countSelective(String rulesId, Integer page, Integer limit, String sort, String order) { + LitemallGrouponExample example = new LitemallGrouponExample(); + LitemallGrouponExample.Criteria criteria = example.createCriteria(); + + if (!StringUtils.isEmpty(rulesId)) { + criteria.andRulesIdEqualTo(Integer.parseInt(rulesId)); + } + criteria.andDeletedEqualTo(false); + criteria.andPayedEqualTo(true); + criteria.andGrouponIdEqualTo(0); + + return (int) mapper.countByExample(example); + } } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java index 81eaceed..9aede087 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java @@ -14,6 +14,7 @@ public class HomeCacheManager { * @param data */ public static void loadData(Map data) { + data.put("isCache", "true"); cacheData = data; }