package com.sinata.modular.mall.controller;
|
|
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.sinata.common.enums.EnumIsDelete;
|
import com.sinata.common.enums.mall.EnumMallGoodsGroupType;
|
import com.sinata.common.enums.mall.EnumMallGoodsState;
|
import com.sinata.common.model.GroupSpecGoodsSkuJsonVo;
|
import com.sinata.core.base.controller.BaseController;
|
import com.sinata.core.base.tips.ErrorTip;
|
import com.sinata.core.common.annotion.BussinessLog;
|
import com.sinata.core.common.annotion.Permission;
|
import com.sinata.core.common.constant.factory.PageFactory;
|
import com.sinata.core.log.LogObjectHolder;
|
import com.sinata.modular.mall.model.MallClassifyOne;
|
import com.sinata.modular.mall.model.MallGoods;
|
import com.sinata.modular.mall.model.MallGroupSpec;
|
import com.sinata.modular.mall.service.IMallClassifyOneService;
|
import com.sinata.modular.mall.service.IMallGoodsService;
|
import com.sinata.modular.mall.service.IMallGroupSpecService;
|
import com.sinata.modular.system.model.AreaCity;
|
import com.sinata.modular.system.service.IAreaCityService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.Model;
|
import org.springframework.util.StringUtils;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* 规格组控制器
|
*
|
* @author Goku
|
*/
|
@Controller
|
@RequestMapping("/mallGroupSpec")
|
public class MallGroupSpecController extends BaseController {
|
|
private String PREFIX = "/mall/mallGroupSpec/";
|
|
@Autowired
|
private IMallClassifyOneService classifyOneService;
|
|
@Autowired
|
private IMallGoodsService mallGoodsService;
|
|
@Autowired
|
private IAreaCityService areaCityService;
|
|
@Autowired
|
private IMallGroupSpecService mallGroupSpecService;
|
|
/**
|
* 跳转到规格组首页
|
*/
|
@RequestMapping("")
|
public String index() {
|
return PREFIX + "mallGroupSpec.html";
|
}
|
|
/**
|
* 跳转到添加规格组
|
*/
|
@RequestMapping("/mallGroupSpec_add")
|
public String mallGroupSpecAdd(Model model) {
|
model.addAttribute("classList", this.classifyOneService.selectList(new EntityWrapper<MallClassifyOne>().eq("is_delete", EnumIsDelete.EXISTED.index)));
|
model.addAttribute("goodsByClassList", mallGoodsService.selectList(
|
new EntityWrapper<MallGoods>()
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
.eq("group_type", EnumMallGoodsGroupType.GOODS.index)
|
.in("state", Arrays.asList(
|
EnumMallGoodsState.FOR_SALE.index
|
))
|
));
|
model.addAttribute("cityAreaList", areaCityService.selectList(
|
new EntityWrapper<AreaCity>()
|
.orderBy("id", false)
|
.eq("is_open", 1)
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
.groupBy("province_code")
|
));
|
return PREFIX + "mallGroupSpec_add.html";
|
}
|
|
/**
|
* 跳转到修改规格组
|
*/
|
@RequestMapping("/mallGroupSpec_update/{mallGroupSpecId}")
|
public String mallGroupSpecUpdate(@PathVariable Integer mallGroupSpecId, Model model) {
|
model.addAttribute("classList", this.classifyOneService.selectList(new EntityWrapper<MallClassifyOne>().eq("is_delete", EnumIsDelete.EXISTED.index)));
|
model.addAttribute("goodsByClassList", mallGoodsService.selectList(
|
new EntityWrapper<MallGoods>()
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
.eq("group_type", EnumMallGoodsGroupType.GOODS.index)
|
.in("state", Arrays.asList(
|
EnumMallGoodsState.FOR_SALE.index
|
))
|
));
|
model.addAttribute("cityAreaList", areaCityService.selectList(
|
new EntityWrapper<AreaCity>()
|
.orderBy("id", false)
|
.eq("is_open", 1)
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
.groupBy("province_code")
|
));
|
|
MallGroupSpec mallGroupSpec = mallGroupSpecService.selectById(mallGroupSpecId);
|
model.addAttribute("item", mallGroupSpec);
|
LogObjectHolder.me().set(mallGroupSpec);
|
return PREFIX + "mallGroupSpec_edit.html";
|
}
|
|
/**
|
* 获取规格组列表
|
*/
|
@ResponseBody
|
@RequestMapping(value = "/list")
|
public Object list(String beginTime, String endTime, String condition) {
|
Page<Map<String, Object>> page = new PageFactory().defaultPage();
|
Wrapper wrapper = new EntityWrapper<MallGroupSpec>()
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
.orderBy("id", false);
|
|
// 时间搜索
|
if (!StringUtils.isEmpty(beginTime)) {
|
wrapper.ge("create_time", beginTime + " 00:00:00");
|
}
|
if (!StringUtils.isEmpty(endTime)) {
|
wrapper.le("create_time", endTime + " 23:59:59");
|
}
|
if (!StringUtils.isEmpty(condition)) {
|
wrapper.like("spec_name", condition);
|
}
|
|
// 商品分类
|
List<MallClassifyOne> classifyOneList = classifyOneService.selectList(
|
new EntityWrapper<MallClassifyOne>()
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
);
|
// 商品列表
|
List<MallGoods> goodsList = mallGoodsService.selectList(new EntityWrapper<MallGoods>().setSqlSelect("id, goods_name"));
|
|
// 查询数据列表
|
List<Map<String, Object>> list = mallGroupSpecService.selectMapsPage(page, wrapper).getRecords();
|
list.stream().map(o -> {
|
o.put("classifyName", classifyOneList.stream()
|
.filter(ccc -> ccc.getId().toString().equals(o.get("classifyIdOne") + ""))
|
.map(MallClassifyOne::getClassifyName)
|
.findFirst()
|
.orElse(null)
|
);
|
|
// String[] ids = (o.get("goodsIds") + "").split(",");
|
// o.put("goodsNames", goodsList.stream()
|
// .filter(ggg -> {
|
// for (String gid : ids) {
|
// if (gid.equals(ggg.getId() + "")) {
|
// return true;
|
// }
|
// }
|
// return false;
|
// })
|
// .map(MallGoods::getGoodsName)
|
// .collect(Collectors.joining(",")));
|
|
// 封装显示套餐规格组商品名称、数量
|
List<GroupSpecGoodsSkuJsonVo> groupSpecGoodsSkuJsonVoList;
|
Object goodsSkuJson = o.get("goodsSkuJson");
|
if (ObjUtil.isNotEmpty(goodsSkuJson)) {
|
groupSpecGoodsSkuJsonVoList = JSONUtil.parseArray(goodsSkuJson.toString()).toList(GroupSpecGoodsSkuJsonVo.class);
|
} else {
|
groupSpecGoodsSkuJsonVoList = null;
|
}
|
o.put("goodsNames", goodsList.stream()
|
.filter(ggg -> {
|
if (groupSpecGoodsSkuJsonVoList != null) {
|
for (GroupSpecGoodsSkuJsonVo groupSpecGoodsSkuJsonVo : groupSpecGoodsSkuJsonVoList) {
|
if (groupSpecGoodsSkuJsonVo.getGoodsId().equals(ggg.getId())) {
|
ggg.setStock(groupSpecGoodsSkuJsonVo.getGoodsNum());
|
return true;
|
}
|
}
|
}
|
return false;
|
})
|
.map(ggg -> ggg.getGoodsName() + "x" + ggg.getStock())
|
.collect(Collectors.joining(",")));
|
return o;
|
}).collect(Collectors.toList());
|
|
page.setRecords(list);
|
return super.packForBT(page);
|
}
|
|
/**
|
* 新增规格组
|
*/
|
@Permission
|
@ResponseBody
|
@BussinessLog(value = "新增规格组")
|
@RequestMapping(value = "/add")
|
public Object add(MallGroupSpec mallGroupSpec) {
|
// 判断商品最低库存
|
Object result = minStock(mallGroupSpec.getGoodsIds(), mallGroupSpec.getStock());
|
if (result != null) {
|
return result;
|
}
|
|
mallGroupSpecService.insert(mallGroupSpec);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 删除/批量删除
|
*/
|
@Permission
|
@ResponseBody
|
@BussinessLog(value = "删除/批量删除规格组")
|
@RequestMapping(value = "/delete")
|
public Object delete(@RequestParam String ids) {
|
// 逻辑删除
|
mallGroupSpecService.updateForSet("is_delete = 1", new EntityWrapper<MallGroupSpec>().in("id", ids.split(",")));
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 修改规格组
|
*/
|
@Permission
|
@ResponseBody
|
@BussinessLog(value = "修改规格组")
|
@RequestMapping(value = "/update")
|
public Object update(MallGroupSpec mallGroupSpec) {
|
// 判断商品最低库存
|
Object result = minStock(mallGroupSpec.getGoodsIds(), mallGroupSpec.getStock());
|
if (result != null) {
|
return result;
|
}
|
|
mallGroupSpecService.updateById(mallGroupSpec);
|
return SUCCESS_TIP;
|
}
|
|
public Object minStock(String goodsIds, Integer stock) {
|
Object minStock = mallGoodsService.selectObj(
|
new EntityWrapper<MallGoods>()
|
.setSqlSelect("stock")
|
.orderBy("stock")
|
.in("id", goodsIds.split(","))
|
.last("LIMIT 1")
|
);
|
if (minStock != null && stock > Integer.parseInt(minStock + "")) {
|
return new ErrorTip(500, "规格组库存不能高于商品最小库存!");
|
}
|
return null;
|
}
|
|
/**
|
* 修改规格组状态
|
*/
|
@ResponseBody
|
@BussinessLog(value = "修改规格组状态")
|
@RequestMapping(value = "/updateState")
|
public Object updateState(Integer mallGroupSpecId, Integer state) {
|
mallGroupSpecService.updateForSet("is_lock = " + state, new EntityWrapper<MallGroupSpec>().eq("id", mallGroupSpecId));
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 跳转规格组详情
|
*/
|
@RequestMapping(value = "/detail/{mallGroupSpecId}")
|
public Object detail(@PathVariable("mallGroupSpecId") Integer mallGroupSpecId, Model model) {
|
MallGroupSpec mallGroupSpec = mallGroupSpecService.selectById(mallGroupSpecId);
|
model.addAttribute("item", mallGroupSpec);
|
return PREFIX + "mallGroupSpec_detail.html";
|
}
|
}
|