linwei
2024-01-24 c0e32b4907e8ac9cae56b77e4f83fefdc8cc5ad3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package org.springblade.modules.property.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import liquibase.pro.packaged.I;
import org.apache.commons.lang3.StringUtils;
import org.flowable.idm.engine.impl.persistence.entity.UserEntity;
import org.springblade.common.utils.SpringUtils;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.modules.property.entity.PropertyCompanyDistrictEntity;
import org.springblade.modules.property.entity.PropertyCompanyEntity;
import org.springblade.modules.property.entity.PropertyDistrictUserEntity;
import org.springblade.modules.property.mapper.PropertyCompanyDistrictMapper;
import org.springblade.modules.property.service.IPropertyCompanyDistrictService;
import org.springblade.modules.property.service.IPropertyCompanyService;
import org.springblade.modules.property.service.IPropertyDistrictUserService;
import org.springblade.modules.property.vo.PropertyCompanyDistrictVO;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 物业派驻小区表 服务实现类
 *
 * @author BladeX
 * @since 2023-11-23
 */
@Service
public class PropertyCompanyDistrictServiceImpl extends ServiceImpl<PropertyCompanyDistrictMapper, PropertyCompanyDistrictEntity> implements IPropertyCompanyDistrictService {
 
    @Autowired
    private IPropertyDistrictUserService propertyDistrictUserService;
 
    /**
     * 自定义分页查询
     *
     * @param page
     * @param propertyCompanyDistrict
     * @return
     */
    @Override
    public IPage<PropertyCompanyDistrictVO> selectPropertyCompanyDistrictPage(IPage<PropertyCompanyDistrictVO> page, PropertyCompanyDistrictVO propertyCompanyDistrict) {
        // 物业 查询用户管理的小区
        String userRole = AuthUtil.getUserRole();
        if (userRole.contains("wygly") || userRole.contains("wyxmjl")) {
            // 查询小区id
            IPropertyDistrictUserService propertyDistrictUserService = SpringUtils.getBean(IPropertyDistrictUserService.class);
            List<String> districtIds = propertyDistrictUserService.selectPropertyDistrictByUserId(AuthUtil.getUserId());
            // 通过用户机构查询用户的物业公司
            IPropertyCompanyService bean = SpringUtil.getBean(IPropertyCompanyService.class);
            PropertyCompanyEntity one = bean.getOne(Wrappers.<PropertyCompanyEntity>lambdaQuery().eq(PropertyCompanyEntity::getDeptId, AuthUtil.getDeptId()));
            IPropertyCompanyDistrictService bean2 = SpringUtils.getBean(IPropertyCompanyDistrictService.class);
            // 通过物业公司,查询小区
            List<PropertyCompanyDistrictEntity> list = bean2.list(Wrappers.<PropertyCompanyDistrictEntity>lambdaQuery()
                .eq(PropertyCompanyDistrictEntity::getPropertyCompanyId, one.getId()));
            if (list.size() > 0) {
                List<String> collect = list.stream().map(i -> i.getDistrictId()).collect(Collectors.toList());
                districtIds.addAll(collect);
            }
            propertyCompanyDistrict.setDistrictIds(districtIds);
            if (districtIds.size() == 0) {
                return page.setRecords(new ArrayList<>());
            }
        }
        // 街道
 
        return page.setRecords(baseMapper.selectPropertyCompanyDistrictPage(page, propertyCompanyDistrict));
    }
 
    /**
     * 物业派驻小区表 自定义新增或修改
     *
     * @param propertyCompanyDistrict
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean saveOrUpdatePropertyCompanyDistrict(PropertyCompanyDistrictEntity propertyCompanyDistrict) throws Exception {
        // IUserService bean = SpringUtil.getBean(IUserService.class);
        // User user = bean.getOne(Wrappers.<User>lambdaQuery().eq(User::getId, propertyCompanyDistrict.getPrincipal()));
        // if (StringUtils.isNotBlank(user.getRoleId())) {
        //     if (!user.getRoleId().contains("1747504028253229058")) {
        //         user.setRoleId(user.getRoleId() + ",1747504028253229058");
        //     }
        // } else {
        //     user.setRoleId("1747504028253229058");
        // }
        if (null != propertyCompanyDistrict.getId()) {
            // bean.updateById(user);
            return updateById(propertyCompanyDistrict) && submitPropertyDistrictUser(propertyCompanyDistrict);
        } else {
            long count = count(Wrappers.<PropertyCompanyDistrictEntity>lambdaQuery()
                .eq(PropertyCompanyDistrictEntity::getDistrictId, propertyCompanyDistrict.getDistrictId())
                .eq(PropertyCompanyDistrictEntity::getPropertyCompanyId, propertyCompanyDistrict.getPropertyCompanyId())
                .eq(PropertyCompanyDistrictEntity::getIsDeleted, 0));
            if (count > 0) {
                throw new Exception("您已有该小区的合同,请勿重复添加!");
            }
            // bean.updateById(user);
            return save(propertyCompanyDistrict) && submitPropertyDistrictUser(propertyCompanyDistrict);
        }
    }
 
    /**
     * 关联关系维护
     *
     * @param propertyCompanyDistrict
     * @return
     */
    private boolean submitPropertyDistrictUser(PropertyCompanyDistrictEntity propertyCompanyDistrict) {
        List<Long> userIdList = Func.toLongList(propertyCompanyDistrict.getUserId());
        List<Long> arrayList = new ArrayList<Long>(userIdList);
        // 把项目经理也加到物业用户关联表
        arrayList.add(Long.valueOf(propertyCompanyDistrict.getPrincipal()));
        List<PropertyDistrictUserEntity> propertyDistrictUserEntityList = new ArrayList<>();
        arrayList.forEach(userId -> {
            PropertyDistrictUserEntity propertyDistrictUserEntity = new PropertyDistrictUserEntity();
            propertyDistrictUserEntity.setUserId(userId);
            propertyDistrictUserEntity.setPropertyCompanyDistrictId(propertyCompanyDistrict.getId());
            propertyDistrictUserEntityList.add(propertyDistrictUserEntity);
        });
        // 先删除
        propertyDistrictUserService.remove(Wrappers.<PropertyDistrictUserEntity>update().lambda().eq(PropertyDistrictUserEntity::getPropertyCompanyDistrictId, propertyCompanyDistrict.getId()));
        // 再新增
        return propertyDistrictUserService.saveBatch(propertyDistrictUserEntityList);
    }
 
    @Override
    public List<UserEntity> getDistictUserByCode(String houseCode) {
        return baseMapper.getDistictUserByCode(houseCode);
    }
}