gqx před 2 roky
rodič
revize
c61696f0a1
16 změnil soubory, kde provedl 822 přidání a 7 odebrání
  1. 263 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosOrderGoodsController.java
  2. 178 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosOrderGoodsDetailController.java
  3. 33 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosSellClearGoodsController.java
  4. 8 6
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosTypeController.java
  5. 112 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/entity/PosOrderGoods.java
  6. 71 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/entity/PosOrderGoodsDetail.java
  7. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsDetailMapper.java
  8. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsMapper.java
  9. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/xml/PosOrderGoodsDetailMapper.xml
  10. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/xml/PosOrderGoodsMapper.xml
  11. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsDetailService.java
  12. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsService.java
  13. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsDetailServiceImpl.java
  14. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsServiceImpl.java
  15. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesStockTypeController.java
  16. 28 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesStockTypeServiceImpl.java

+ 263 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosOrderGoodsController.java

@@ -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);
+    }
+
+}

+ 178 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosOrderGoodsDetailController.java

@@ -0,0 +1,178 @@
+package org.jeecg.modules.pos.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+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 org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
+import org.jeecg.modules.pos.service.IPosOrderGoodsDetailService;
+
+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.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_detail
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+@Api(tags="pos_order_goods_detail")
+@RestController
+@RequestMapping("/pos/posOrderGoodsDetail")
+@Slf4j
+public class PosOrderGoodsDetailController extends JeecgController<PosOrderGoodsDetail, IPosOrderGoodsDetailService> {
+	@Autowired
+	private IPosOrderGoodsDetailService posOrderGoodsDetailService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param posOrderGoodsDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "pos_order_goods_detail-分页列表查询")
+	@ApiOperation(value="pos_order_goods_detail-分页列表查询", notes="pos_order_goods_detail-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<PosOrderGoodsDetail>> queryPageList(PosOrderGoodsDetail posOrderGoodsDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<PosOrderGoodsDetail> queryWrapper = QueryGenerator.initQueryWrapper(posOrderGoodsDetail, req.getParameterMap());
+		Page<PosOrderGoodsDetail> page = new Page<PosOrderGoodsDetail>(pageNo, pageSize);
+		IPage<PosOrderGoodsDetail> pageList = posOrderGoodsDetailService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param posOrderGoodsDetail
+	 * @return
+	 */
+	@AutoLog(value = "pos_order_goods_detail-添加")
+	@ApiOperation(value="pos_order_goods_detail-添加", notes="pos_order_goods_detail-添加")
+	//@RequiresPermissions("pos:pos_order_goods_detail:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody PosOrderGoodsDetail posOrderGoodsDetail) {
+		posOrderGoodsDetailService.save(posOrderGoodsDetail);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param posOrderGoodsDetail
+	 * @return
+	 */
+	@AutoLog(value = "pos_order_goods_detail-编辑")
+	@ApiOperation(value="pos_order_goods_detail-编辑", notes="pos_order_goods_detail-编辑")
+	//@RequiresPermissions("pos:pos_order_goods_detail:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody PosOrderGoodsDetail posOrderGoodsDetail) {
+		posOrderGoodsDetailService.updateById(posOrderGoodsDetail);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "pos_order_goods_detail-通过id删除")
+	@ApiOperation(value="pos_order_goods_detail-通过id删除", notes="pos_order_goods_detail-通过id删除")
+	//@RequiresPermissions("pos:pos_order_goods_detail:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		posOrderGoodsDetailService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "pos_order_goods_detail-批量删除")
+	@ApiOperation(value="pos_order_goods_detail-批量删除", notes="pos_order_goods_detail-批量删除")
+	//@RequiresPermissions("pos:pos_order_goods_detail:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.posOrderGoodsDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "pos_order_goods_detail-通过id查询")
+	@ApiOperation(value="pos_order_goods_detail-通过id查询", notes="pos_order_goods_detail-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<PosOrderGoodsDetail> queryById(@RequestParam(name="id",required=true) String id) {
+		PosOrderGoodsDetail posOrderGoodsDetail = posOrderGoodsDetailService.getById(id);
+		if(posOrderGoodsDetail==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(posOrderGoodsDetail);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param posOrderGoodsDetail
+    */
+    //@RequiresPermissions("pos:pos_order_goods_detail:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, PosOrderGoodsDetail posOrderGoodsDetail) {
+        return super.exportXls(request, posOrderGoodsDetail, PosOrderGoodsDetail.class, "pos_order_goods_detail");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("pos:pos_order_goods_detail:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, PosOrderGoodsDetail.class);
+    }
+
+}

+ 33 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosSellClearGoodsController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.pos.controller;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -10,13 +11,21 @@ import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNode;
+import cn.hutool.core.lang.tree.TreeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.apache.commons.lang3.ObjectUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.business.entity.BusMemberCard;
 import org.jeecg.modules.pos.entity.PosSellClearGoods;
 import org.jeecg.modules.pos.entity.PosType;
 import org.jeecg.modules.pos.service.IPosSellClearGoodsService;
@@ -27,7 +36,9 @@ 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.entity.CesStockType;
 import org.jeecg.modules.rooms.service.CesGoodsServiceImpl;
+import org.jeecg.modules.rooms.service.CesStockTypeServiceImpl;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -60,6 +71,8 @@ public class PosSellClearGoodsController extends JeecgController<PosSellClearGoo
 	private IPosSellClearGoodsService posSellClearGoodsService;
 	@Autowired
 	private CesGoodsServiceImpl cesGoodsService;
+	@Autowired
+	private CesStockTypeServiceImpl cesStockTypeService;
 
 	 /**
 	  * 商品沽清列表
@@ -74,8 +87,27 @@ public class PosSellClearGoodsController extends JeecgController<PosSellClearGoo
 	 public Result<IPage<CesGoods>> queryPageList(CesGoods cesGoods,
 														   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 														   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+												  @RequestParam(name="goodTypes[]",required = false) List<String> goodTypes,
 														   HttpServletRequest req) {
-		 QueryWrapper<CesGoods> queryWrapper = QueryGenerator.initQueryWrapper(cesGoods, req.getParameterMap());
+		 LambdaQueryWrapper<CesGoods> queryWrapper = QueryGenerator.initQueryWrapper(cesGoods, req.getParameterMap()).lambda();
+
+		 if (ObjectUtils.isNotEmpty(goodTypes)) {
+			 List<CesStockType> list = cesStockTypeService.list(Wrappers.<CesStockType>lambdaQuery()
+					 .eq(CesStockType::getHotelId, cesGoods.getHotelId())
+					 .eq(CesStockType::getInvalid, false));
+			 queryWrapper.and(j -> {
+				 for (int k = 0; k < goodTypes.size(); k++) {
+					 String id = goodTypes.get(k);
+					 List<CesStockType> stockTypeList = list.stream().filter(t -> t.getParentId().equals(id)).collect(Collectors.toList());
+					 if (ObjectUtils.isNotEmpty(stockTypeList)) {
+						 for (int z = 0; z < stockTypeList.size(); z++) {
+							 j = j.or().eq(CesGoods::getGoodType, stockTypeList.get(z).getId());
+						 }
+					 }
+					 j = j.or().eq(CesGoods::getGoodType, id);
+				 }
+			 });
+		 }
 		 Page<CesGoods> page = new Page<CesGoods>(pageNo, pageSize);
 		 IPage<CesGoods> pageList = cesGoodsService.page(page, queryWrapper);
 		 pageList.getRecords().forEach(item -> {

+ 8 - 6
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosTypeController.java

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 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.PosType;
 import org.jeecg.modules.pos.service.IPosTypeService;
@@ -50,7 +51,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 public class PosTypeController extends JeecgController<PosType, IPosTypeService> {
 	@Autowired
 	private IPosTypeService posTypeService;
-	
+
 	/**
 	 * 分页列表查询
 	 *
@@ -72,7 +73,7 @@ public class PosTypeController extends JeecgController<PosType, IPosTypeService>
 		IPage<PosType> pageList = posTypeService.page(page, queryWrapper);
 		return Result.OK(pageList);
 	}
-	
+
 	/**
 	 *   添加
 	 *
@@ -84,10 +85,11 @@ public class PosTypeController extends JeecgController<PosType, IPosTypeService>
 	//@RequiresPermissions("pos:pos_type:add")
 	@PostMapping(value = "/add")
 	public Result<String> add(@RequestBody PosType posType) {
+		posType.setTenantId(TokenUtils.currentTenantId());
 		posTypeService.save(posType);
 		return Result.OK("添加成功!");
 	}
-	
+
 	/**
 	 *  编辑
 	 *
@@ -102,7 +104,7 @@ public class PosTypeController extends JeecgController<PosType, IPosTypeService>
 		posTypeService.updateById(posType);
 		return Result.OK("编辑成功!");
 	}
-	
+
 	/**
 	 *   通过id删除
 	 *
@@ -117,7 +119,7 @@ public class PosTypeController extends JeecgController<PosType, IPosTypeService>
 		posTypeService.removeById(id);
 		return Result.OK("删除成功!");
 	}
-	
+
 	/**
 	 *  批量删除
 	 *
@@ -132,7 +134,7 @@ public class PosTypeController extends JeecgController<PosType, IPosTypeService>
 		this.posTypeService.removeByIds(Arrays.asList(ids.split(",")));
 		return Result.OK("批量删除成功!");
 	}
-	
+
 	/**
 	 * 通过id查询
 	 *

+ 112 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/entity/PosOrderGoods.java

@@ -0,0 +1,112 @@
+package org.jeecg.modules.pos.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: pos_order_goods
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+@Data
+@TableName("pos_order_goods")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="pos_order_goods对象", description="pos_order_goods")
+public class PosOrderGoods implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**关联租户*/
+	@Excel(name = "关联租户", width = 15)
+    @ApiModelProperty(value = "关联租户")
+    private String tenantId;
+	/**关联酒店*/
+	@Excel(name = "关联酒店", width = 15)
+    @ApiModelProperty(value = "关联酒店")
+    private String hotelId;
+	/**会员id*/
+	@Excel(name = "会员id", width = 15)
+    @ApiModelProperty(value = "会员id")
+    private String memberId;
+	/**单据号*/
+	@Excel(name = "单据号", width = 15)
+    @ApiModelProperty(value = "单据号")
+    private String code;
+    /**桌台id*/
+    @Excel(name = "桌台id", width = 15)
+    @ApiModelProperty(value = "桌台id")
+    private String posTableId;
+	/**桌号/取餐号*/
+	@Excel(name = "桌号/取餐号", width = 15)
+    @ApiModelProperty(value = "桌号/取餐号")
+    private String tableNo;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+	/**支付方式*/
+	@Excel(name = "支付方式", width = 15)
+    @ApiModelProperty(value = "支付方式")
+    private String paymentMethod;
+	/**支付金额*/
+	@Excel(name = "支付金额", width = 15)
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal payMoney;
+	/**pos类型*/
+	@Excel(name = "pos类型", width = 15)
+    @ApiModelProperty(value = "pos类型")
+    private String posType;
+	/**挂房账订单id*/
+	@Excel(name = "挂房账订单id", width = 15)
+    @ApiModelProperty(value = "挂房账订单id")
+    private String toRoomFeeOrderId;
+	/**应收金额*/
+	@Excel(name = "应收金额", width = 15)
+    @ApiModelProperty(value = "应收金额")
+    private BigDecimal money;
+	/**结账状态*/
+	@Excel(name = "结账状态", width = 15)
+    @ApiModelProperty(value = "结账状态")
+    private Integer status;
+	/**优惠金额*/
+	@Excel(name = "优惠金额", width = 15)
+    @ApiModelProperty(value = "优惠金额")
+    private BigDecimal couponMoney;
+	/**消费金额*/
+	@Excel(name = "消费金额", width = 15)
+    @ApiModelProperty(value = "消费金额")
+    private BigDecimal consumeMoney;
+	/**结账时间*/
+	@Excel(name = "结账时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "结账时间")
+    private Date settleTime;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+	@TableField(exist = false)
+	private List<PosOrderGoodsDetail> posOrderGoodsDetailList;
+}

+ 71 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/entity/PosOrderGoodsDetail.java

@@ -0,0 +1,71 @@
+package org.jeecg.modules.pos.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: pos_order_goods_detail
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+@Data
+@TableName("pos_order_goods_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="pos_order_goods_detail对象", description="pos_order_goods_detail")
+public class PosOrderGoodsDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**关联租户*/
+	@Excel(name = "关联租户", width = 15)
+    @ApiModelProperty(value = "关联租户")
+    private String tenantId;
+	/**关联酒店*/
+	@Excel(name = "关联酒店", width = 15)
+    @ApiModelProperty(value = "关联酒店")
+    private String hotelId;
+	/**订单id*/
+	@Excel(name = "订单id", width = 15)
+    @ApiModelProperty(value = "订单id")
+    private String orderId;
+	/**商品id*/
+	@Excel(name = "商品id", width = 15)
+    @ApiModelProperty(value = "商品id")
+    private String goodsId;
+	/**数量*/
+	@Excel(name = "数量", width = 15)
+    @ApiModelProperty(value = "数量")
+    private Integer num;
+	/**原价*/
+	@Excel(name = "原价", width = 15)
+    @ApiModelProperty(value = "原价")
+    private BigDecimal money;
+	/**优惠价*/
+	@Excel(name = "优惠价", width = 15)
+    @ApiModelProperty(value = "优惠价")
+    private BigDecimal couponMoney;
+	/**金额*/
+	@Excel(name = "金额", width = 15)
+    @ApiModelProperty(value = "金额")
+    private BigDecimal payMoney;
+}

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsDetailMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.pos.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: pos_order_goods_detail
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+public interface PosOrderGoodsDetailMapper extends BaseMapper<PosOrderGoodsDetail> {
+
+}

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.pos.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.pos.entity.PosOrderGoods;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: pos_order_goods
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+public interface PosOrderGoodsMapper extends BaseMapper<PosOrderGoods> {
+
+}

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/xml/PosOrderGoodsDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.pos.mapper.PosOrderGoodsDetailMapper">
+
+</mapper>

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/xml/PosOrderGoodsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.pos.mapper.PosOrderGoodsMapper">
+
+</mapper>

+ 14 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsDetailService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.pos.service;
+
+import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: pos_order_goods_detail
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+public interface IPosOrderGoodsDetailService extends IService<PosOrderGoodsDetail> {
+
+}

+ 14 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.pos.service;
+
+import org.jeecg.modules.pos.entity.PosOrderGoods;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: pos_order_goods
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+public interface IPosOrderGoodsService extends IService<PosOrderGoods> {
+
+}

+ 19 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsDetailServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.pos.service.impl;
+
+import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
+import org.jeecg.modules.pos.mapper.PosOrderGoodsDetailMapper;
+import org.jeecg.modules.pos.service.IPosOrderGoodsDetailService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: pos_order_goods_detail
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+@Service
+public class PosOrderGoodsDetailServiceImpl extends ServiceImpl<PosOrderGoodsDetailMapper, PosOrderGoodsDetail> implements IPosOrderGoodsDetailService {
+
+}

+ 19 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.pos.service.impl;
+
+import org.jeecg.modules.pos.entity.PosOrderGoods;
+import org.jeecg.modules.pos.mapper.PosOrderGoodsMapper;
+import org.jeecg.modules.pos.service.IPosOrderGoodsService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: pos_order_goods
+ * @Author: jeecg-boot
+ * @Date:   2023-04-13
+ * @Version: V1.0
+ */
+@Service
+public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, PosOrderGoods> implements IPosOrderGoodsService {
+
+}

+ 19 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesStockTypeController.java

@@ -62,6 +62,25 @@ public class CesStockTypeController {
         }
     }
 
+    /**
+     * 根据posType获取对应分类
+     * @param hotelId
+     * @param posType
+     * @return
+     */
+    @ApiOperation(value="顶级分类查询", notes="分类查询")
+    @GetMapping(value = "/getTopTypesByPosType")
+    public Result getTopTypes(@RequestParam String hotelId,@RequestParam String posType){
+        if(StringUtils.isBlank(hotelId)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return stockTypeService.getTopTypes(hotelId,posType);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
 
 
     @ApiOperation(value="分类创建", notes="分类创建")

+ 28 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesStockTypeServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNode;
 import cn.hutool.core.lang.tree.TreeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -56,6 +57,20 @@ public class CesStockTypeServiceImpl extends ServiceImpl<CesStockTypeMapper, Ces
         return Result.OK(treeList);
     }
 
+    public List<Tree<String>> treeList(String hotelId){
+        List<TreeNode<String>> nodeList = CollUtil.newArrayList();
+        //查询数据
+        List<CesStockType> list = stockTypeMapper.selectList(Wrappers.<CesStockType>lambdaQuery()
+                .eq(CesStockType::getHotelId,hotelId)
+                .eq(CesStockType::getInvalid,false));
+        list.forEach(v -> {
+            nodeList.add(new TreeNode<>(v.getId(),v.getParentId(),v.getName(),0));
+        });
+        if(CollUtil.isEmpty(nodeList)) return new ArrayList<>();
+        List<Tree<String>> treeList = TreeUtil.build(nodeList, "0");
+        return treeList;
+    }
+
 
     /**
      * 获取顶级分类
@@ -71,6 +86,19 @@ public class CesStockTypeServiceImpl extends ServiceImpl<CesStockTypeMapper, Ces
         return Result.OK(list);
     }
 
+    public Result getTopTypes(String hotelId,String posType) {
+        LambdaQueryWrapper<CesStockType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(CesStockType::getHotelId, hotelId);
+        lambdaQueryWrapper.eq(CesStockType::getState, true);
+        lambdaQueryWrapper.eq(CesStockType::getParentId, "0");
+        lambdaQueryWrapper.eq(CesStockType::getInvalid, false);
+        if (ObjectUtils.isNotEmpty(posType)) {
+            lambdaQueryWrapper.like(CesStockType::getPosType, posType);
+        }
+        List<CesStockType> list = stockTypeMapper.selectList(lambdaQueryWrapper);
+        return Result.OK(list);
+    }
+
     /**
      * 创建分类
      * @param stockTypeDto