Kaynağa Gözat

Merge branch 'master' of http://49.4.53.36:3000/hotel/hotel-saas-backend

shenzhongzheng 2 yıl önce
ebeveyn
işleme
0e03d2ec75
23 değiştirilmiş dosya ile 1083 ekleme ve 33 silme
  1. 26 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusAdvertController.java
  2. 71 4
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusDictItemController.java
  3. 217 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomPayTypeController.java
  4. 58 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusSalesPersonController.java
  5. 178 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusSalesPersonPostController.java
  6. 92 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomPayType.java
  7. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusSalesPerson.java
  8. 49 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusSalesPersonPost.java
  9. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomPayTypeMapper.java
  10. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusSalesPersonPostMapper.java
  11. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomPayTypeMapper.xml
  12. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusSalesPersonPostMapper.xml
  13. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomPayTypeService.java
  14. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusSalesPersonPostService.java
  15. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomPayTypeServiceImpl.java
  16. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusSalesPersonPostServiceImpl.java
  17. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesHourRoomRuleDto.java
  18. 18 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesHourRoomRuleModifyDto.java
  19. 2 9
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CesHourRoomRuleVo.java
  20. 161 4
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesHourRoomRuleController.java
  21. 5 12
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesHourRoomRule.java
  22. 80 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesHourRoomRuleServiceImpl.java
  23. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesRoomLayoutServiceImpl.java

+ 26 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusAdvertController.java

@@ -130,10 +130,35 @@ public class BusAdvertController extends JeecgController<BusAdvert, IBusAdvertSe
 		editModel.setSrc(busAdvert.getSrc());
 		editModel.setOrderBy(busAdvert.getOrderBy());
 		editModel.setStatus(busAdvert.getStatus());
-		busAdvertService.updateById(busAdvert);
+		busAdvertService.updateById(editModel);
 		return Result.OK("编辑成功!");
 	}
 
+	 /**
+	  *  编辑
+	  *
+	  * @param busAdvert
+	  * @return
+	  */
+	 @AutoLog(value = "广告管理-编辑")
+	 @ApiOperation(value="广告管理-编辑", notes="广告管理-编辑")
+	 //@RequiresPermissions("business:bus_advert_info:edit")
+	 @RequestMapping(value = "/editStatus", method = {RequestMethod.PUT,RequestMethod.POST})
+	 public Result<String> editStatus(@RequestBody BusAdvert busAdvert) {
+		 if(busAdvert.getTenantId() == null || busAdvert.getTenantId().equals("")){
+			 LoginUser user = TokenUtils.getAuthUser();
+			 if(user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")){
+				 busAdvert.setTenantId(user.getRelTenantIds());
+			 } else {
+				 throw new JeecgBootException("当前登录人租户信息错误");
+			 }
+		 }
+		 BusAdvert editModel = busAdvertService.getById(busAdvert.getId());
+		 editModel.setStatus(busAdvert.getStatus());
+		 busAdvertService.updateById(editModel);
+		 return Result.OK("编辑成功!");
+	 }
+
 	/**
 	 *   通过id删除
 	 *

+ 71 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusDictItemController.java

@@ -1,9 +1,6 @@
 package org.jeecg.modules.business.controller;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -13,6 +10,8 @@ import javax.servlet.http.HttpServletResponse;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
@@ -28,7 +27,10 @@ import lombok.extern.slf4j.Slf4j;
 
 import org.jeecg.modules.business.entity.BusDict;
 import org.jeecg.modules.business.entity.BusDictItem;
+import org.jeecg.modules.business.entity.BusHotel;
 import org.jeecg.modules.business.service.IBusDictItemService;
+import org.jeecg.modules.business.service.IBusDictService;
+import org.jeecg.modules.system.entity.SysDictItem;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.model.SysUserSysDepartModel;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
@@ -62,6 +64,9 @@ public class BusDictItemController extends JeecgController<BusDictItem, IBusDict
 	@Autowired
 	private IBusDictItemService busDictItemService;
 
+	 @Autowired
+	private IBusDictService busDictService;
+
 	/**
 	 * 分页列表查询
 	 *
@@ -255,4 +260,66 @@ public class BusDictItemController extends JeecgController<BusDictItem, IBusDict
 		 result.setRecords(resultJson.toJavaList(JSONObject.class));
 		 return Result.ok(result);
 	 }
+
+	 /**
+	  * 字典值重复校验
+	  * @param busDictItem
+	  * @param request
+	  * @return
+	  */
+	 @RequestMapping(value = "/dictItemCheck", method = RequestMethod.GET)
+	 @ApiOperation("字典重复校验接口")
+	 public Result<Object> doDictItemCheck(BusDictItem busDictItem, HttpServletRequest request) {
+		 Long num = Long.valueOf(0);
+		 LambdaQueryWrapper<BusDictItem> queryWrapper = new LambdaQueryWrapper<BusDictItem>();
+		 queryWrapper.eq(BusDictItem::getItemValue,busDictItem.getItemValue());
+		 queryWrapper.eq(BusDictItem::getDictId,busDictItem.getDictId());
+		 if (StringUtils.isNotBlank(busDictItem.getId())) {
+			 // 编辑页面校验
+			 queryWrapper.ne(BusDictItem::getId,busDictItem.getId());
+		 }
+		 num = busDictItemService.count(queryWrapper);
+		 if (num == 0) {
+			 // 该值可用
+			 return Result.ok("该值可用!");
+		 } else {
+			 // 该值不可用
+			 log.info("该值不可用,系统中已存在!");
+			 return Result.error("该值不可用,系统中已存在!");
+		 }
+	 }
+
+	 /**
+	  * 列表查询
+	  *
+	  * @param busDictItem
+	  * @param req
+	  * @return
+	  */
+	 @ApiOperation(value="业务字典配置表-列表查询", notes="业务字典配置表-列表查询")
+	 @GetMapping(value = "/queryList")
+	 public Result<List<BusDictItem>> queryList(BusDictItem busDictItem,
+												HttpServletRequest req) {
+		 QueryWrapper<BusDictItem> queryWrapper = QueryGenerator.initQueryWrapper(busDictItem, req.getParameterMap());
+		 LoginUser user = TokenUtils.getAuthUser();
+		 if(user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")){
+			 queryWrapper.eq("tenant_id",user.getRelTenantIds());
+		 }
+		 List<BusDictItem> list = new ArrayList<>();
+		 String dictName = req.getParameter("dictName");
+		 if(oConvertUtils.isNotEmpty(dictName)){
+			 LambdaQueryWrapper<BusDict> queryDictWrapper = new LambdaQueryWrapper<>();
+			 queryDictWrapper.eq(BusDict::getDictName,dictName);
+			 BusDict busDict = busDictService.getOne(queryDictWrapper);
+
+			 if (busDict != null) {
+				 //queryWrapper.ne(BusDictItem::getDictId,busDict.getId());
+				 queryWrapper.eq("dict_id",busDict.getId());
+				 queryWrapper.eq("status",1);
+				 queryWrapper.eq("del_flag",0);
+				 list = busDictItemService.list(queryWrapper);
+			 }
+		 }
+		 return Result.OK(list);
+	 }
 }

+ 217 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomPayTypeController.java

@@ -0,0 +1,217 @@
+package org.jeecg.modules.business.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.constant.CommonConstant;
+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 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.business.entity.BusHotel;
+import org.jeecg.modules.business.entity.BusRoomPayType;
+import org.jeecg.modules.business.entity.BusSalesPerson;
+import org.jeecg.modules.business.service.IBusHotelService;
+import org.jeecg.modules.business.service.IBusRoomPayTypeService;
+import org.jeecg.modules.system.entity.SysTenant;
+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: 支付方式
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+@Api(tags="支付方式")
+@RestController
+@RequestMapping("/business/busRoomPayType")
+@Slf4j
+public class BusRoomPayTypeController extends JeecgController<BusRoomPayType, IBusRoomPayTypeService> {
+	@Autowired
+	private IBusRoomPayTypeService busRoomPayTypeService;
+	 @Autowired
+	 private IBusHotelService busHotelService;
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busRoomPayType
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "支付方式-分页列表查询")
+	@ApiOperation(value="支付方式-分页列表查询", notes="支付方式-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusRoomPayType>> queryPageList(BusRoomPayType busRoomPayType,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusRoomPayType> queryWrapper = QueryGenerator.initQueryWrapper(busRoomPayType, req.getParameterMap());
+		Page<BusRoomPayType> page = new Page<BusRoomPayType>(pageNo, pageSize);
+		IPage<BusRoomPayType> pageList = busRoomPayTypeService.page(page, queryWrapper);
+		pageList.getRecords().forEach(item->{
+			BusHotel busHotel = busHotelService.getById(item.getHotelId());
+			if (busHotel != null) {
+				item.setHotelName(busHotel.getName());
+			}
+		});
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param busRoomPayType
+	 * @return
+	 */
+	@AutoLog(value = "支付方式-添加")
+	@ApiOperation(value="支付方式-添加", notes="支付方式-添加")
+	//@RequiresPermissions("business:bus_room_pay_type_info:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusRoomPayType busRoomPayType) {
+		busRoomPayType.setDelFlag(CommonConstant.DEL_FLAG_0);
+		if(busRoomPayType.getTenantId() == null || busRoomPayType.getTenantId().equals("")){
+			LoginUser user = TokenUtils.getAuthUser();
+			if(user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")){
+				busRoomPayType.setTenantId(user.getRelTenantIds());
+			} else {
+				throw new JeecgBootException("当前登录人租户信息错误");
+			}
+		}
+		busRoomPayTypeService.save(busRoomPayType);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param busRoomPayType
+	 * @return
+	 */
+	@AutoLog(value = "支付方式-编辑")
+	@ApiOperation(value="支付方式-编辑", notes="支付方式-编辑")
+	//@RequiresPermissions("business:bus_room_pay_type_info:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusRoomPayType busRoomPayType) {
+		busRoomPayType.setDelFlag(CommonConstant.DEL_FLAG_0);
+		if(busRoomPayType.getTenantId() == null || busRoomPayType.getTenantId().equals("")){
+			LoginUser user = TokenUtils.getAuthUser();
+			if(user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")){
+				busRoomPayType.setTenantId(user.getRelTenantIds());
+			} else {
+				throw new JeecgBootException("当前登录人租户信息错误");
+			}
+		}
+		BusRoomPayType editModel = busRoomPayTypeService.getById(busRoomPayType.getId());
+		editModel.setName(busRoomPayType.getName());
+		editModel.setIsDeposit(busRoomPayType.getIsDeposit());
+		editModel.setIsClosing(busRoomPayType.getIsClosing());
+		editModel.setOrderBy(busRoomPayType.getOrderBy());
+		editModel.setStatus(busRoomPayType.getStatus());
+		busRoomPayTypeService.updateById(editModel);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "支付方式-通过id删除")
+	@ApiOperation(value="支付方式-通过id删除", notes="支付方式-通过id删除")
+	//@RequiresPermissions("business:bus_room_pay_type_info:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busRoomPayTypeService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "支付方式-批量删除")
+	@ApiOperation(value="支付方式-批量删除", notes="支付方式-批量删除")
+	//@RequiresPermissions("business:bus_room_pay_type_info:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busRoomPayTypeService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "支付方式-通过id查询")
+	@ApiOperation(value="支付方式-通过id查询", notes="支付方式-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusRoomPayType> queryById(@RequestParam(name="id",required=true) String id) {
+		BusRoomPayType busRoomPayType = busRoomPayTypeService.getById(id);
+		if(busRoomPayType==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busRoomPayType);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busRoomPayType
+    */
+    //@RequiresPermissions("business:bus_room_pay_type_info:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusRoomPayType busRoomPayType) {
+        return super.exportXls(request, busRoomPayType, BusRoomPayType.class, "支付方式");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_room_pay_type_info:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusRoomPayType.class);
+    }
+
+}

+ 58 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusSalesPersonController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.business.controller;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -9,6 +10,9 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
@@ -23,8 +27,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
 import org.jeecg.modules.business.entity.BusSalesPerson;
+import org.jeecg.modules.business.entity.BusSalesPersonPost;
 import org.jeecg.modules.business.entity.BusWaiter;
+import org.jeecg.modules.business.service.IBusSalesPersonPostService;
 import org.jeecg.modules.business.service.IBusSalesPersonService;
+import org.jeecg.modules.system.entity.SysTenant;
+import org.jeecg.modules.system.entity.SysUserDepart;
+import org.jeecg.modules.system.entity.SysUserRole;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -56,6 +65,9 @@ public class BusSalesPersonController extends JeecgController<BusSalesPerson, IB
 	@Autowired
 	private IBusSalesPersonService busSalesPersonService;
 
+	 @Autowired
+	 private IBusSalesPersonPostService busSalesPersonPostService;
+
 	/**
 	 * 分页列表查询
 	 *
@@ -97,6 +109,19 @@ public class BusSalesPersonController extends JeecgController<BusSalesPerson, IB
 		}
 		Page<BusSalesPerson> page = new Page<BusSalesPerson>(pageNo, pageSize);
 		IPage<BusSalesPerson> pageList = busSalesPersonService.page(page, queryWrapper);
+		pageList.getRecords().forEach(item->{
+//			SysTenant sysTenant = sysTenantService.getById(item.getTenantId());
+//			if (sysTenant != null) {
+//				item.setTenantName(sysTenant.getName());
+//			}
+
+			LambdaQueryWrapper<BusSalesPersonPost> query = new LambdaQueryWrapper<>();
+			query.eq(BusSalesPersonPost::getSaleId,item.getId());
+			List<BusSalesPersonPost> list = busSalesPersonPostService.list(query);
+			List<String> postIdList = list.stream().map(BusSalesPersonPost::getPostId).collect(Collectors.toList());
+			String postIds = StringUtils.join(postIdList,',');
+			item.setPostIds(postIds);
+		});
 		return Result.OK(pageList);
 	}
 
@@ -121,6 +146,23 @@ public class BusSalesPersonController extends JeecgController<BusSalesPerson, IB
 			}
 		}
 		busSalesPersonService.save(busSalesPerson);
+		//职务处理
+		if(busSalesPerson.getPostIds() != null && !busSalesPerson.getPostIds().equals("")){
+			List<String> postIdArray = Arrays.asList(busSalesPerson.getPostIds().split(","));
+
+			String saleId = busSalesPerson.getId();
+			//首先删除该营销员所有关联的职务信息
+			QueryWrapper<BusSalesPersonPost> salePostWrapper = new QueryWrapper<BusSalesPersonPost>();
+			salePostWrapper.eq("sale_id", saleId);
+			busSalesPersonPostService.remove(salePostWrapper);
+			//添加职务信息
+			List<BusSalesPersonPost> salePostList = new ArrayList<>();
+			for (String postId : postIdArray) {
+				salePostList.add(new BusSalesPersonPost(saleId, postId));
+			}
+			busSalesPersonPostService.saveBatch(salePostList);
+		}
+
 		return Result.OK("添加成功!");
 	}
 
@@ -154,6 +196,22 @@ public class BusSalesPersonController extends JeecgController<BusSalesPerson, IB
 		editModel.setRemarks(busSalesPerson.getRemarks());
 		editModel.setStatus(busSalesPerson.getStatus());
 		busSalesPersonService.updateById(editModel);
+		//职务处理
+		if(busSalesPerson.getPostIds() != null && !busSalesPerson.getPostIds().equals("")){
+			List<String> postIdArray = Arrays.asList(busSalesPerson.getPostIds().split(","));
+
+			String saleId = busSalesPerson.getId();
+			//首先删除该营销员所有关联的职务信息
+			QueryWrapper<BusSalesPersonPost> salePostWrapper = new QueryWrapper<BusSalesPersonPost>();
+			salePostWrapper.eq("sale_id", saleId);
+			busSalesPersonPostService.remove(salePostWrapper);
+			//添加职务信息
+			List<BusSalesPersonPost> salePostList = new ArrayList<>();
+			for (String postId : postIdArray) {
+				salePostList.add(new BusSalesPersonPost(saleId, postId));
+			}
+			busSalesPersonPostService.saveBatch(salePostList);
+		}
 		return Result.OK("编辑成功!");
 	}
 

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

@@ -0,0 +1,178 @@
+package org.jeecg.modules.business.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 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.business.entity.BusSalesPersonPost;
+import org.jeecg.modules.business.service.IBusSalesPersonPostService;
+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: 营销人员职务管理
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+@Api(tags="营销人员职务管理")
+@RestController
+@RequestMapping("/business/busSalesPersonPost")
+@Slf4j
+public class BusSalesPersonPostController extends JeecgController<BusSalesPersonPost, IBusSalesPersonPostService> {
+	@Autowired
+	private IBusSalesPersonPostService busSalesPersonPostService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busSalesPersonPost
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "营销人员职务管理-分页列表查询")
+	@ApiOperation(value="营销人员职务管理-分页列表查询", notes="营销人员职务管理-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusSalesPersonPost>> queryPageList(BusSalesPersonPost busSalesPersonPost,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusSalesPersonPost> queryWrapper = QueryGenerator.initQueryWrapper(busSalesPersonPost, req.getParameterMap());
+		Page<BusSalesPersonPost> page = new Page<BusSalesPersonPost>(pageNo, pageSize);
+		IPage<BusSalesPersonPost> pageList = busSalesPersonPostService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param busSalesPersonPost
+	 * @return
+	 */
+	@AutoLog(value = "营销人员职务管理-添加")
+	@ApiOperation(value="营销人员职务管理-添加", notes="营销人员职务管理-添加")
+	//@RequiresPermissions("business:bus_sales_person_post_info:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusSalesPersonPost busSalesPersonPost) {
+		busSalesPersonPostService.save(busSalesPersonPost);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param busSalesPersonPost
+	 * @return
+	 */
+	@AutoLog(value = "营销人员职务管理-编辑")
+	@ApiOperation(value="营销人员职务管理-编辑", notes="营销人员职务管理-编辑")
+	//@RequiresPermissions("business:bus_sales_person_post_info:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusSalesPersonPost busSalesPersonPost) {
+		busSalesPersonPostService.updateById(busSalesPersonPost);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "营销人员职务管理-通过id删除")
+	@ApiOperation(value="营销人员职务管理-通过id删除", notes="营销人员职务管理-通过id删除")
+	//@RequiresPermissions("business:bus_sales_person_post_info:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busSalesPersonPostService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "营销人员职务管理-批量删除")
+	@ApiOperation(value="营销人员职务管理-批量删除", notes="营销人员职务管理-批量删除")
+	//@RequiresPermissions("business:bus_sales_person_post_info:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busSalesPersonPostService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "营销人员职务管理-通过id查询")
+	@ApiOperation(value="营销人员职务管理-通过id查询", notes="营销人员职务管理-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusSalesPersonPost> queryById(@RequestParam(name="id",required=true) String id) {
+		BusSalesPersonPost busSalesPersonPost = busSalesPersonPostService.getById(id);
+		if(busSalesPersonPost==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busSalesPersonPost);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busSalesPersonPost
+    */
+    //@RequiresPermissions("business:bus_sales_person_post_info:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusSalesPersonPost busSalesPersonPost) {
+        return super.exportXls(request, busSalesPersonPost, BusSalesPersonPost.class, "营销人员职务管理");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_sales_person_post_info:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusSalesPersonPost.class);
+    }
+
+}

+ 92 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomPayType.java

@@ -0,0 +1,92 @@
+package org.jeecg.modules.business.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: 支付方式
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_room_pay_type_info")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_room_pay_type_info对象", description="支付方式")
+public class BusRoomPayType 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;
+
+    /**酒店名称*/
+    private transient String hotelName;
+
+	/**支付方式名称*/
+	@Excel(name = "支付方式名称", width = 15)
+    @ApiModelProperty(value = "支付方式名称")
+    private String name;
+	/**是否用于押金付款*/
+	@Excel(name = "是否用于押金付款", width = 15)
+    @ApiModelProperty(value = "是否用于押金付款")
+    private Boolean isDeposit;
+	/**是否用于结账付款*/
+	@Excel(name = "是否用于结账付款", width = 15)
+    @ApiModelProperty(value = "是否用于结账付款")
+    private Boolean isClosing;
+	/**排序*/
+	@Excel(name = "排序", width = 15)
+    @ApiModelProperty(value = "排序")
+    private Integer orderBy;
+	/**状态(0-禁用;1-启用)*/
+	@Excel(name = "状态(0-禁用;1-启用)", width = 15)
+    @ApiModelProperty(value = "状态(0-禁用;1-启用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 2 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusSalesPerson.java

@@ -97,4 +97,6 @@ public class BusSalesPerson implements Serializable {
     @DateTimeFormat(pattern="yyyy-MM-dd")
     @ApiModelProperty(value = "更新时间")
     private Date updateTime;
+
+    private transient String postIds;
 }

+ 49 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusSalesPersonPost.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.business.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: 营销人员职务管理
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_sales_person_post_info")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_sales_person_post_info对象", description="营销人员职务管理")
+public class BusSalesPersonPost implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**营销员ID*/
+	@Excel(name = "营销员ID", width = 15)
+    @ApiModelProperty(value = "营销员ID")
+    private String saleId;
+	/**职务ID*/
+	@Excel(name = "职务ID", width = 15)
+    @ApiModelProperty(value = "职务ID")
+    private String postId;
+
+
+    public BusSalesPersonPost(String saleId, String postId) {
+        this.saleId = saleId;
+        this.postId = postId;
+    }
+}

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

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.business.entity.BusRoomPayType;
+
+/**
+ * @Description: 支付方式
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+public interface BusRoomPayTypeMapper extends BaseMapper<BusRoomPayType> {
+
+}

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

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.business.entity.BusSalesPersonPost;
+
+/**
+ * @Description: 营销人员职务管理
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+public interface BusSalesPersonPostMapper extends BaseMapper<BusSalesPersonPost> {
+
+}

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomPayTypeMapper.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.demo.business.mapper.BusRoomPayTypeMapper">
+
+</mapper>

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusSalesPersonPostMapper.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.demo.business.mapper.BusSalesPersonPostMapper">
+
+</mapper>

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

@@ -0,0 +1,14 @@
+package org.jeecg.modules.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.business.entity.BusRoomPayType;
+
+/**
+ * @Description: 支付方式
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+public interface IBusRoomPayTypeService extends IService<BusRoomPayType> {
+
+}

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

@@ -0,0 +1,14 @@
+package org.jeecg.modules.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.business.entity.BusSalesPersonPost;
+
+/**
+ * @Description: 营销人员职务管理
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+public interface IBusSalesPersonPostService extends IService<BusSalesPersonPost> {
+
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.modules.business.entity.BusRoomPayType;
+import org.jeecg.modules.business.mapper.BusRoomPayTypeMapper;
+import org.jeecg.modules.business.service.IBusRoomPayTypeService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 支付方式
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+@Service
+public class BusRoomPayTypeServiceImpl extends ServiceImpl<BusRoomPayTypeMapper, BusRoomPayType> implements IBusRoomPayTypeService {
+
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.modules.business.entity.BusSalesPersonPost;
+import org.jeecg.modules.business.mapper.BusSalesPersonPostMapper;
+import org.jeecg.modules.business.service.IBusSalesPersonPostService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 营销人员职务管理
+ * @Author: jeecg-boot
+ * @Date:   2023-03-09
+ * @Version: V1.0
+ */
+@Service
+public class BusSalesPersonPostServiceImpl extends ServiceImpl<BusSalesPersonPostMapper, BusSalesPersonPost> implements IBusSalesPersonPostService {
+
+}

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesHourRoomRuleDto.java

@@ -5,7 +5,7 @@ import org.jeecg.common.api.dto.BasePage;
 
 /**
  * <p>
- * 租户房型列表查询后端接受前端参数DTO类
+ * 钟点房计费规则查询DTO类
  * </p>
  *
  * @author fendo

+ 18 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesHourRoomRuleModifyDto.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+import org.jeecg.common.api.dto.BasePage;
+import org.jeecg.modules.rooms.entity.CesHourRoomRule;
+
+/**
+ * <p>
+ * 钟点房计费规则新增修改,关联房型等通用DTO类
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-01
+ */
+@Data
+public class CesHourRoomRuleModifyDto extends CesHourRoomRule {
+
+}

+ 2 - 9
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CesHourRoomRuleVo.java

@@ -1,17 +1,8 @@
 package org.jeecg.modules.rooms.Vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
 import org.jeecg.modules.rooms.entity.CesHourRoomRule;
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.List;
 
 /**
  * <p>
@@ -29,4 +20,6 @@ public class CesHourRoomRuleVo extends CesHourRoomRule {
      */
     private String hotelName;
 
+
+
 }

+ 161 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesHourRoomRuleController.java

@@ -8,15 +8,20 @@ import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.Enum.ResultCode;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.modules.rooms.DTO.CesHourRoomRuleDto;
+import org.jeecg.modules.rooms.DTO.CesHourRoomRuleModifyDto;
 import org.jeecg.modules.rooms.entity.CesHourRoomRule;
 import org.jeecg.modules.rooms.service.CesHourRoomRuleServiceImpl;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.jeecg.modules.rooms.service.CesRoomLayoutServiceImpl;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -35,6 +40,8 @@ CesHourRoomRuleController extends JeecgController<CesHourRoomRule, CesHourRoomRu
 
     @Resource
     CesHourRoomRuleServiceImpl cesHourRoomRuleService;
+    @Resource
+    CesRoomLayoutServiceImpl cesRoomLayoutService;
 
     @ApiOperation(value="钟点房规则查询", notes="钟点房规则查询")
     @GetMapping(value = "/list")
@@ -48,7 +55,7 @@ CesHourRoomRuleController extends JeecgController<CesHourRoomRule, CesHourRoomRu
         if (0>=cesHourRoomRuleDto.getPageSize()){
             return Result.error("页码尺寸不能小于等于0");
         }
-        if (StringUtils.isEmpty(cesHourRoomRuleDto.getHotelId())){
+        if (StringUtils.isBlank(cesHourRoomRuleDto.getHotelId())){
             return Result.error(ResultCode.PARAM_MISS);
         }
         try{
@@ -56,7 +63,157 @@ CesHourRoomRuleController extends JeecgController<CesHourRoomRule, CesHourRoomRu
         }catch (Exception e){
             return Result.error(e.getMessage());
         }
+    }
+
+    @ApiOperation(value="显示关联房型", notes="显示关联房型")
+    @GetMapping(value = "/listLayout")
+    public Result listLayout(String hotelId){
+        if (StringUtils.isBlank(hotelId)){
+            return Result.error("房型ID必要!");
+        }
+        try{
+            return cesRoomLayoutService.getRoomLayoutsByHotelId(hotelId);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
 
+    @AutoLog(value = "新增钟点房规则")
+    @ApiOperation(value="新增钟点房规则", notes="新增钟点房规则")
+    @PostMapping(value = "/save")
+    public Result save(@RequestBody CesHourRoomRuleModifyDto dto){
+        if (ObjectUtils.isEmpty(dto)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if (StringUtils.isBlank(dto.getHotelId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if (StringUtils.isBlank(dto.getHourRoomName())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if (null==dto.getAfterOpenRoom()||0>=dto.getAfterOpenRoom()){
+            return Result.error("开房后时间为空或小于等于0!");
+        }
+        if (null==dto.getAfterOpenRoomPay()||BigDecimal.ZERO.compareTo(dto.getAfterOpenRoomPay())>0){
+            return Result.error("开房后花费为空或小于0!");
+        }
+        if (null==dto.getExceedTime()||0>=dto.getExceedTime()){
+            return Result.error("超过时间为空或小于等于0!");
+        }
+        if (null==dto.getExceedPay()||BigDecimal.ZERO.compareTo(dto.getExceedPay())>0){
+            return Result.error("超时花费为空或小于0!");
+        }
+        if (null==dto.getNotReachExceedTime()||0>=dto.getNotReachExceedTime()){
+            return Result.error("未达超时周期时间为空或小于等于0!");
+        }
+        if (null==dto.getNotReachExceedTimePay()||BigDecimal.ZERO.compareTo(dto.getNotReachExceedTimePay())>0){
+            return Result.error("未达超市周期花费为空或小于0!");
+        }
+        if (null==dto.getMaxExtraPay()||BigDecimal.ZERO.compareTo(dto.getMaxExtraPay())>0){
+            return Result.error("封顶花费为空或小于0!");
+        }
+        if (null==dto.getLimitTimeTransferAllDay()||0>dto.getLimitTimeTransferAllDay()){
+            return Result.error("超时转全天时间为空或小于0!");
+        }
+        try{
+            return cesHourRoomRuleService.create(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+    @AutoLog(value = "修改钟点房规则")
+    @ApiOperation(value="修改钟点房规则", notes="修改钟点房规则")
+    @PostMapping(value = "/modify")
+    public Result modify(@RequestBody CesHourRoomRuleModifyDto dto){
+        if (ObjectUtils.isEmpty(dto)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getId())){
+            return Result.error(ResultCode.PARAM_MISS,"数据ID必传!");
+        }
+        if (StringUtils.isBlank(dto.getHotelId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if (StringUtils.isBlank(dto.getHourRoomName())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if (null==dto.getAfterOpenRoom()||0>=dto.getAfterOpenRoom()){
+            return Result.error("开房后时间为空或小于等于0!");
+        }
+        if (null==dto.getAfterOpenRoomPay()||BigDecimal.ZERO.compareTo(dto.getAfterOpenRoomPay())>0){
+            return Result.error("开房后花费为空或小于0!");
+        }
+        if (null==dto.getExceedTime()||0>=dto.getExceedTime()){
+            return Result.error("超过时间为空或小于等于0!");
+        }
+        if (null==dto.getExceedPay()||BigDecimal.ZERO.compareTo(dto.getExceedPay())>0){
+            return Result.error("超时花费为空或小于0!");
+        }
+        if (null==dto.getNotReachExceedTime()||0>=dto.getNotReachExceedTime()){
+            return Result.error("未达超时周期时间为空或小于等于0!");
+        }
+        if (null==dto.getNotReachExceedTimePay()||BigDecimal.ZERO.compareTo(dto.getNotReachExceedTimePay())>0){
+            return Result.error("未达超市周期花费为空或小于0!");
+        }
+        if (null==dto.getMaxExtraPay()||BigDecimal.ZERO.compareTo(dto.getMaxExtraPay())>0){
+            return Result.error("封顶花费为空或小于0!");
+        }
+        if (null==dto.getLimitTimeTransferAllDay()||0>dto.getLimitTimeTransferAllDay()){
+            return Result.error("超时转全天时间为空或小于0!");
+        }
+        try{
+            return cesHourRoomRuleService.modify(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+    @AutoLog(value = "钟点房规则关联房型")
+    @ApiOperation(value="钟点房规则关联房型", notes="钟点房规则关联房型")
+    @PostMapping(value = "/relate")
+    public Result relate(@RequestBody CesHourRoomRuleModifyDto dto){
+        if (ObjectUtils.isEmpty(dto)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if (StringUtils.isBlank(dto.getId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return cesHourRoomRuleService.relateLayout(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+    @AutoLog(value = "批量删除钟点房计费规则")
+    @ApiOperation(value="批量删除钟点房计费规则", notes="批量删除钟点房计费规则")
+    @DeleteMapping(value = "/batchDelete")
+    public Result batchDelete(@RequestParam String idStr){
+        if(StringUtils.isBlank(idStr)){
+            return Result.error(ResultCode.PARAM_MISS,"数据IDSTR必传!");
+        }
+        try{
+            List<String> ids = Stream.of(idStr.split(",")).collect(Collectors.toList());
+            return  cesHourRoomRuleService.batchDelete(ids);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+    @AutoLog(value = "删除一条钟点房计费规则")
+    @ApiOperation(value="删除一条钟点房计费规则", notes="删除一条钟点房计费规则")
+    @DeleteMapping(value = "/delete")
+    public Result delete(@RequestParam String id){
+        if(StringUtils.isBlank(id)){
+            return Result.error(ResultCode.PARAM_MISS,"数据ID必传!");
+        }
+        try{
+            return  cesHourRoomRuleService.deleteOne(id);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
     }
 }
 

+ 5 - 12
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesHourRoomRule.java

@@ -10,7 +10,6 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.List;
 
 /**
  * <p>
@@ -41,20 +40,16 @@ public class CesHourRoomRule extends Model<CesHourRoomRule> {
      */
     private String hourRoomName;
 
-    /**
-     * 收费规则
-     */
-    private String rule;
 
     /**
      * 房型id
      */
-    private List<String> layoutIds;
+    private String layoutIds;
 
     /**
      * 开房后时间(分钟)
      */
-    private String afterOpenRoom;
+    private Integer afterOpenRoom;
 
     /**
      * 开房后多少分钟内按多少元收取
@@ -64,7 +59,7 @@ public class CesHourRoomRule extends Model<CesHourRoomRule> {
     /**
      * 超时时间(分钟)周期
      */
-    private String exceedTime;
+    private Integer exceedTime;
 
     /**
      * 每到一个超时周期收取费用(元)
@@ -74,7 +69,7 @@ public class CesHourRoomRule extends Model<CesHourRoomRule> {
     /**
      * 不到超时周期的超时时间(分钟)
      */
-    private String notReachExceedTime;
+    private Integer notReachExceedTime;
 
     /**
      * 不到超时周期的超时收费(元)
@@ -89,7 +84,7 @@ public class CesHourRoomRule extends Model<CesHourRoomRule> {
     /**
      * 超过多少分钟转为全天房(0分钟则视为不转为全天房)
      */
-    private String limitTimeTransferAllDay;
+    private Integer limitTimeTransferAllDay;
 
     /**
      * 创建时间
@@ -115,8 +110,6 @@ public class CesHourRoomRule extends Model<CesHourRoomRule> {
 
     public static final String HOUR_ROOM_NAME = "hour_room_name";
 
-    public static final String RULE = "rule";
-
     public static final String LAYOUT_IDS = "layout_ids";
 
     public static final String AFTER_OPEN_ROOM = "after_open_room";

+ 80 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesHourRoomRuleServiceImpl.java

@@ -1,23 +1,30 @@
 package org.jeecg.modules.rooms.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.collections.map.HashedMap;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.CommonUtils;
 import org.jeecg.modules.business.entity.BusHotel;
 import org.jeecg.modules.business.service.impl.BusHotelServiceImpl;
 import org.jeecg.modules.rooms.DTO.CesHourRoomRuleDto;
+import org.jeecg.modules.rooms.DTO.CesHourRoomRuleModifyDto;
 import org.jeecg.modules.rooms.Vo.CesHourRoomRuleVo;
 import org.jeecg.modules.rooms.entity.CesHourRoomRule;
 import org.jeecg.modules.rooms.mapper.CesHourRoomRuleMapper;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -46,7 +53,8 @@ public class CesHourRoomRuleServiceImpl extends ServiceImpl<CesHourRoomRuleMappe
         QueryWrapper<CesHourRoomRule> queryWrapper =new QueryWrapper<>();
         queryWrapper.eq(CesHourRoomRule.HOTEL_ID,cesHourRoomRuleDto.getHotelId());
         if (StringUtils.isNotEmpty(cesHourRoomRuleDto.getHourRoomName())){
-            queryWrapper.eq(CesHourRoomRule.HOUR_ROOM_NAME,cesHourRoomRuleDto.getHourRoomName());
+            //处理百分号 mybatis plus bug 查询 % 出现全量数据
+            queryWrapper.like(CesHourRoomRule.HOUR_ROOM_NAME, CommonUtils.escapeChar(cesHourRoomRuleDto.getHourRoomName()));
         }
         queryWrapper.eq(CesHourRoomRule.INVALID,false);
         queryWrapper.orderByDesc(CesHourRoomRule.UPDATEAT);
@@ -54,7 +62,7 @@ public class CesHourRoomRuleServiceImpl extends ServiceImpl<CesHourRoomRuleMappe
         List<CesHourRoomRule> records = dataPage.getRecords();
         List<String> hotelIds = records.stream().map(v-> v.getHotelId()).collect(Collectors.toList());
 
-        List<BusHotel> busHotels = busHotelService.findHotelsByIds(hotelIds);
+        List<BusHotel> busHotels = busHotelService.findHotelsByIds(hotelIds.stream().distinct().collect(Collectors.toList()));
         List<CesHourRoomRuleVo> vos = new ArrayList<>();
         records.forEach(v -> {
             CesHourRoomRuleVo vo = new CesHourRoomRuleVo();
@@ -68,4 +76,74 @@ public class CesHourRoomRuleServiceImpl extends ServiceImpl<CesHourRoomRuleMappe
         map.put("total",dataPage.getTotal());
         return Result.OK(map);
     }
+
+    public Result create(CesHourRoomRuleModifyDto dto) {
+        //新增时默认没有关联任何房型
+        dto.setCreateAt(LocalDateTime.now());
+        dto.setUpdateAt(LocalDateTime.now());
+        dto.setInvalid(false);
+        cesHourRoomRuleMapper.insert(dto);
+        return Result.ok("创建成功!");
+    }
+
+    public Result modify(CesHourRoomRuleModifyDto dto) {
+        CesHourRoomRule cesHourRoomRule = cesHourRoomRuleMapper.selectOne(new QueryWrapper<CesHourRoomRule>()
+                .eq(CesHourRoomRule.ID, dto.getId())
+                .eq(CesHourRoomRule.INVALID, false));
+        if (ObjectUtils.isEmpty(cesHourRoomRule)){
+            return Result.ok("数据未找到!");
+        }
+        BeanUtil.copyProperties(dto,cesHourRoomRule, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
+        cesHourRoomRule.setUpdateAt(LocalDateTime.now());
+        cesHourRoomRuleMapper.updateById(cesHourRoomRule);
+        return Result.ok("修改成功!");
+    }
+
+    public Result batchDelete(List<String> ids) {
+        List<CesHourRoomRule> cesHourRoomRules = cesHourRoomRuleMapper.selectBatchIds(ids);
+        if (CollectionUtil.isEmpty(cesHourRoomRules)){
+            //查不到证明已经被删除过了
+            return Result.ok("删除成功!");
+        }
+        cesHourRoomRules.forEach(v->{
+            v.setUpdateAt(LocalDateTime.now());
+            v.setInvalid(true);
+        });
+        saveOrUpdateBatch(cesHourRoomRules);
+        return Result.ok("删除成功!");
+    }
+
+    public Result deleteOne(String id) {
+        CesHourRoomRule cesHourRoomRule = cesHourRoomRuleMapper.selectOne(new QueryWrapper<CesHourRoomRule>()
+                .eq(CesHourRoomRule.ID, id)
+                .eq(CesHourRoomRule.INVALID, false));
+        if (ObjectUtils.isEmpty(cesHourRoomRule)){
+            return Result.ok("删除成功!");
+        }
+        cesHourRoomRule.setUpdateAt(LocalDateTime.now());
+        cesHourRoomRule.setInvalid(true);
+        cesHourRoomRuleMapper.updateById(cesHourRoomRule);
+        return  Result.ok("删除成功!");
+    }
+
+
+    public Result relateLayout(CesHourRoomRuleModifyDto dto) {
+        CesHourRoomRule cesHourRoomRule = cesHourRoomRuleMapper.selectOne(new QueryWrapper<CesHourRoomRule>()
+                .eq(CesHourRoomRule.ID, dto.getId())
+                .eq(CesHourRoomRule.INVALID, false));
+        if (ObjectUtils.isEmpty(cesHourRoomRule)){
+            return Result.error("该钟点房规则不存在!");
+        }
+        cesHourRoomRule.setLayoutIds(dto.getLayoutIds());
+        cesHourRoomRule.setUpdateAt(LocalDateTime.now());
+        if (StringUtils.isBlank(cesHourRoomRule.getLayoutIds())){
+            cesHourRoomRuleMapper.update(cesHourRoomRule,new UpdateWrapper<CesHourRoomRule>().lambda()
+                    .set(CesHourRoomRule::getLayoutIds,null)
+                    .eq(CesHourRoomRule::getId,dto.getId()));
+        }else{
+            cesHourRoomRuleMapper.updateById(cesHourRoomRule);
+        }
+
+        return Result.OK("关联房型成功!");
+    }
 }

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

@@ -224,6 +224,19 @@ public class CesRoomLayoutServiceImpl extends ServiceImpl<CesRoomLayoutMapper, C
     }
 
 
+    /**
+     * 根据酒店ID 查询所有房型
+     * @param hotelId
+     * @return
+     */
+    public Result getRoomLayoutsByHotelId(String hotelId){
+
+        List<CesRoomLayout> cesRoomLayouts = cesRoomLayoutMapper.selectList(new QueryWrapper<CesRoomLayout>()
+                .eq(CesRoomLayout.HOTEL_ID, hotelId)
+                .eq(CesRoomLayout.INVALID,false));
+        return Result.OK(cesRoomLayouts);
+
+    }