修改了收费接口

This commit is contained in:
2025-09-13 00:09:58 +08:00
parent 5115c9ec85
commit 65a01f15c6
34 changed files with 512 additions and 108 deletions

View File

@@ -42,7 +42,7 @@ public class CostHouseChargeController extends BaseController {
/** /**
* 查询房屋收费列表 * 查询房屋收费列表
*/ */
@SaCheckPermission("property:houseCharge:list") // @SaCheckPermission("property:houseCharge:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<CostHouseChargeVo> list(CostHouseChargeBo bo, PageQuery pageQuery) { public TableDataInfo<CostHouseChargeVo> list(CostHouseChargeBo bo, PageQuery pageQuery) {
return costHouseChargeService.queryPageList(bo, pageQuery); return costHouseChargeService.queryPageList(bo, pageQuery);
@@ -85,6 +85,10 @@ public class CostHouseChargeController extends BaseController {
public R<Void> returnFree( @RequestBody CostChargeReturnFeeBo bo) { public R<Void> returnFree( @RequestBody CostChargeReturnFeeBo bo) {
return toAjax(costHouseChargeService.returnFree(bo)); return toAjax(costHouseChargeService.returnFree(bo));
} }
@PostMapping("/addFee")
public R<Void> addFee( @RequestBody CostHouseChargeBo bo) {
return toAjax(costHouseChargeService.addFee(bo));
}
/** /**
* 修改房屋收费 * 修改房屋收费

View File

@@ -39,6 +39,7 @@ public class PlantsRentalOrderController extends BaseController {
private final IPlantsRentalOrderService plantsRentalOrderService; private final IPlantsRentalOrderService plantsRentalOrderService;
/** /**
* 查询绿植租赁-订单管理列表 * 查询绿植租赁-订单管理列表
*/ */
@@ -47,7 +48,13 @@ public class PlantsRentalOrderController extends BaseController {
public TableDataInfo<PlantsRentalOrderVo> list(PlantsRentalOrderBo bo, PageQuery pageQuery) { public TableDataInfo<PlantsRentalOrderVo> list(PlantsRentalOrderBo bo, PageQuery pageQuery) {
return plantsRentalOrderService.queryPageList(bo, pageQuery); return plantsRentalOrderService.queryPageList(bo, pageQuery);
} }
/**
* 查询绿植租赁-订单管理列表
*/
@GetMapping("/notSelectList")
public R<List<PlantsRentalOrderVo>> notSelectList() {
return R.ok(plantsRentalOrderService.notSelectList());
}
/** /**
* 导出绿植租赁-订单管理列表 * 导出绿植租赁-订单管理列表
*/ */

View File

@@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.property.domain.vo.TbRoomVo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;

View File

@@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.property.domain.bo.CleanOrderRecordBo; import org.dromara.property.domain.bo.CleanOrderRecordBo;
import org.dromara.property.domain.vo.TbRoomVo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -69,7 +70,11 @@ public class CleanOrderController extends BaseController {
@PathVariable("id") Long id) { @PathVariable("id") Long id) {
return R.ok(cleanOrderService.queryById(id)); return R.ok(cleanOrderService.queryById(id));
} }
@GetMapping("/residentUnitId/{residentUnitId}")
public R<List<TbRoomVo>> getRoomList(@NotNull(message = "主键不能为空")
@PathVariable("residentUnitId") Long residentUnitId) {
return R.ok(cleanOrderService.getRoomList(residentUnitId));
}
/** /**
* 新增保洁订单 * 新增保洁订单
*/ */

View File

@@ -43,9 +43,14 @@ public class Clean extends TenantEntity {
private String cleanContent; private String cleanContent;
/** /**
* 保洁面积 * 房间id
*/ */
private Double area; private String roomId;
/**
* 房间id
*/
@TableField(exist = false)
private String roomText;
/** /**
* 计算方式 * 计算方式

View File

@@ -39,6 +39,14 @@ public class CostHouseCharge extends TenantEntity {
* 面积 * 面积
*/ */
private Float area; private Float area;
/**
* 订单id
*/
private Long orderId;
/**
* 类型
*/
private String type;
/** /**
* 业主 * 业主
*/ */

View File

@@ -58,9 +58,9 @@ public class CostItems extends TenantEntity {
private Integer chargeCycle; private Integer chargeCycle;
/** /**
* 是否手机缴费 * 缴费方式(1微信、2支付宝、3银联、4现金)
*/ */
private String isMobilePay; private String paymentMode;
/** /**
* 进位方式 * 进位方式

View File

@@ -1,5 +1,8 @@
package org.dromara.property.domain; package org.dromara.property.domain;
import jakarta.validation.constraints.NotBlank;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
@@ -35,7 +38,10 @@ public class PlantsOrderCharge extends BaseEntity {
* 订单id * 订单id
*/ */
private Long orderId; private Long orderId;
/**
* 入驻单位id
*/
private Long residentUnitId;
/** /**
* 租赁人id系统用户 * 租赁人id系统用户
*/ */

View File

@@ -40,6 +40,10 @@ public class PlantsRentalOrder extends BaseEntity {
* 客户名称 * 客户名称
*/ */
private String customerName; private String customerName;
/**
* 入驻单位id
*/
private Long residentUnitId;
/** /**
* 客户类型 * 客户类型

View File

@@ -45,10 +45,11 @@ public class CostHouseChargeBo extends BaseEntity {
/** /**
* 业主 * 业主
*/ */
@NotNull(message = "业主不能为空", groups = { AddGroup.class, EditGroup.class }) //@NotNull(message = "业主不能为空", groups = { AddGroup.class, EditGroup.class })
private Long personId; private Long personId;
private String costType;
private String type;
/** /**
* 收费项目 * 收费项目
*/ */

View File

@@ -67,9 +67,10 @@ public class CostItemsBo extends BaseEntity {
private Integer chargeCycle; private Integer chargeCycle;
/** /**
* 是否手机缴费 * 缴费方式(1微信、2支付宝、3银联、4现金)
*/ */
private String isMobilePay; //@NotBlank(message = "缴费方式不能为空", groups = { AddGroup.class, EditGroup.class })
private String paymentMode;
/** /**
* 进位方式 * 进位方式
@@ -91,7 +92,7 @@ public class CostItemsBo extends BaseEntity {
/** /**
* 计算公式 * 计算公式
*/ */
@NotBlank(message = "计算公式不能", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "计算公式不能为空", groups = { AddGroup.class, EditGroup.class })
private String formula; private String formula;
/** /**

View File

@@ -36,11 +36,15 @@ public class PlantsOrderChargeBo extends BaseEntity {
*/ */
@NotNull(message = "订单id不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "订单id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long orderId; private Long orderId;
/**
* 入驻单位id
*/
// @NotNull(message = "入驻单位不能为空", groups = { AddGroup.class, EditGroup.class })
private Long residentUnitId;
/** /**
* 租赁人id系统用户 * 租赁人id系统用户
*/ */
@NotNull(message = "租赁人id系统用户不能为空", groups = { AddGroup.class, EditGroup.class }) //@NotNull(message = "租赁人id系统用户不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId; private Long userId;
/** /**

View File

@@ -45,7 +45,11 @@ public class PlantsRentalOrderBo extends BaseEntity {
*/ */
@NotBlank(message = "客户名称不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "客户名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String customerName; private String customerName;
/**
* 入驻单位id
*/
// @NotNull(message = "入驻单位不能为空", groups = { AddGroup.class, EditGroup.class })
private Long residentUnitId;
/** /**
* 客户类型 * 客户类型
*/ */

View File

@@ -46,10 +46,10 @@ public class CleanBo extends BaseEntity {
@NotBlank(message = "计量单位不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "计量单位不能为空", groups = { AddGroup.class, EditGroup.class })
private String measure; private String measure;
// /** /**
// * 保洁面积 * 房间id
// */ */
// private Long area; private String roomId;
/** /**
* 保洁内容 * 保洁内容
*/ */

View File

@@ -0,0 +1,40 @@
package org.dromara.property.domain.enums;
public enum FeeTypeEnum {
PROPERTY_MANAGEMENT_FEE("0", "物业管理费"),
MEETING_ROOM_USAGE_FEE("1", "会议室使用费"),
PARKING_FEE("2", "停车费"),
GREEN_PLANT_RENTAL_FEE("3", "绿植租赁费"),
CLEANING_SERVICE_FEE("4", "保洁服务费"),
WATER_FEE("5", "水费"),
ELECTRICITY_FEE("6", "电费"),
RENT("7", "租金"),
GAS_FEE("8", "气费"),
DEPOSIT("9", "押金");
private String code;
private String description;
FeeTypeEnum(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
// 根据 code 获取对应的枚举
public static FeeTypeEnum fromCode(String code) {
for (FeeTypeEnum feeType : FeeTypeEnum.values()) {
if (feeType.getCode().equals(code)) {
return feeType;
}
}
throw new IllegalArgumentException("Invalid FeeType code: " + code);
}
}

View File

@@ -42,7 +42,14 @@ public class CostHouseChargeDetailVo implements Serializable {
* 入驻文本 * 入驻文本
*/ */
private String residentUnitText; private String residentUnitText;
/**
* 订单id
*/
private Long orderId;
/**
* 类型
*/
private String type;
/** /**
* 面积 * 面积
*/ */

View File

@@ -37,10 +37,20 @@ public class CostHouseChargeVo implements Serializable {
/** /**
* 主键 * 主键
*/ */
@ExcelProperty(value = "主键") // @ExcelProperty(value = "主键")
private Long id; private Long id;
/**
* 费用类型
*/
private String costType;
/**
* 订单id
*/
private Long orderId;
/**
* 类型
*/
private String type;
/** /**
* 入驻单位 * 入驻单位
*/ */
@@ -65,13 +75,19 @@ public class CostHouseChargeVo implements Serializable {
/** /**
* 收费项目 * 收费项目
*/ */
@ExcelProperty(value = "收费项目")
private Long costItemsId; private Long costItemsId;
/**
* 收费项目Text
*/
@ExcelProperty(value = "收费项目")
private String chargeItemText;
/** /**
* 支付方式 * 支付方式
*/ */
@ExcelProperty(value = "支付方式") @ExcelProperty(value = "支付方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "wy_zffs")
private String payType; private String payType;
/** /**
@@ -116,7 +132,7 @@ public class CostHouseChargeVo implements Serializable {
/** /**
* 搜索值 * 搜索值
*/ */
@ExcelProperty(value = "搜索值") // @ExcelProperty(value = "搜索值")
private String searchValue; private String searchValue;

View File

@@ -71,10 +71,9 @@ public class CostItemsVo implements Serializable {
private Integer chargeCycle; private Integer chargeCycle;
/** /**
* 是否手机缴费 * 缴费方式(1微信、2支付宝、3银联、4现金)
*/ */
@ExcelProperty(value = "是否手机缴费") private String paymentMode;
private String isMobilePay;
/** /**
* 进位方式 * 进位方式

View File

@@ -6,6 +6,9 @@ import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.property.domain.PlantsOrderCharge; import org.dromara.property.domain.PlantsOrderCharge;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
@@ -50,9 +53,17 @@ public class PlantsOrderChargeVo implements Serializable {
* 租赁人id系统用户 * 租赁人id系统用户
*/ */
@ExcelProperty(value = "租赁人id", converter = ExcelDictConvert.class) @ExcelProperty(value = "租赁人id", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "=统用户") @ExcelDictFormat(readConverterExp = "系统用户")
private Long userId; private Long userId;
/**
* 入驻单位id
*/
private Long residentUnitId;
/**
* 入驻单位
*/
@ExcelProperty(value = "入驻单位")
private String residentUnitText;
/** /**
* 租赁人名称 * 租赁人名称
*/ */

View File

@@ -49,6 +49,15 @@ public class PlantsRentalOrderVo implements Serializable {
*/ */
@ExcelProperty(value = "客户名称") @ExcelProperty(value = "客户名称")
private String customerName; private String customerName;
/**
* 入驻单位id
*/
private Long residentUnitId;
/**
* 入驻单位text
*/
@ExcelProperty(value = "入驻单位")
private String residentUnitText;
/** /**
* 客户类型 * 客户类型

View File

@@ -43,10 +43,10 @@ public class CleanVo implements Serializable {
@ExcelProperty(value = "计量单位") @ExcelProperty(value = "计量单位")
private String measure; private String measure;
// /** /**
// * 保洁面积 * 房间id
// */ */
// private Long area; private String roomId;
/** /**
* 计算方式 * 计算方式

View File

@@ -95,6 +95,10 @@ public class ResidentUnitVo implements Serializable {
* 建筑面积(房间建筑面积和,平方千米) * 建筑面积(房间建筑面积和,平方千米)
*/ */
private Float area; private Float area;
/**
* 房间数
*/
private Integer roomNumber;
/** /**
* 备注 * 备注

View File

@@ -75,4 +75,6 @@ public interface ICostHouseChargeService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Boolean addFee(CostHouseChargeBo bo);
} }

View File

@@ -107,5 +107,9 @@ public interface IPlantsRentalOrderService {
*/ */
Map<String,Integer> countCustomers(); Map<String,Integer> countCustomers();
/**
* 查询未生成收费的订单
* @return
*/
List<PlantsRentalOrderVo> notSelectList();
} }

View File

@@ -1,6 +1,8 @@
package org.dromara.property.service.cleanOrderService; package org.dromara.property.service.cleanOrderService;
import jakarta.validation.constraints.NotNull;
import org.dromara.property.domain.bo.CleanOrderRecordBo; import org.dromara.property.domain.bo.CleanOrderRecordBo;
import org.dromara.property.domain.vo.TbRoomVo;
import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo; import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo;
import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo; import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -73,4 +75,5 @@ public interface ICleanOrderService {
* @return * @return
*/ */
int assign(CleanOrderBo bo); int assign(CleanOrderBo bo);
List<TbRoomVo> getRoomList(@NotNull(message = "主键不能为空") Long residentUnitId);
} }

View File

@@ -1,5 +1,7 @@
package org.dromara.property.service.cleanOrderService; package org.dromara.property.service.cleanOrderService;
import jakarta.validation.constraints.NotNull;
import org.dromara.property.domain.vo.TbRoomVo;
import org.dromara.property.domain.vo.cleanOrderVo.CleanVo; import org.dromara.property.domain.vo.cleanOrderVo.CleanVo;
import org.dromara.property.domain.bo.cleanOrderBo.CleanBo; import org.dromara.property.domain.bo.cleanOrderBo.CleanBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +67,6 @@ public interface ICleanService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
} }

View File

@@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.*; import org.dromara.property.domain.*;
import org.dromara.property.domain.bo.CostChargeReturnFeeBo; import org.dromara.property.domain.bo.CostChargeReturnFeeBo;
import org.dromara.property.domain.bo.CostItemsBo;
import org.dromara.property.domain.entity.resident.ResidentPerson; import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.domain.enums.ChargeStatusEnum; import org.dromara.property.domain.enums.ChargeStatusEnum;
import org.dromara.property.domain.vo.*; import org.dromara.property.domain.vo.*;
@@ -31,9 +32,11 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors;
/** /**
* 房屋收费Service业务层处理 * 房屋收费Service业务层处理
@@ -89,15 +92,26 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
LambdaQueryWrapper<CostHouseCharge> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<CostHouseCharge> lqw = buildQueryWrapper(bo);
List<ResidentPerson> residentPeoplelist = residentPersonMapper.selectList(); List<ResidentPerson> residentPeoplelist = residentPersonMapper.selectList();
Page<CostHouseChargeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<CostHouseChargeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().stream().forEach(s -> { if (CollUtil.isNotEmpty(result.getRecords())) {
if (CollUtil.isNotEmpty(residentPeoplelist)) { List<Long> itemIdList = result.getRecords().stream().map(vo -> vo.getCostItemsId()).distinct().collect(Collectors.toList());
ResidentPerson residentPerson = residentPeoplelist.stream() List<CostItemsVo> itemsVos = costItemsMapper.selectVoByIds(itemIdList).stream().collect(Collectors.toList());
.filter(vo -> vo.getId() != null && vo.getId().equals(s.getPersonId())).findFirst().orElse(null); result.getRecords().stream().forEach(s -> {
s.setPersonName(ObjectUtil.isNotEmpty(residentPerson) ? residentPerson.getUserName() : null); if (CollUtil.isNotEmpty(residentPeoplelist)) {
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(s.getResidentUnitId()); ResidentPerson residentPerson = residentPeoplelist.stream()
s.setResidentUnitText(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null); .filter(vo -> vo.getId() != null && vo.getId().equals(s.getPersonId())).findFirst().orElse(null);
} s.setPersonName(ObjectUtil.isNotEmpty(residentPerson) ? residentPerson.getUserName() : null);
}); ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(s.getResidentUnitId());
s.setResidentUnitText(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null);
// 收费符合项目
itemsVos.stream().forEach(vo -> {
if (vo.getId().equals(s.getCostItemsId())) {
s.setChargeItemText(vo.getChargeItem());
s.setCostType(vo.getCostType());
}
});
}
});
}
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -110,16 +124,41 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
@Override @Override
public List<CostHouseChargeVo> queryList(CostHouseChargeBo bo) { public List<CostHouseChargeVo> queryList(CostHouseChargeBo bo) {
LambdaQueryWrapper<CostHouseCharge> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<CostHouseCharge> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw); List<CostHouseChargeVo> costHouseChargeVos = baseMapper.selectVoList(lqw);
if (CollUtil.isNotEmpty(costHouseChargeVos)) {
List<Long> itemIdList = costHouseChargeVos.stream().map(vo -> vo.getCostItemsId()).distinct().collect(Collectors.toList());
Map<Long, String> itemMap = costItemsMapper.selectVoByIds(itemIdList).stream().collect(Collectors.toMap(CostItemsVo::getId, CostItemsVo::getChargeItem));
costHouseChargeVos.stream().forEach(s -> {
ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(s.getPersonId());
s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null);
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(s.getResidentUnitId());
s.setResidentUnitText(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null);
s.setChargeItemText(itemMap.get(s.getCostItemsId()));
});
}
return costHouseChargeVos;
} }
private LambdaQueryWrapper<CostHouseCharge> buildQueryWrapper(CostHouseChargeBo bo) { private LambdaQueryWrapper<CostHouseCharge> buildQueryWrapper(CostHouseChargeBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
//查询费用 项目
LambdaQueryWrapper<CostHouseCharge> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<CostHouseCharge> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(CostHouseCharge::getCreateTime) lqw.orderByDesc(CostHouseCharge::getCreateTime)
.orderByDesc(CostHouseCharge::getUpdateTime); .orderByDesc(CostHouseCharge::getUpdateTime);
List<Long> itemIdList = new ArrayList<>();
if(ObjectUtil.isNotEmpty(bo.getCostType())){
List<CostItemsVo> costItemsVos = costItemsMapper.selectVoList(
new LambdaQueryWrapper<CostItems>()
.eq(CostItems::getCostType, bo.getCostType())
);
//收集项目id
itemIdList = costItemsVos.stream().map(vo -> vo.getId()).distinct().collect(Collectors.toList());
}
lqw.in(CollUtil.isNotEmpty(itemIdList), CostHouseCharge::getCostItemsId, itemIdList );
lqw.eq(bo.getResidentUnitId() != null, CostHouseCharge::getResidentUnitId, bo.getResidentUnitId()); lqw.eq(bo.getResidentUnitId() != null, CostHouseCharge::getResidentUnitId, bo.getResidentUnitId());
lqw.eq(bo.getCostItemsId() != null, CostHouseCharge::getCostItemsId, bo.getCostItemsId()); lqw.eq(bo.getCostItemsId() != null, CostHouseCharge::getCostItemsId, bo.getCostItemsId());
lqw.eq(bo.getType()!= null, CostHouseCharge::getType, bo.getType());
lqw.eq(StringUtils.isNotBlank(bo.getChargeCycle()), CostHouseCharge::getChargeCycle, bo.getChargeCycle()); lqw.eq(StringUtils.isNotBlank(bo.getChargeCycle()), CostHouseCharge::getChargeCycle, bo.getChargeCycle());
lqw.eq(bo.getAmountReceivable() != null, CostHouseCharge::getAmountReceivable, bo.getAmountReceivable()); lqw.eq(bo.getAmountReceivable() != null, CostHouseCharge::getAmountReceivable, bo.getAmountReceivable());
lqw.eq(bo.getStartTime() != null, CostHouseCharge::getStartTime, bo.getStartTime()); lqw.eq(bo.getStartTime() != null, CostHouseCharge::getStartTime, bo.getStartTime());
@@ -214,7 +253,8 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
public Boolean updateByBo(CostHouseChargeBo bo) { public Boolean updateByBo(CostHouseChargeBo bo) {
CostHouseCharge update = MapstructUtils.convert(bo, CostHouseCharge.class); CostHouseCharge update = MapstructUtils.convert(bo, CostHouseCharge.class);
validEntityBeforeSave(update); validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0; boolean flag = baseMapper.updateById(update) > 0;
return flag;
} }
/** /**
@@ -239,4 +279,26 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addFee(CostHouseChargeBo bo) {
CostHouseCharge update = MapstructUtils.convert(bo, CostHouseCharge.class);
validEntityBeforeSave(update);
boolean flag = baseMapper.updateById(update) > 0;
if (flag) {
CostItemsVo costItemsVo = costItemsMapper.selectVoById(bo.getCostItemsId());
//新增缴费记录
var CostPayFeeAudit = new CostPayFeeAudit()
.setChargeId(bo.getId())
.setChargeType("1")
.setItemId(costItemsVo.getId())
.setStartTime(bo.getStartTime())
.setEndTime(bo.getEndTime())
.setReceivableAmount(bo.getAmountReceivable())
.setState("0");
return costPayFeeAuditMapper.insert(CostPayFeeAudit)>0;
}
return flag;
}
} }

View File

@@ -84,7 +84,7 @@ public class CostItemsServiceImpl implements ICostItemsService {
lqw.eq(StringUtils.isNotBlank(bo.getCostMark()), CostItems::getCostMark, bo.getCostMark()); lqw.eq(StringUtils.isNotBlank(bo.getCostMark()), CostItems::getCostMark, bo.getCostMark());
lqw.eq(StringUtils.isNotBlank(bo.getPaymentType()), CostItems::getPaymentType, bo.getPaymentType()); lqw.eq(StringUtils.isNotBlank(bo.getPaymentType()), CostItems::getPaymentType, bo.getPaymentType());
lqw.eq(bo.getChargeCycle() != null, CostItems::getChargeCycle, bo.getChargeCycle()); lqw.eq(bo.getChargeCycle() != null, CostItems::getChargeCycle, bo.getChargeCycle());
lqw.eq(StringUtils.isNotBlank(bo.getIsMobilePay()), CostItems::getIsMobilePay, bo.getIsMobilePay()); lqw.eq(StringUtils.isNotBlank(bo.getPaymentMode()), CostItems::getPaymentMode, bo.getPaymentMode());
lqw.eq(StringUtils.isNotBlank(bo.getRoundingMode()), CostItems::getRoundingMode, bo.getRoundingMode()); lqw.eq(StringUtils.isNotBlank(bo.getRoundingMode()), CostItems::getRoundingMode, bo.getRoundingMode());
lqw.eq(StringUtils.isNotBlank(bo.getCurrencyDecimals()), CostItems::getCurrencyDecimals, bo.getCurrencyDecimals()); lqw.eq(StringUtils.isNotBlank(bo.getCurrencyDecimals()), CostItems::getCurrencyDecimals, bo.getCurrencyDecimals());
lqw.eq(StringUtils.isNotBlank(bo.getState()), CostItems::getState, bo.getState()); lqw.eq(StringUtils.isNotBlank(bo.getState()), CostItems::getState, bo.getState());

View File

@@ -14,10 +14,10 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.property.domain.Meet; import org.dromara.property.domain.*;
import org.dromara.property.domain.MeetAttachOrder;
import org.dromara.property.domain.MeetBooking;
import org.dromara.property.domain.bo.MeetBookingBo; import org.dromara.property.domain.bo.MeetBookingBo;
import org.dromara.property.domain.enums.ChargeStatusEnum;
import org.dromara.property.domain.enums.FeeTypeEnum;
import org.dromara.property.domain.vo.*; import org.dromara.property.domain.vo.*;
import org.dromara.property.domain.vo.BigScreen.TodayMeetCountVo; import org.dromara.property.domain.vo.BigScreen.TodayMeetCountVo;
import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
@@ -53,6 +53,7 @@ public class MeetBookingServiceImpl implements IMeetBookingService {
private final TbRoomMapper roomMapper; private final TbRoomMapper roomMapper;
private final MeetMapper meetMapper; private final MeetMapper meetMapper;
private final ResidentUnitMapper residentUnitMapper; private final ResidentUnitMapper residentUnitMapper;
private final CostHouseChargeMapper costHouseChargeMapper;
@DubboReference @DubboReference
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@@ -279,9 +280,40 @@ public class MeetBookingServiceImpl implements IMeetBookingService {
public Boolean updateByBo(MeetBookingBo bo) { public Boolean updateByBo(MeetBookingBo bo) {
MeetBooking update = MapstructUtils.convert(bo, MeetBooking.class); MeetBooking update = MapstructUtils.convert(bo, MeetBooking.class);
validEntityBeforeSave(update); validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0; boolean flag = baseMapper.updateById(update) > 0;
} if(flag){
if(bo.getState().equals(2)){
// 检查是否已存在关联的收费记录
boolean exists = costHouseChargeMapper.selectCount(
new LambdaQueryWrapper<CostHouseCharge>()
.eq(CostHouseCharge::getOrderId, bo.getId())
) > 0;
if (!exists) {
handleAddPay(update);
}
}
}
return flag;
}
/**
* 处理新增缴费
*/
private void handleAddPay(MeetBooking meetBooking) {
CostHouseCharge costHouseCharge = new CostHouseCharge();
costHouseCharge.setOrderId(meetBooking.getId());
costHouseCharge.setResidentUnitId(Long.valueOf(meetBooking.getUnit()));
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(Long.valueOf(meetBooking.getUnit()));
costHouseCharge.setArea(ObjectUtil.isNotEmpty(residentUnitVo)?residentUnitVo.getArea():null);
costHouseCharge.setType(FeeTypeEnum.MEETING_ROOM_USAGE_FEE.getCode());
costHouseCharge.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue());
costHouseCharge.setAmountReceivable(meetBooking.getPrice());
costHouseCharge.setStartTime(meetBooking.getScheduledStarttime());
costHouseCharge.setEndTime(meetBooking.getScheduledEndtime());
costHouseCharge.setRemark("会议室预约订单");
costHouseChargeMapper.insert(costHouseCharge);
}
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */

View File

@@ -1,5 +1,7 @@
package org.dromara.property.service.impl; package org.dromara.property.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
@@ -10,9 +12,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.CostHouseCharge;
import org.dromara.property.domain.Meet; import org.dromara.property.domain.Meet;
import org.dromara.property.domain.PlantsOrderMaintain; import org.dromara.property.domain.PlantsOrderMaintain;
import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo;
import org.dromara.property.domain.enums.ChargeStatusEnum;
import org.dromara.property.domain.enums.FeeTypeEnum;
import org.dromara.property.domain.vo.PlantsRentalOrderVo; import org.dromara.property.domain.vo.PlantsRentalOrderVo;
import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
import org.dromara.property.mapper.CostHouseChargeMapper;
import org.dromara.property.mapper.ResidentUnitMapper;
import org.dromara.property.service.IPlantsRentalOrderService; import org.dromara.property.service.IPlantsRentalOrderService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.PlantsOrderChargeBo; import org.dromara.property.domain.bo.PlantsOrderChargeBo;
@@ -21,6 +30,7 @@ import org.dromara.property.domain.PlantsOrderCharge;
import org.dromara.property.mapper.PlantsOrderChargeMapper; import org.dromara.property.mapper.PlantsOrderChargeMapper;
import org.dromara.property.service.IPlantsOrderChargeService; import org.dromara.property.service.IPlantsOrderChargeService;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
@@ -37,7 +47,8 @@ import java.util.Collection;
public class PlantsOrderChargeServiceImpl implements IPlantsOrderChargeService { public class PlantsOrderChargeServiceImpl implements IPlantsOrderChargeService {
private final PlantsOrderChargeMapper baseMapper; private final PlantsOrderChargeMapper baseMapper;
private final ResidentUnitMapper residentUnitMapper;
private final CostHouseChargeMapper costHouseChargeMapper;
private final IPlantsRentalOrderService plantsRentalOrderService; private final IPlantsRentalOrderService plantsRentalOrderService;
/** /**
* 查询绿植租赁-订单收费 * 查询绿植租赁-订单收费
@@ -52,6 +63,11 @@ public class PlantsOrderChargeServiceImpl implements IPlantsOrderChargeService {
PlantsRentalOrderVo orderVo = plantsRentalOrderService.queryById(orderChargeVo.getOrderId()); PlantsRentalOrderVo orderVo = plantsRentalOrderService.queryById(orderChargeVo.getOrderId());
orderChargeVo.setRentalOrder(orderVo); orderChargeVo.setRentalOrder(orderVo);
} }
//查询入驻单位名称
if(ObjectUtil.isNotEmpty(orderChargeVo.getResidentUnitId())){
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(orderChargeVo.getResidentUnitId());
orderChargeVo.setResidentUnitText(ObjectUtil.isNotEmpty(residentUnitVo)?residentUnitVo.getName() : null);
}
return orderChargeVo; return orderChargeVo;
} }
@@ -118,10 +134,37 @@ public class PlantsOrderChargeServiceImpl implements IPlantsOrderChargeService {
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
// 检查是否已存在关联的收费记录
boolean exists = costHouseChargeMapper.selectCount(
new LambdaQueryWrapper<CostHouseCharge>()
.eq(CostHouseCharge::getOrderId, bo.getId())
) > 0;
if (!exists) {
handleAddPay(add);
}
} }
return flag; return flag;
} }
/**
* 处理新增缴费
*/
private void handleAddPay(PlantsOrderCharge plantsOrderCharge) {
CostHouseCharge costHouseCharge = new CostHouseCharge();
costHouseCharge.setOrderId(plantsOrderCharge.getId());
costHouseCharge.setResidentUnitId(plantsOrderCharge.getResidentUnitId());
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(plantsOrderCharge.getResidentUnitId());
costHouseCharge.setArea(ObjectUtil.isNotEmpty(residentUnitVo)?residentUnitVo.getArea():null);
costHouseCharge.setType(FeeTypeEnum.GREEN_PLANT_RENTAL_FEE.getCode());
costHouseCharge.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue());
costHouseCharge.setAmountReceivable(plantsOrderCharge.getTotalAmount());
//查询订单详情
PlantsRentalOrderVo orderVo = plantsRentalOrderService.queryById(plantsOrderCharge.getOrderId());
costHouseCharge.setStartTime(orderVo.getStartTime());
costHouseCharge.setEndTime(orderVo.getEndTime());
costHouseCharge.setRemark("绿植订单");
costHouseChargeMapper.insert(costHouseCharge);
}
/** /**
* 修改绿植租赁-订单收费 * 修改绿植租赁-订单收费
* *

View File

@@ -1,6 +1,9 @@
package org.dromara.property.service.impl; package org.dromara.property.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
@@ -15,6 +18,9 @@ import org.dromara.property.domain.bo.PlantsOrderChargeBo;
import org.dromara.property.domain.bo.PlantsOrderMaintainBo; import org.dromara.property.domain.bo.PlantsOrderMaintainBo;
import org.dromara.property.domain.bo.PlantsProductBo; import org.dromara.property.domain.bo.PlantsProductBo;
import org.dromara.property.domain.vo.*; import org.dromara.property.domain.vo.*;
import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
import org.dromara.property.mapper.PlantsOrderChargeMapper;
import org.dromara.property.mapper.ResidentUnitMapper;
import org.dromara.property.service.*; import org.dromara.property.service.*;
import org.dromara.system.api.RemoteDictService; import org.dromara.system.api.RemoteDictService;
import org.dromara.system.api.domain.vo.RemoteDictDataVo; import org.dromara.system.api.domain.vo.RemoteDictDataVo;
@@ -27,6 +33,7 @@ import org.dromara.property.mapper.PlantsRentalOrderMapper;
import java.time.YearMonth; import java.time.YearMonth;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 绿植租赁-订单管理Service业务层处理 * 绿植租赁-订单管理Service业务层处理
@@ -35,24 +42,27 @@ import java.util.*;
* @date 2025-06-30 * @date 2025-06-30
*/ */
@Slf4j @Slf4j
@RequiredArgsConstructor
@Service @Service
public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService { public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
@Autowired @Autowired
private PlantsRentalOrderMapper baseMapper; private PlantsRentalOrderMapper baseMapper;
@Autowired @Autowired
private RemoteDictService dictService; private RemoteDictService dictService;
@Autowired @Autowired
private IPlantsProductService productService; private IPlantsProductService productService;
@Autowired @Autowired
@Lazy @Lazy
private IPlantsPlanProductService planProductService; private IPlantsPlanProductService planProductService;
@Autowired @Autowired
@Lazy @Lazy
private IPlantsOrderMaintainService maintainService; private IPlantsOrderMaintainService maintainService;
@Autowired @Autowired
@Lazy @Lazy
private IPlantsOrderChargeService chargeService; private IPlantsOrderChargeService chargeService;
private final ResidentUnitMapper residentUnitMapper;
private final PlantsOrderChargeMapper plantsOrderChargeMapper;
/** /**
* 查询绿植租赁-订单管理 * 查询绿植租赁-订单管理
@@ -64,11 +74,11 @@ public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
public PlantsRentalOrderVo queryById(Long id) { public PlantsRentalOrderVo queryById(Long id) {
PlantsRentalOrderVo orderVo = baseMapper.selectVoById(id); PlantsRentalOrderVo orderVo = baseMapper.selectVoById(id);
ArrayList<PlantsProductVo> list = new ArrayList<>(); ArrayList<PlantsProductVo> list = new ArrayList<>();
if("1".equals(orderVo.getRentalType())){ if ("1".equals(orderVo.getRentalType())) {
PlantsProductVo productVo = productService.queryById(orderVo.getProductId()); PlantsProductVo productVo = productService.queryById(orderVo.getProductId());
productVo.setPlanProNumber(orderVo.getProductNum()); productVo.setPlanProNumber(orderVo.getProductNum());
list.add(productVo); list.add(productVo);
}else { } else {
List<PlantsPlanProductVo> planProductVos = planProductService.queryPlanProductsInfo(orderVo.getPlanId()); List<PlantsPlanProductVo> planProductVos = planProductService.queryPlanProductsInfo(orderVo.getPlanId());
for (PlantsPlanProductVo planProductVo : planProductVos) { for (PlantsPlanProductVo planProductVo : planProductVos) {
PlantsProductVo product = planProductVo.getProduct(); PlantsProductVo product = planProductVo.getProduct();
@@ -76,6 +86,12 @@ public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
list.add(product); list.add(product);
} }
} }
//查询入驻单位名称
if (ObjectUtil.isNotEmpty(orderVo.getResidentUnitId())) {
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(orderVo.getResidentUnitId());
orderVo.setResidentUnitText(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null);
}
orderVo.setProductList(list); orderVo.setProductList(list);
return orderVo; return orderVo;
} }
@@ -126,8 +142,8 @@ public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
lqw.eq(bo.getIsRelet() != null, PlantsRentalOrder::getIsRelet, bo.getIsRelet()); lqw.eq(bo.getIsRelet() != null, PlantsRentalOrder::getIsRelet, bo.getIsRelet());
lqw.eq(bo.getContractStatus() != null, PlantsRentalOrder::getContractStatus, bo.getContractStatus()); lqw.eq(bo.getContractStatus() != null, PlantsRentalOrder::getContractStatus, bo.getContractStatus());
lqw.eq(bo.getSignTime() != null, PlantsRentalOrder::getSignTime, bo.getSignTime()); lqw.eq(bo.getSignTime() != null, PlantsRentalOrder::getSignTime, bo.getSignTime());
lqw.in(CollectionUtils.isNotEmpty(bo.getProductIds()),PlantsRentalOrder::getProductId,bo.getProductIds()); lqw.in(CollectionUtils.isNotEmpty(bo.getProductIds()), PlantsRentalOrder::getProductId, bo.getProductIds());
lqw.in(CollectionUtils.isNotEmpty(bo.getPlanIds()),PlantsRentalOrder::getPlanId,bo.getPlanIds()); lqw.in(CollectionUtils.isNotEmpty(bo.getPlanIds()), PlantsRentalOrder::getPlanId, bo.getPlanIds());
return lqw; return lqw;
} }
@@ -168,19 +184,19 @@ public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
private void validEntityBeforeSave(PlantsRentalOrderBo bo) { private void validEntityBeforeSave(PlantsRentalOrderBo bo) {
//租赁方式 1单点 2套餐 //租赁方式 1单点 2套餐
if ("1".equals(bo.getRentalType())) { if ("1".equals(bo.getRentalType())) {
if (bo.getProductId() != null&&bo.getProductNum()!=null) { if (bo.getProductId() != null && bo.getProductNum() != null) {
ArrayList<PlantsProductBo> products = new ArrayList<>(); ArrayList<PlantsProductBo> products = new ArrayList<>();
PlantsProductBo plantsProduct = new PlantsProductBo(bo.getProductId(),bo.getProductNum()); PlantsProductBo plantsProduct = new PlantsProductBo(bo.getProductId(), bo.getProductNum());
products.add(plantsProduct); products.add(plantsProduct);
productService.deductStock(products); productService.deductStock(products);
}else { } else {
throw new ServiceException("租赁产品不能为空"); throw new ServiceException("租赁产品不能为空");
} }
} else { } else {
List<PlantsProductBo> productList = bo.getProductList(); List<PlantsProductBo> productList = bo.getProductList();
if(CollectionUtils.isNotEmpty(productList)){ if (CollectionUtils.isNotEmpty(productList)) {
productService.deductStock(productList); productService.deductStock(productList);
}else { } else {
throw new ServiceException("租赁套餐不能为空"); throw new ServiceException("租赁套餐不能为空");
} }
} }
@@ -204,28 +220,28 @@ public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
PlantsOrderMaintainBo maintainBo = new PlantsOrderMaintainBo(); PlantsOrderMaintainBo maintainBo = new PlantsOrderMaintainBo();
maintainBo.setOrderIds(ids.stream().toList()); maintainBo.setOrderIds(ids.stream().toList());
List<PlantsOrderMaintainVo> maintainList = maintainService.queryList(maintainBo); List<PlantsOrderMaintainVo> maintainList = maintainService.queryList(maintainBo);
if(CollectionUtils.isNotEmpty(maintainList)||CollectionUtils.isNotEmpty(chargeList)){ if (CollectionUtils.isNotEmpty(maintainList) || CollectionUtils.isNotEmpty(chargeList)) {
throw new ServiceException("所选订单不可删除"); throw new ServiceException("所选订单不可删除");
}else { } else {
//恢复产品库存 //恢复产品库存
ArrayList<PlantsProductBo> productList = new ArrayList<>(); ArrayList<PlantsProductBo> productList = new ArrayList<>();
for (Long id : ids) { for (Long id : ids) {
PlantsRentalOrder order = baseMapper.selectById(id); PlantsRentalOrder order = baseMapper.selectById(id);
if("1".equals(order.getRentalType())){ if ("1".equals(order.getRentalType())) {
Long productId = order.getProductId(); Long productId = order.getProductId();
Integer productNum = order.getProductNum(); Integer productNum = order.getProductNum();
productList.add(new PlantsProductBo(productId,productNum)); productList.add(new PlantsProductBo(productId, productNum));
}else { } else {
Long planId = order.getPlanId(); Long planId = order.getPlanId();
List<PlantsPlanProductVo> planProductVos = planProductService.queryPlanProductsInfo(planId); List<PlantsPlanProductVo> planProductVos = planProductService.queryPlanProductsInfo(planId);
for (PlantsPlanProductVo planProductVo : planProductVos) { for (PlantsPlanProductVo planProductVo : planProductVos) {
productList.add(new PlantsProductBo(planProductVo.getProductId(),planProductVo.getProductNum())); productList.add(new PlantsProductBo(planProductVo.getProductId(), planProductVo.getProductNum()));
} }
} }
} }
if(CollectionUtils.isNotEmpty(productList)){ if (CollectionUtils.isNotEmpty(productList)) {
Boolean b = productService.addStock(productList); Boolean b = productService.addStock(productList);
if(!b){ if (!b) {
throw new ServiceException("删除订单失败。"); throw new ServiceException("删除订单失败。");
} }
} }
@@ -404,13 +420,29 @@ public class PlantsRentalOrderServiceImpl implements IPlantsRentalOrderService {
/** /**
* 统计下单客户总数 * 统计下单客户总数
*
* @return * @return
*/ */
@Override @Override
public Map<String, Integer> countCustomers() { public Map<String, Integer> countCustomers() {
Integer count= baseMapper.countDistinctCustomerName(); Integer count = baseMapper.countDistinctCustomerName();
Map<String, Integer> map = new HashMap<>(); Map<String, Integer> map = new HashMap<>();
map.put("count",count); map.put("count", count);
return map; return map;
} }
/**
* 查询未生成收费的订单
*
* @return
*/
@Override
public List<PlantsRentalOrderVo> notSelectList() {
//返回idLIst
List<Long> orderIdList = plantsOrderChargeMapper.selectVoList().stream().map(vo -> vo.getOrderId()).distinct().collect(Collectors.toList());
LambdaQueryWrapper<PlantsRentalOrder> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
objectLambdaQueryWrapper.notIn(CollUtil.isNotEmpty(orderIdList),PlantsRentalOrder::getId, orderIdList);
List<PlantsRentalOrderVo> notSelectList = baseMapper.selectVoList(objectLambdaQueryWrapper);
return notSelectList;
}
} }

View File

@@ -2,6 +2,8 @@ package org.dromara.property.service.impl.cleanOrderImpl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -14,30 +16,31 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.property.domain.*; import org.dromara.property.domain.*;
import org.dromara.property.domain.bo.CleanOrderRecordBo;
import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo; import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo;
import org.dromara.property.domain.enums.WorkOrderStatusEnum; import org.dromara.property.domain.enums.ChargeStatusEnum;
import org.dromara.property.domain.vo.CleanOrderRecordVo; import org.dromara.property.domain.enums.FeeTypeEnum;
import org.dromara.property.domain.vo.TbRoomVo;
import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo; import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo;
import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
import org.dromara.property.mapper.CleanOrderRecordMapper; import org.dromara.property.mapper.CleanOrderRecordMapper;
import org.dromara.property.mapper.CostHouseChargeMapper;
import org.dromara.property.mapper.ResidentUnitMapper;
import org.dromara.property.mapper.TbRoomMapper; import org.dromara.property.mapper.TbRoomMapper;
import org.dromara.property.mapper.cleanOrderMapper.CleanMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanMapper;
import org.dromara.property.mapper.cleanOrderMapper.CleanOrderMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanOrderMapper;
import org.dromara.property.mapper.cleanOrderMapper.CleanRelationMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanRelationMapper;
import org.dromara.property.mapper.cleanOrderMapper.CleanserverOrderMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanserverOrderMapper;
import org.dromara.property.service.ITbRoomService;
import org.dromara.property.service.cleanOrderService.ICleanOrderService; import org.dromara.property.service.cleanOrderService.ICleanOrderService;
import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Collection; import java.math.BigDecimal;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.springframework.beans.BeanUtils.copyProperties; import static org.springframework.beans.BeanUtils.copyProperties;
@@ -57,9 +60,11 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
private final CleanserverOrderMapper cleanserverOrderMapper; private final CleanserverOrderMapper cleanserverOrderMapper;
private final CleanMapper cleanMapper; private final CleanMapper cleanMapper;
private final ResidentUnitMapper residentUnitMapper;
private final CleanRelationMapper cleanRelationMapper; private final CleanRelationMapper cleanRelationMapper;
private final CostHouseChargeMapper costHouseChargeMapper;
private final TbRoomMapper roomMapper; private final TbRoomMapper roomMapper;
private final ITbRoomService roomService;
@DubboReference @DubboReference
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@@ -82,7 +87,21 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
// 根据cleanserver_order表中的所有记录取出所有的cleanId查询出clean表中的所有记录 // 根据cleanserver_order表中的所有记录取出所有的cleanId查询出clean表中的所有记录
List<Long> cleanIds = cleanserverOrderList.stream().map(CleanserverOrder::getCleanServerId).collect(Collectors.toList()); List<Long> cleanIds = cleanserverOrderList.stream().map(CleanserverOrder::getCleanServerId).collect(Collectors.toList());
List<Clean> cleanList = cleanMapper.selectByIds(cleanIds); List<Clean> cleanList = cleanMapper.selectByIds(cleanIds);
if(CollUtil.isNotEmpty(cleanList)){
cleanList.stream().forEach(item -> {
if(ObjectUtil.isNotEmpty(item.getRoomId())){
//分隔id得到房间idlist
List<Long> roomIdList = Convert.toList(Long.class, item.getRoomId());
//换成名称
List<String> roomNames = roomService.queryRoomNameList(roomIdList);
// 元素用,拼接成字符串
if(CollUtil.isNotEmpty(roomNames)){
String locationDetail = String.join("", roomNames);
item.setRoomText(locationDetail);
}
}
});
}
//根据cleanserverOrderList中的所有记录取出所有的id封装到list集合中 //根据cleanserverOrderList中的所有记录取出所有的id封装到list集合中
List<Long> cleanserverOrderIds = cleanserverOrderList.stream().map(CleanserverOrder::getId).collect(Collectors.toList()); List<Long> cleanserverOrderIds = cleanserverOrderList.stream().map(CleanserverOrder::getId).collect(Collectors.toList());
//将查询出的cleanserverOrderIds与clean_relation比较查出clean_relation表中的所有记录 //将查询出的cleanserverOrderIds与clean_relation比较查出clean_relation表中的所有记录
@@ -113,11 +132,11 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
// Page<CleanOrderVo> result = baseMapper.selectForPage(pageQuery.build(), lqw); // Page<CleanOrderVo> result = baseMapper.selectForPage(pageQuery.build(), lqw);
//List<Long> locationIdList = result.getRecords().stream().map(CleanOrderVo::getLocation).collect(Collectors.toList()); //List<Long> locationIdList = result.getRecords().stream().map(CleanOrderVo::getLocation).collect(Collectors.toList());
// Map<Long, String> longStringMap = roomMapper.queryRoomName(item.getLocation()); // Map<Long, String> longStringMap = roomMapper.queryRoomName(item.getLocation());
//找出符合条件的房间名称 //找出符合条件的房间名称
result.getRecords().forEach(item -> { result.getRecords().forEach(item -> {
String localName = roomMapper.queryRoomName(item.getLocation()); String localName = roomMapper.queryRoomName(item.getLocation());
item.setLocationName(localName != null ? localName : "未知房间"); item.setLocationName(localName != null ? localName : "未知房间");
}); });
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -133,7 +152,7 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
} }
private LambdaQueryWrapper<CleanOrder>buildQueryWrapper(CleanOrderBo bo) { private LambdaQueryWrapper<CleanOrder> buildQueryWrapper(CleanOrderBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<CleanOrder> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<CleanOrder> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(CleanOrder::getCreateTime) lqw.orderByDesc(CleanOrder::getCreateTime)
@@ -154,8 +173,6 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
lqw.eq(StringUtils.isNotBlank(bo.getPersion()), CleanOrder::getPersion, bo.getPersion()); lqw.eq(StringUtils.isNotBlank(bo.getPersion()), CleanOrder::getPersion, bo.getPersion());
lqw.eq(StringUtils.isNotBlank(bo.getPhone()), CleanOrder::getPhone, bo.getPhone()); lqw.eq(StringUtils.isNotBlank(bo.getPhone()), CleanOrder::getPhone, bo.getPhone());
//将lqw中的所有条件都封装到一个params对象中集合中 //将lqw中的所有条件都封装到一个params对象中集合中
return lqw; return lqw;
} }
@@ -172,13 +189,15 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
// CleanOrder add = MapstructUtils.convert(bo, CleanOrder.class); // CleanOrder add = MapstructUtils.convert(bo, CleanOrder.class);
CleanOrder add = new CleanOrder(); CleanOrder add = new CleanOrder();
copyProperties(bo, add); copyProperties(bo, add);
add.setStarTime(bo.getStarTime()); add.setStarTime(bo.getStarTime());
add.setEndTime(bo.getEndTime()); add.setEndTime(bo.getEndTime());
add.setIsUnbooking(NOTUNBOOKING); add.setIsUnbooking(NOTUNBOOKING);
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag){ if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
// validEntityBeforeSave(bo); List<Clean> cleans = BeanUtil.copyToList(bo.getCleanList(), Clean.class);
cleanMapper.updateBatchById(cleans);
} }
//取出clean_order表中的所有clean数据 //取出clean_order表中的所有clean数据
@@ -208,8 +227,8 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
CleanRelation cleanRelation = new CleanRelation(); CleanRelation cleanRelation = new CleanRelation();
cleanRelation.setCleanserverOrderId(cleanserverOrderIds.get(i)); cleanRelation.setCleanserverOrderId(cleanserverOrderIds.get(i));
cleanRelation.setCleanId(clean.getId()); cleanRelation.setCleanId(clean.getId());
cleanRelation.setAreas(clean.getArea()); // cleanRelation.setAreas(clean.getArea());
cleanRelation.setSumPrice(clean.getPeices() * clean.getArea()); cleanRelation.setSumPrice(bo.getSumPeices());
cleanRelationMapper.insert(cleanRelation); cleanRelationMapper.insert(cleanRelation);
i++; i++;
} }
@@ -227,16 +246,49 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(CleanOrderBo bo) { public Boolean updateByBo(CleanOrderBo bo) {
CleanOrder update = MapstructUtils.convert(bo, CleanOrder.class); CleanOrder update = MapstructUtils.convert(bo, CleanOrder.class);
// validEntityBeforeSave(update); // validEntityBeforeSave(update);
update.setStarTime(bo.getStarTime()); update.setStarTime(bo.getStarTime());
update.setEndTime(bo.getStarTime()); update.setEndTime(bo.getStarTime());
return baseMapper.updateById(update) > 0; boolean flag = baseMapper.updateById(update) > 0;
if (flag) {
if (bo.getState().equals(1)) {
// 检查是否已存在关联的收费记录
boolean exists = costHouseChargeMapper.selectCount(
new LambdaQueryWrapper<CostHouseCharge>()
.eq(CostHouseCharge::getOrderId, update.getId())
) > 0;
if (!exists) {
handleAddPay(bo);
}
}
}
return flag;
}
/**
* 处理新增缴费
*/
private void handleAddPay(CleanOrderBo bo) {
CostHouseCharge costHouseCharge = new CostHouseCharge();
costHouseCharge.setOrderId(bo.getId());
costHouseCharge.setResidentUnitId(bo.getUnitId());
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(bo.getUnitId());
costHouseCharge.setArea(residentUnitVo.getArea());
costHouseCharge.setType(FeeTypeEnum.CLEANING_SERVICE_FEE.getCode());
costHouseCharge.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue());
costHouseCharge.setAmountReceivable(new BigDecimal(bo.getSumPeices()));
costHouseCharge.setStartTime(DateUtil.parse(bo.getStarTime()));
costHouseCharge.setEndTime(DateUtil.parse(bo.getEndTime()));
costHouseCharge.setRemark("保洁订单");
costHouseChargeMapper.insert(costHouseCharge);
} }
/** /**
* 保存后的数据校验 * 保存后的数据校验
*/ */
private void validEntityBeforeSave(CleanOrderBo bo) {} private void validEntityBeforeSave(CleanOrderBo bo) {
}
/** /**
* 校验并批量删除保洁订单信息 * 校验并批量删除保洁订单信息
@@ -253,16 +305,33 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
//todo:应该删除中间表中的数据 //todo:应该删除中间表中的数据
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
/** /**
* 指派保洁订单 * 指派保洁订单
*
* @param bo * @param bo
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int assign(CleanOrderBo bo) { public int assign(CleanOrderBo bo) {
CleanOrderRecord cleanOrderRecord= BeanUtil.copyProperties(bo.getCleanOrderRecord(), CleanOrderRecord.class); CleanOrderRecord cleanOrderRecord = BeanUtil.copyProperties(bo.getCleanOrderRecord(), CleanOrderRecord.class);
cleanOrderRecord.setStatus("2"); cleanOrderRecord.setStatus("2");
return cleanOrderRecordMapper.insert(cleanOrderRecord); return cleanOrderRecordMapper.insert(cleanOrderRecord);
} }
@Override
public List<TbRoomVo> getRoomList(Long residentUnitId) {
ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(residentUnitId);
//转成Long集合
List<Long> locationList= Arrays.stream(residentUnitVo.getLocation().split(","))
.map(String::trim) // 去除空格
.filter(StringUtils::isNotBlank) // 过滤空字符串
.map(Long::valueOf) // 转换为Long
.toList();
residentUnitVo.getLocation().split(",");
return roomMapper.selectVoList(
Wrappers.<TbRoom>lambdaQuery()
.in(TbRoom::getId, locationList)
);
}
} }

View File

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.vo.TbRoomVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.cleanOrderBo.CleanBo; import org.dromara.property.domain.bo.cleanOrderBo.CleanBo;
import org.dromara.property.domain.vo.cleanOrderVo.CleanVo; import org.dromara.property.domain.vo.cleanOrderVo.CleanVo;
@@ -135,4 +136,6 @@ public class CleanServiceImpl implements ICleanService {
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
} }

View File

@@ -78,6 +78,11 @@ public class ResidentUnitServiceImpl implements IResidentUnitService {
Long num = personService.queryPersonCount(residentUnitVo.getId()); Long num = personService.queryPersonCount(residentUnitVo.getId());
residentUnitVo.setNumber(num); residentUnitVo.setNumber(num);
} }
List<Long> idList = Arrays.stream(residentUnitVo.getLocation().split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
List<TbRoomVo> tbRoomVos = roomMapper.selectVoByIds(idList);
residentUnitVo.setRoomNumber(tbRoomVos.size());
return residentUnitVo; return residentUnitVo;
} }
@@ -92,6 +97,15 @@ public class ResidentUnitServiceImpl implements IResidentUnitService {
public TableDataInfo<ResidentUnitVo> queryPageList(ResidentUnitBo bo, PageQuery pageQuery) { public TableDataInfo<ResidentUnitVo> queryPageList(ResidentUnitBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ResidentUnit> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<ResidentUnit> lqw = buildQueryWrapper(bo);
Page<ResidentUnitVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<ResidentUnitVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
if(CollUtil.isNotEmpty(result.getRecords())){
result.getRecords().stream().forEach(s -> {
List<Long> idList = Arrays.stream(s.getLocation().split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
List<TbRoomVo> tbRoomVos = roomMapper.selectVoByIds(idList);
s.setRoomNumber(tbRoomVos.size());
});
}
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }