|
|
@@ -0,0 +1,263 @@
|
|
|
+package org.jeecg.modules.pos.controller;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.net.URLDecoder;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import org.jeecg.common.api.vo.Result;
|
|
|
+import org.jeecg.common.system.query.QueryGenerator;
|
|
|
+import org.jeecg.common.util.TokenUtils;
|
|
|
+import org.jeecg.common.util.oConvertUtils;
|
|
|
+import org.jeecg.modules.pos.entity.PosOrderGoods;
|
|
|
+import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
|
|
|
+import org.jeecg.modules.pos.service.IPosOrderGoodsDetailService;
|
|
|
+import org.jeecg.modules.pos.service.IPosOrderGoodsService;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+import org.jeecg.modules.rooms.entity.CesGoods;
|
|
|
+import org.jeecg.modules.rooms.service.CesGoodsServiceImpl;
|
|
|
+import org.jeecgframework.poi.excel.ExcelImportUtil;
|
|
|
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
|
|
+import org.jeecgframework.poi.excel.entity.ExportParams;
|
|
|
+import org.jeecgframework.poi.excel.entity.ImportParams;
|
|
|
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
|
|
+import org.jeecg.common.system.base.controller.JeecgController;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
|
+import org.springframework.web.servlet.ModelAndView;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import org.jeecg.common.aspect.annotation.AutoLog;
|
|
|
+import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description: pos_order_goods
|
|
|
+ * @Author: jeecg-boot
|
|
|
+ * @Date: 2023-04-13
|
|
|
+ * @Version: V1.0
|
|
|
+ */
|
|
|
+@Api(tags="pos_order_goods")
|
|
|
+@RestController
|
|
|
+@RequestMapping("/pos/posOrderGoods")
|
|
|
+@Slf4j
|
|
|
+public class PosOrderGoodsController extends JeecgController<PosOrderGoods, IPosOrderGoodsService> {
|
|
|
+ @Autowired
|
|
|
+ private IPosOrderGoodsService posOrderGoodsService;
|
|
|
+@Autowired
|
|
|
+private IPosOrderGoodsDetailService posOrderGoodsDetailService;
|
|
|
+@Autowired
|
|
|
+private CesGoodsServiceImpl cesGoodsService;
|
|
|
+ /**
|
|
|
+ * 分页列表查询
|
|
|
+ *
|
|
|
+ * @param posOrderGoods
|
|
|
+ * @param pageNo
|
|
|
+ * @param pageSize
|
|
|
+ * @param req
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ //@AutoLog(value = "pos_order_goods-分页列表查询")
|
|
|
+ @ApiOperation(value="pos_order_goods-分页列表查询", notes="pos_order_goods-分页列表查询")
|
|
|
+ @GetMapping(value = "/list")
|
|
|
+ public Result<IPage<PosOrderGoods>> queryPageList(PosOrderGoods posOrderGoods,
|
|
|
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
|
|
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
|
|
+ HttpServletRequest req) {
|
|
|
+ QueryWrapper<PosOrderGoods> queryWrapper = QueryGenerator.initQueryWrapper(posOrderGoods, req.getParameterMap());
|
|
|
+ Page<PosOrderGoods> page = new Page<PosOrderGoods>(pageNo, pageSize);
|
|
|
+ IPage<PosOrderGoods> pageList = posOrderGoodsService.page(page, queryWrapper);
|
|
|
+ return Result.OK(pageList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成16位数字+prefix
|
|
|
+ * @param prefix
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String randomNumber(String prefix) {
|
|
|
+ int first = new Random(10).nextInt(8) + 1;
|
|
|
+ int hashCode = UUID.randomUUID().toString().hashCode();
|
|
|
+ if (hashCode < 0) {
|
|
|
+ hashCode = -hashCode;
|
|
|
+ }
|
|
|
+ return prefix + first + String.format("%015d", hashCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加
|
|
|
+ *
|
|
|
+ * @param posOrderGoods
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @AutoLog(value = "pos_order_goods-添加")
|
|
|
+ @ApiOperation(value="pos_order_goods-添加", notes="pos_order_goods-添加")
|
|
|
+ //@RequiresPermissions("pos:pos_order_goods:add")
|
|
|
+ @PostMapping(value = "/add")
|
|
|
+ public Result<String> add(@RequestBody PosOrderGoods posOrderGoods) {
|
|
|
+ if (ObjectUtils.isEmpty(posOrderGoods.getPosOrderGoodsDetailList())) {
|
|
|
+ return Result.error("请先选择商品");
|
|
|
+ }
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.now().withNano(0).withSecond(0).withMinute(0).withHour(0);
|
|
|
+ LocalDateTime[] arr = new LocalDateTime[]{localDateTime, localDateTime.withHour(23).withMinute(59)};
|
|
|
+ LambdaQueryWrapper<PosOrderGoods> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(PosOrderGoods::getHotelId, posOrderGoods.getHotelId());
|
|
|
+ lambdaQueryWrapper.ge(PosOrderGoods::getCreateTime, arr[0]);
|
|
|
+ lambdaQueryWrapper.le(PosOrderGoods::getCreateTime, arr[1]);
|
|
|
+ lambdaQueryWrapper.isNull(PosOrderGoods::getPosTableId);
|
|
|
+ Page<PosOrderGoods> page = new Page<PosOrderGoods>(1, 1);
|
|
|
+ IPage<PosOrderGoods> pageList = posOrderGoodsService.page(page, lambdaQueryWrapper);
|
|
|
+ if (ObjectUtils.isNotEmpty(pageList.getRecords())) {
|
|
|
+ String no = pageList.getRecords().get(0).getTableNo();
|
|
|
+ try {
|
|
|
+ Integer newNo = Integer.parseInt(no) + 1;
|
|
|
+ posOrderGoods.setTableNo(String.format("%03d", newNo));
|
|
|
+ } catch (NumberFormatException ex) {
|
|
|
+ posOrderGoods.setTableNo("001");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ posOrderGoods.setTableNo("001");
|
|
|
+ }
|
|
|
+ posOrderGoods.setTenantId(TokenUtils.currentTenantId());
|
|
|
+ posOrderGoods.setCode(randomNumber("P"));
|
|
|
+
|
|
|
+ BigDecimal amount = BigDecimal.ZERO;
|
|
|
+ for (PosOrderGoodsDetail posOrderGoodsDetail : posOrderGoods.getPosOrderGoodsDetailList()) {
|
|
|
+ amount = amount.add(posOrderGoodsDetail.getMoney().multiply(BigDecimal.valueOf(posOrderGoodsDetail.getNum())));
|
|
|
+ posOrderGoodsDetail.setTenantId(posOrderGoods.getTenantId());
|
|
|
+ posOrderGoodsDetail.setHotelId(posOrderGoods.getHotelId());
|
|
|
+ posOrderGoodsDetail.setOrderId(posOrderGoods.getCode());
|
|
|
+ posOrderGoodsDetail.setCouponMoney(posOrderGoodsDetail.getMoney());
|
|
|
+ posOrderGoodsDetail.setPayMoney(posOrderGoodsDetail.getMoney());
|
|
|
+ posOrderGoodsDetail.setOrderId(posOrderGoods.getCode());
|
|
|
+ }
|
|
|
+ posOrderGoods.setMoney(amount);
|
|
|
+ posOrderGoods.setConsumeMoney(amount);
|
|
|
+ posOrderGoods.setCreateTime(new Date());
|
|
|
+
|
|
|
+ Boolean res = posOrderGoodsService.save(posOrderGoods);
|
|
|
+ if (res) {
|
|
|
+ res = posOrderGoodsDetailService.saveBatch(posOrderGoods.getPosOrderGoodsDetailList());
|
|
|
+ if (res) {
|
|
|
+ //商品减库存
|
|
|
+ for (PosOrderGoodsDetail posOrderGoodsDetail : posOrderGoods.getPosOrderGoodsDetailList()) {
|
|
|
+ CesGoods cesGoods = cesGoodsService.getById(posOrderGoodsDetail.getGoodsId());
|
|
|
+ if (ObjectUtils.isNotEmpty(cesGoods)) {
|
|
|
+ Integer c = cesGoods.getInventory() - posOrderGoodsDetail.getNum();
|
|
|
+ if (c < 0) {
|
|
|
+ c = 0;
|
|
|
+ }
|
|
|
+ cesGoods.setInventory(c);
|
|
|
+ cesGoodsService.updateById(cesGoods);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Result.OK("添加成功", posOrderGoods.getCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编辑
|
|
|
+ *
|
|
|
+ * @param posOrderGoods
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @AutoLog(value = "pos_order_goods-编辑")
|
|
|
+ @ApiOperation(value="pos_order_goods-编辑", notes="pos_order_goods-编辑")
|
|
|
+ //@RequiresPermissions("pos:pos_order_goods:edit")
|
|
|
+ @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
|
|
|
+ public Result<String> edit(@RequestBody PosOrderGoods posOrderGoods) {
|
|
|
+ posOrderGoodsService.updateById(posOrderGoods);
|
|
|
+ return Result.OK("编辑成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过id删除
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @AutoLog(value = "pos_order_goods-通过id删除")
|
|
|
+ @ApiOperation(value="pos_order_goods-通过id删除", notes="pos_order_goods-通过id删除")
|
|
|
+ //@RequiresPermissions("pos:pos_order_goods:delete")
|
|
|
+ @DeleteMapping(value = "/delete")
|
|
|
+ public Result<String> delete(@RequestParam(name="id",required=true) String id) {
|
|
|
+ posOrderGoodsService.removeById(id);
|
|
|
+ return Result.OK("删除成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量删除
|
|
|
+ *
|
|
|
+ * @param ids
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @AutoLog(value = "pos_order_goods-批量删除")
|
|
|
+ @ApiOperation(value="pos_order_goods-批量删除", notes="pos_order_goods-批量删除")
|
|
|
+ //@RequiresPermissions("pos:pos_order_goods:deleteBatch")
|
|
|
+ @DeleteMapping(value = "/deleteBatch")
|
|
|
+ public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
|
|
|
+ this.posOrderGoodsService.removeByIds(Arrays.asList(ids.split(",")));
|
|
|
+ return Result.OK("批量删除成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过id查询
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ //@AutoLog(value = "pos_order_goods-通过id查询")
|
|
|
+ @ApiOperation(value="pos_order_goods-通过id查询", notes="pos_order_goods-通过id查询")
|
|
|
+ @GetMapping(value = "/queryById")
|
|
|
+ public Result<PosOrderGoods> queryById(@RequestParam(name="id",required=true) String id) {
|
|
|
+ PosOrderGoods posOrderGoods = posOrderGoodsService.getById(id);
|
|
|
+ if(posOrderGoods==null) {
|
|
|
+ return Result.error("未找到对应数据");
|
|
|
+ }
|
|
|
+ return Result.OK(posOrderGoods);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导出excel
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param posOrderGoods
|
|
|
+ */
|
|
|
+ //@RequiresPermissions("pos:pos_order_goods:exportXls")
|
|
|
+ @RequestMapping(value = "/exportXls")
|
|
|
+ public ModelAndView exportXls(HttpServletRequest request, PosOrderGoods posOrderGoods) {
|
|
|
+ return super.exportXls(request, posOrderGoods, PosOrderGoods.class, "pos_order_goods");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过excel导入数据
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ //@RequiresPermissions("pos:pos_order_goods:importExcel")
|
|
|
+ @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
|
|
+ public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
|
|
+ return super.importExcel(request, response, PosOrderGoods.class);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|