diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java index 8de0e53f..ff599373 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java @@ -97,8 +97,8 @@ public class AdminGoodsController { try { //将生成的分享图片地址写入数据库 - qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); - goods.setShareUrl(qCodeService.getShareImageUrl(goods.getId().toString())); + String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + goods.setShareUrl(url); // 商品基本信息表litemall_goods goodsService.updateById(goods); @@ -194,8 +194,8 @@ public class AdminGoodsController { goodsService.add(goods); //将生成的分享图片地址写入数据库 - qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); - goods.setShareUrl(qCodeService.getShareImageUrl(goods.getId().toString())); + String url = qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + goods.setShareUrl(url); goodsService.updateById(goods); // 商品规格表litemall_goods_specification 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-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java index d2223003..9b5892fb 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java @@ -2,25 +2,18 @@ package org.linlinjava.litemall.admin.web; import org.linlinjava.litemall.admin.annotation.LoginAdmin; import org.linlinjava.litemall.core.storage.StorageService; -import org.linlinjava.litemall.core.util.CharUtil; 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.LitemallStorage; import org.linlinjava.litemall.db.service.LitemallStorageService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.validation.constraints.NotNull; import java.io.IOException; -import java.io.InputStream; -import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,29 +28,13 @@ public class AdminStorageController { @Autowired private LitemallStorageService litemallStorageService; - private String generateKey(String originalFilename){ - int index = originalFilename.lastIndexOf('.'); - String suffix = originalFilename.substring(index); - - String key = null; - LitemallStorage storageInfo = null; - - do{ - key = CharUtil.getRandomString(20) + suffix; - storageInfo = litemallStorageService.findByKey(key); - } - while(storageInfo != null); - - return key; - } - @GetMapping("/list") public Object list(@LoginAdmin Integer adminId, String key, 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){ + @Order @RequestParam(defaultValue = "desc") String order) { List storageList = litemallStorageService.querySelective(key, name, page, limit, sort, order); int total = litemallStorageService.countSelective(key, name, page, limit, sort, order); Map data = new HashMap<>(); @@ -69,40 +46,21 @@ public class AdminStorageController { @PostMapping("/create") public Object create(@LoginAdmin Integer adminId, @RequestParam("file") MultipartFile file) throws IOException { - if(adminId == null){ + if (adminId == null) { return ResponseUtil.unlogin(); } String originalFilename = file.getOriginalFilename(); - InputStream inputStream = null; - try { - inputStream = file.getInputStream(); - } catch (IOException e) { - e.printStackTrace(); - return ResponseUtil.badArgumentValue(); - } - String key = generateKey(originalFilename); - storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), key); - - String url = storageService.generateUrl(key); - LitemallStorage storageInfo = new LitemallStorage(); - storageInfo.setName(originalFilename); - storageInfo.setSize((int)file.getSize()); - storageInfo.setType(file.getContentType()); - storageInfo.setAddTime(LocalDateTime.now()); - storageInfo.setModified(LocalDateTime.now()); - storageInfo.setKey(key); - storageInfo.setUrl(url); - litemallStorageService.add(storageInfo); - return ResponseUtil.ok(storageInfo); + storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), originalFilename); + return ResponseUtil.ok(); } @PostMapping("/read") public Object read(@LoginAdmin Integer adminId, @NotNull Integer id) { - if(adminId == null){ + if (adminId == null) { return ResponseUtil.unlogin(); } LitemallStorage storageInfo = litemallStorageService.findById(id); - if(storageInfo == null){ + if (storageInfo == null) { return ResponseUtil.badArgumentValue(); } return ResponseUtil.ok(storageInfo); @@ -110,7 +68,7 @@ public class AdminStorageController { @PostMapping("/update") public Object update(@LoginAdmin Integer adminId, @RequestBody LitemallStorage litemallStorage) { - if(adminId == null){ + if (adminId == null) { return ResponseUtil.unlogin(); } litemallStorageService.update(litemallStorage); @@ -119,7 +77,7 @@ public class AdminStorageController { @PostMapping("/delete") public Object delete(@LoginAdmin Integer adminId, @RequestBody LitemallStorage litemallStorage) { - if(adminId == null){ + if (adminId == null) { return ResponseUtil.unlogin(); } litemallStorageService.deleteByKey(litemallStorage.getKey()); diff --git a/litemall-admin/config/dep.env.js b/litemall-admin/config/dep.env.js index de07c71a..5a9b6b74 100644 --- a/litemall-admin/config/dep.env.js +++ b/litemall-admin/config/dep.env.js @@ -1,5 +1,5 @@ module.exports = { NODE_ENV: '"production"', ENV_CONFIG: '"dep"', - BASE_API: '"http://localhost:8080/admin"' + BASE_API: '"https://www.menethil.com.cn/admin"' } 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/goods/list.vue b/litemall-admin/src/views/goods/list.vue index 39b01191..db751cbe 100644 --- a/litemall-admin/src/views/goods/list.vue +++ b/litemall-admin/src/views/goods/list.vue @@ -23,7 +23,7 @@ {{ props.row.brief }} - + {{ props.row.unit }} @@ -32,14 +32,14 @@ {{ props.row.categoryId }} - + {{ props.row.brandId }} - + - + @@ -52,6 +52,12 @@ + + + +