803033cc4e734ac9eb3062f215b654b4ae9d02c4..d492850f1cc64ddcfaf43798af9c76c2505414fd
2025-01-24 renkang
Merge remote-tracking branch 'origin/2.0.1' into 2.0.1
d49285 对比 | 目录
2025-01-24 renkang
客户资料 巡检任务业务
d3767d 对比 | 目录
已添加3个文件
已修改56个文件
1724 ■■■■ 文件已修改
server/system_service/pom.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundRecordCloudController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwCallTempDataDTO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwContractBillDTO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java 230 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java 249 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/pom.xml
@@ -311,7 +311,59 @@
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- å¤„理word文件 -->
            <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls</artifactId>
                <version>2.6.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls-poi</artifactId>
                <version>1.2.0</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.core</artifactId>
                <version>2.0.2</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.document</artifactId>
                <version>2.0.2</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.template</artifactId>
                <version>2.0.2</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
                <version>2.0.2</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
                <version>2.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.23</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.5</version>
            </dependency>
       <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -63,6 +63,7 @@
    public static final String YW_CONTRACT_BILL ="YW_CONTRACT_BILL" ;
    public static final String YW_MATERIAL ="YW_MATERIAL" ;
    public static final String YW_PROBLEM ="YW_PROBLEM" ;
    public static final String YW_QUICK_MODEL ="YW_QUICK_MODEL" ;
    public static final String RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
    public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
@@ -74,8 +74,8 @@
    @ExcelColumn(name="邮箱")
    private String email;
    @ApiModelProperty(value = "状态 0未使用 1已使用 2等待发送")
    @ExcelColumn(name="状态 0未使用 1已使用 2等待发送")
    @ApiModelProperty(value = "状态 0=成功;1=失败")
    @ExcelColumn(name="状态 0=成功;1=失败")
    private Integer status;
    @ApiModelProperty(value = "类型 0短信 1邮件")
@@ -86,8 +86,8 @@
    @ExcelColumn(name="关联对象编码")
    private Integer objId;
    @ApiModelProperty(value = "关联对象类型 0=验证码;1=访客业务;2=访客报备;3=隐患随手拍;4=用车申请;5=会议室信息;6=物流车预约;7=物流车作业")
    @ExcelColumn(name="关联对象类型 0=验证码;1=访客业务;2=访客报备;3=隐患随手拍;4=用车申请;5=会议室信息;6=物流车预约;7=物流车作业;8=会议室申请")
    @ApiModelProperty(value = "关联对象类型 0=验证码;1=催费短信;2=催费邮件")
    @ExcelColumn(name="关联对象类型 0=验证码;1=催费短信;2=催费邮件")
    private String objType;
    @ApiModelProperty(value = "附件集合")
server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
@@ -71,7 +71,7 @@
    @ExcelColumn(name="关联对象编码")
    private Integer objId;
    @ApiModelProperty(value = "关联对象类型 0=盘点业务 1=巡检任务")
    @ApiModelProperty(value = "关联对象类型 0=盘点业务 1=巡检任务 2=工单业务")
    @ExcelColumn(name="关联对象类型")
    private Integer objType;
@@ -87,16 +87,15 @@
    @TableField(exist = false)
    private String typeDetail;
    @ApiModelProperty(value = "关联参数1" ,notes = "关联参数1")
    @ApiModelProperty(value = "待办日期" ,notes = "关联参数1")
    @ExcelColumn(name="关联参数1")
    private String param1;
    @ApiModelProperty(value = "关联参数2",notes = "关联参数2")
    @ApiModelProperty(value = "jsonH5展示数据",notes = "关联参数2")
    @ExcelColumn(name="关联参数2")
    private String param2;
    @ApiModelProperty(value = "关联参数3",notes = "关联参数3")
    @ExcelColumn(name="关联参数3")
    @ApiModelProperty(value = "业务状态:0=待处理/未开始;1=进行中;2=已完成/已处理",notes = "关联参数3")
    private String param3;
    @ApiModelProperty(value = "关联参数4")
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -230,7 +230,7 @@
            throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN);
        }
        if(isDebug == null  || !isDebug){
        /*if(isDebug == null  || !isDebug){
            //验证 çŸ­ä¿¡ç 
            SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
                    .eq(SmsEmail::getType, Constants.ZERO)
@@ -254,7 +254,7 @@
            model.setStatus(Constants.ONE);
            model.setEditDate(new Date());
            smsEmailMapper.updateById(model);
        }
        }*/
        Company company = new Company();
        if(Objects.nonNull(user.getCompanyId())){
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
@@ -9,10 +9,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dto.YwSmsEmailBillCallDTO;
import com.doumee.dao.business.model.YwContractBill;
import com.doumee.dao.business.vo.YwContractBillCallDataVO;
import com.doumee.dao.business.vo.YwContractBillDataVO;
import com.doumee.service.business.YwContractBillService;
import com.doumee.service.business.impl.SmsEmailServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +35,9 @@
    @Autowired
    private YwContractBillService ywContractBillService;
    @Autowired
    private SmsEmailServiceImpl smsEmailService;
    @PreventRepeat
    @ApiOperation("新建")
@@ -139,4 +144,23 @@
        return ApiResponse.success(ywContractBillService.getNoticeCustomerData(billIds));
    }
    @ApiOperation("下载催费文件")
    @PostMapping("/downloadCallFeeDoc")
    @CloudRequiredPermission("business:ywcontractbill:query")
    public void downloadCallFeeDoc(@RequestBody List<Integer> billIds,@RequestHeader(Constants.HEADER_USER_TOKEN) String token,HttpServletResponse response) {
        ywContractBillService.downloadCallFeeDoc(billIds,getLoginUser(token),response);
    }
    @ApiOperation("发送短信与邮件")
    @PostMapping("/sendSmsEmail")
    @CloudRequiredPermission("business:ywcontractbill:query")
    public ApiResponse sendSmsEmail(@RequestBody List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywContractBillService.sendSmsEmail(ywSmsEmailBillCallDTOList,smsEmailService,getLoginUser(token));
        return ApiResponse.success(null);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
@@ -9,6 +9,7 @@
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwDevice;
import com.doumee.dao.business.vo.YwDeviceCateDataVO;
import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
import com.doumee.service.business.YwDeviceService;
import io.swagger.annotations.Api;
@@ -106,7 +107,7 @@
    @ApiOperation("设备数量分类统计")
    @PostMapping("/getDeviceCateData")
    @CloudRequiredPermission("business:ywdevice:query")
    public ApiResponse<Set<YwDeviceCateDataVO>> getDeviceCateData (@RequestBody YwDevice ywDevice,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
    public ApiResponse<Set<YwDeviceParentCateDataVO>> getDeviceCateData (@RequestBody YwDevice ywDevice, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywDeviceService.getDeviceCateData(ywDevice));
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundRecordCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.doumee.cloud.admin;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwOutinboundRecord;
import com.doumee.service.business.YwOutinboundRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 14:28
 */
@Api(tags = "运维出入库信息明细表")
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywOutinboundRecord")
public class YwOutinboundRecordCloudController extends BaseController {
    @Autowired
    private YwOutinboundRecordService ywOutinboundRecordService;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @CloudRequiredPermission("business:ywoutinboundrecord:create")
    public ApiResponse create(@RequestBody YwOutinboundRecord ywOutinboundRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywOutinboundRecordService.create(ywOutinboundRecord));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:ywoutinboundrecord:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywOutinboundRecordService.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @CloudRequiredPermission("business:ywoutinboundrecord:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        ywOutinboundRecordService.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:ywoutinboundrecord:update")
    public ApiResponse updateById(@RequestBody YwOutinboundRecord ywOutinboundRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywOutinboundRecordService.updateById(ywOutinboundRecord);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:ywoutinboundrecord:query")
    public ApiResponse<PageData<YwOutinboundRecord>> findPage (@RequestBody PageWrap<YwOutinboundRecord> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywOutinboundRecordService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywoutinboundrecord:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwOutinboundRecord> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(YwOutinboundRecord.class).export(ywOutinboundRecordService.findPage(pageWrap).getRecords(), "运维出入库信息明细表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywoutinboundrecord:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywOutinboundRecordService.findById(id));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java
@@ -2,6 +2,7 @@
import com.doumee.api.BaseController;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
@@ -102,11 +103,15 @@
    @ApiOperation("扫码获取巡检点任务信息")
    @PostMapping("/getPointRecordByCode")
    @CloudRequiredPermission("business:ywpatroltaskrecord:update")
    public ApiResponse<YwPatrolTaskRecord> getPointRecordByCode(@RequestBody YwPatrolTaskRecord ywPatrolTaskRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success("查询成功",ywPatrolTaskRecordService.getPointRecordByCode(ywPatrolTaskRecord));
    }
    @ApiOperation("扫码获取巡检点任务信息")
    @PostMapping("/getRecordByUserPoint")
    public ApiResponse<YwPatrolTaskRecord> getRecordByUserPoint(@RequestBody YwPatrolTaskRecord ywPatrolTaskRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success("查询成功",ywPatrolTaskRecordService.getRecordByUserPoint(ywPatrolTaskRecord,getLoginUser(token)));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
@@ -37,6 +37,7 @@
    @Autowired
    private YwWorkorderServiceImpl ywWorkorderService;
    @LoginNoRequired
    @PreventRepeat
    @ApiOperation("问题提报")
@@ -48,7 +49,7 @@
    @ApiOperation("根据ID修改")
    @ApiOperation("转工单")
    @PostMapping("/editProblem")
    @CloudRequiredPermission("business:ywproblem:update")
    public ApiResponse editProblem(@RequestBody YwProblem ywProblem,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
@@ -105,6 +106,16 @@
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywproblem:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywProblemService.getDetail(id));
        return ApiResponse.success(ywProblemService.getDetail(id,null));
    }
    @ApiOperation("根据工单查询")
    @GetMapping("/getByWorkorderId")
    @CloudRequiredPermission("business:ywproblem:query")
    public ApiResponse getByWorkorderId(@RequestParam Integer workorderId,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywProblemService.getDetail(null,workorderId));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java
@@ -95,8 +95,6 @@
        return ApiResponse.success(ywProjectService.projectTree(dataDTO));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywproject:exportExcel")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
@@ -36,14 +36,14 @@
    @ApiOperation("新建")
    @PostMapping("/create")
    @CloudRequiredPermission("business:ywstock:create")
    public ApiResponse create(@RequestBody YwStock ywStock) {
    public ApiResponse create(@RequestBody YwStock ywStock,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywStockService.create(ywStock));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:ywstock:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywStockService.deleteById(id);
        return ApiResponse.success(null);
    }
@@ -51,7 +51,7 @@
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @CloudRequiredPermission("business:ywstock:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
@@ -64,7 +64,7 @@
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:ywstock:update")
    public ApiResponse updateById(@RequestBody YwStock ywStock) {
    public ApiResponse updateById(@RequestBody YwStock ywStock,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywStockService.updateById(ywStock);
        return ApiResponse.success(null);
    }
@@ -72,21 +72,21 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:ywstock:query")
    public ApiResponse<PageData<YwStock>> findPage (@RequestBody PageWrap<YwStock> pageWrap) {
    public ApiResponse<PageData<YwStock>> findPage (@RequestBody PageWrap<YwStock> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywStockService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywstock:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwStock> pageWrap, HttpServletResponse response) {
    public void exportExcel (@RequestBody PageWrap<YwStock> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(YwStock.class).export(ywStockService.findPage(pageWrap).getRecords(), "运维库存信息表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywstock:query")
    public ApiResponse findById(@PathVariable Integer id) {
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywStockService.findById(id));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java
@@ -8,8 +8,11 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwOutinbound;
import com.doumee.dao.business.model.YwStocktaking;
import com.doumee.service.business.YwOutinboundService;
import com.doumee.service.business.YwStocktakingService;
import com.doumee.service.business.impl.YwOutinboundServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;    
@@ -31,6 +34,9 @@
    @Autowired
    private YwStocktakingService ywStocktakingService;
    @Autowired
    private YwOutinboundServiceImpl ywOutinboundService;
    @PreventRepeat
    @ApiOperation("新建")
@@ -87,7 +93,7 @@
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywstocktaking:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
    public ApiResponse<YwStocktaking> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywStocktakingService.getDetail(id));
    }
@@ -115,7 +121,7 @@
    @GetMapping("/finishById")
    @CloudRequiredPermission("business:ywstocktaking:delete")
    public ApiResponse finishById(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywStocktakingService.finishById(id,getLoginUser(token));
        ywStocktakingService.finishById(id,ywOutinboundService,getLoginUser(token));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java
@@ -1,18 +1,19 @@
package com.doumee.cloud.admin;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dto.YwCallTempDataDTO;
import com.doumee.dao.business.model.YwTempConfig;
import com.doumee.dao.business.vo.YwCallTempDataVO;
import com.doumee.service.business.YwTempConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -35,23 +36,23 @@
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:ywtempconfig:create")
    public ApiResponse create(@RequestBody YwTempConfig ywTempConfig) {
    @CloudRequiredPermission("business:ywtempconfig:create")
    public ApiResponse create(@RequestBody YwTempConfig ywTempConfig,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywTempConfigService.create(ywTempConfig));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:ywtempconfig:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
    @CloudRequiredPermission("business:ywtempconfig:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywTempConfigService.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:ywtempconfig:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
    @CloudRequiredPermission("business:ywtempconfig:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
@@ -63,41 +64,49 @@
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @RequiresPermissions("business:ywtempconfig:update")
    public ApiResponse updateById(@RequestBody YwTempConfig ywTempConfig) {
    @CloudRequiredPermission("business:ywtempconfig:update")
    public ApiResponse updateById(@RequestBody YwTempConfig ywTempConfig,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywTempConfigService.updateById(ywTempConfig);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:ywtempconfig:query")
    public ApiResponse<PageData<YwTempConfig>> findPage (@RequestBody PageWrap<YwTempConfig> pageWrap) {
    @CloudRequiredPermission("business:ywtempconfig:query")
    public ApiResponse<PageData<YwTempConfig>> findPage (@RequestBody PageWrap<YwTempConfig> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywTempConfigService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:ywtempconfig:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwTempConfig> pageWrap, HttpServletResponse response) {
    @CloudRequiredPermission("business:ywtempconfig:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwTempConfig> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(YwTempConfig.class).export(ywTempConfigService.findPage(pageWrap).getRecords(), "催缴信息配置", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:ywtempconfig:query")
    public ApiResponse findById(@PathVariable Integer id) {
    @CloudRequiredPermission("business:ywtempconfig:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywTempConfigService.findById(id));
    }
    @ApiOperation("根据ID查询")
    @ApiOperation("获取配置信息")
    @GetMapping("/getCallTemp")
    @RequiresPermissions("business:ywtempconfig:query")
    public ApiResponse<YwCallTempDataVO> getCallTemp() {
    @CloudRequiredPermission("business:ywtempconfig:query")
    public ApiResponse<YwCallTempDataVO> getCallTemp(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywTempConfigService.getCallTemp());
    }
    @ApiOperation("更新配置模板信息")
    @PostMapping("/updTempConfig")
    @CloudRequiredPermission("business:ywtempconfig:update")
    public ApiResponse updTempConfig (@RequestBody YwCallTempDataDTO ywCallTempDataDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywTempConfigService.updTempConfig(ywCallTempDataDTO);
        return ApiResponse.success(null);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java
@@ -12,10 +12,12 @@
import com.doumee.dao.business.model.YwQuickModel;
import com.doumee.dao.business.vo.MonthDataResponse;
import com.doumee.dao.business.vo.WorkDeskDataResponse;
import com.doumee.dao.system.model.Notices;
import com.doumee.service.business.WorkbenchesService;
import com.doumee.service.business.YwPatrolTaskRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -41,8 +43,15 @@
        return ApiResponse.success(workbenchesService.getYwQuickList(getLoginUser(token)));
    }
    @ApiOperation("获取默认快捷菜单模块信息")
    @GetMapping("/getDefaultYwQuickList")
    public ApiResponse<List<YwQuickModel>> getDefaultYwQuickList() {
        return ApiResponse.success(workbenchesService.getYwQuickList(null));
    }
    @ApiOperation("更新快捷模块数据")
    @GetMapping("/updMyYwQuickModel")
    @PostMapping("/updMyYwQuickModel")
    public ApiResponse updMyYwQuickModel(@RequestBody List<Integer> idList,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        workbenchesService.updMyYwQuickModel(idList,getLoginUser(token));
        return ApiResponse.success("操作成功");
@@ -60,6 +69,10 @@
        return ApiResponse.success(workbenchesService.workDeskData(getLoginUser(token)));
    }
    @ApiOperation("H5-我的待办")
    @PostMapping("/myNoticesH5")
    public ApiResponse<PageData<Notices>> myNoticesH5 (@RequestBody PageWrap<Notices> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(workbenchesService.getMyNotices(pageWrap,getLoginUser(token)));
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
@@ -4,6 +4,11 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwTempConfig;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
@@ -33,7 +38,7 @@
    public static String modifyWordTemplate(String templatePath, List<YwTempConfig> ywTempConfigList,String fileName) {
    public static String modifyWordTemplate_old(String templatePath, List<YwTempConfig> ywTempConfigList,String fileName) {
        try (
             XWPFDocument document = new XWPFDocument(getFileInputStream(templatePath))) {
            // æ­¤å¤„连接到后续替换步骤
@@ -42,10 +47,15 @@
                for (XWPFRun run : paragraph.getRuns()) {
                    // æ›¿æ¢å ä½ç¬¦
                    String text = run.getText(0);
                    System.out.println(text);
                    if (text != null) {
                        for (YwTempConfig ywTempConfig:ywTempConfigList
                             ) {
                            text = text.replace(ywTempConfig.getTitle(), ywTempConfig.getUrl());
                        for (YwTempConfig ywTempConfig:ywTempConfigList) {
                            if(StringUtils.isNotBlank(ywTempConfig.getUrl())){
                                text = text.replace(ywTempConfig.getTitle(), ywTempConfig.getUrl());
                            }else{
                                text = text.replace(ywTempConfig.getTitle(), "");
                            }
                        }
                        run.setText(text, 0); // é‡æ–°è®¾ç½®æ–‡æœ¬
                    }
@@ -67,6 +77,53 @@
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"文件转换异常!");
    }
    public static String modifyWordTemplate(String templatePath, List<YwTempConfig> ywTempConfigList,String fileName,String zipFilePath) {
        InputStream ins = null;
        OutputStream out = null;
        try{
            //获取Word模板,模板存放路径在项目的resources目录下
            ins = getFileInputStream(templatePath) ;
//            ins = new FileInputStream("D:\\3.docx");
            //注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins,
                    TemplateEngineKind.Freemarker);
            //创建xdocreport上下文对象
            IContext context = report.createContext();
            for (YwTempConfig ywTempConfig:ywTempConfigList) {
                if(StringUtils.isBlank(ywTempConfig.getUrl())){
                    ywTempConfig.setUrl("-");
                }
                context.put(ywTempConfig.getTitle().replace("${","").replace("}",""), ywTempConfig.getUrl());
            }
            String path = zipFilePath + fileName;
            out = new FileOutputStream(new File(path));
            report.process(context, out);
            return path;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != ins) {
                try {
                    ins.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    /*读取网络文件*/
    public static InputStream getFileInputStream(String path) {
        URL url = null;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwCallTempDataDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.doumee.dao.business.dto;
import com.doumee.dao.business.model.YwTempConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwCallTempDataDTO {
    @ApiModelProperty(value = "短息模板", example = "1")
    private YwTempConfig smsTemp;
    @ApiModelProperty(value = "邮件信息模板", example = "1")
    private YwTempConfig emailTemp;
    @ApiModelProperty(value = "租赁通知单模板", example = "1")
    private YwTempConfig leaseTemp;
    @ApiModelProperty(value = "其他通知单模板", example = "1")
    private YwTempConfig otherTemp;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwContractBillDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.doumee.dao.business.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.business.model.YwContractBill;
import com.doumee.dao.business.model.YwContractRevenue;
import com.doumee.dao.business.model.YwContractRoom;
import com.doumee.dao.system.model.Multifile;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * è¿ç»´åˆåŒè´¦å•信息表
 * @author æ±Ÿè¹„蹄
 * @date 2024/11/19 16:07
 */
@Data
public class YwContractBillDTO {
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date startDate;
    @ApiModelProperty(value = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endDate;
    @ApiModelProperty(value = "计划付款日")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planPayDate;
    @ApiModelProperty(value = "排序码", example = "1")
    private Integer sortnum;
    @ApiModelProperty(value = "账单金额", example = "1")
    private BigDecimal totleFee;
    @ApiModelProperty(value = "费用类型:0=租赁费;1=物业费;2=租赁押金;3=物业押金;4=水电费;5=杂项费;6=其他; 7=保证金", example = "1")
    private Integer costType;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java
@@ -11,7 +11,7 @@
 * @date 2023/02/14 11:14
 */
@Data
public class YwSmsEmailBillCallDTO implements Serializable {
public class YwSmsEmailBillCallDTO{
    @ApiModelProperty(value = "接收人主键" )
    private Integer userId;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.business.dto.YwContractBillDTO;
import com.doumee.dao.system.model.Multifile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -161,6 +162,7 @@
    @ExcelColumn(name="物业租赁条款价格单位")
    private Integer wyFirstCircle;
    @ApiModelProperty(value = "租赁支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付", example = "1")
    @ExcelColumn(name="租赁支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付")
    private Integer zlPayType;
@@ -205,6 +207,9 @@
    @ApiModelProperty(value = "房间主键 æŸ¥è¯¢ä½¿ç”¨")
    @TableField(exist = false)
    private Integer roomId;
    @ApiModelProperty(value = "楼宇主键 æŸ¥è¯¢ä½¿ç”¨")
    @TableField(exist = false)
    private Integer buildingId;
    @ApiModelProperty(value = "附件集合")
    @TableField(exist = false)
    private List<Multifile> fileList;
@@ -273,7 +278,34 @@
    @ApiModelProperty(value = "退租时新增的收付款账单")
    @TableField(exist = false)
    private List<YwContractBill> addBillList;
    @ApiModelProperty(value = "租赁天数", example = "1")
    @TableField(exist = false)
    private Integer leaseDays;
    @ApiModelProperty(value = "租赁单价(元)", example = "1")
    @TableField(exist = false)
    private BigDecimal leasePrice;
    @ApiModelProperty(value = "当前支持退款修改金额的账单集合")
    @TableField(exist = false)
    private List<YwContractBill> canBackRentBills;
    @ApiModelProperty(value = "合同创建账单信息")
    @TableField(exist = false)
    private List<YwContractBillDTO> ywContractBillDTOList;
    @ApiModelProperty(value = "租赁费账单",hidden = true)
    @TableField(exist = false)
    private List<YwContractBillDTO> zlBillDTOList;
    @ApiModelProperty(value = "物业费账单",hidden = true)
    @TableField(exist = false)
    private List<YwContractBillDTO> wyBillDTOList;
    @ApiModelProperty(value = "物业押金账单",hidden = true)
    @TableField(exist = false)
    private YwContractBillDTO wyBillDTO;
    @ApiModelProperty(value = "租赁押金账单",hidden = true)
    @TableField(exist = false)
    private YwContractBillDTO zlBillDTO;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
@@ -143,6 +143,7 @@
    @ApiModelProperty(value = "退租结算金额合计", example = "1")
    @ExcelColumn(name="退租结算金额合计")
    private BigDecimal btFee;
    @ApiModelProperty(value = "客户名称(付款方)", example = "1")
    @ExcelColumn(name="客户名称",index = 0,width = 10)
    @TableField(exist = false)
@@ -156,6 +157,13 @@
    @TableField(exist = false)
    private Integer customerId;
    @ApiModelProperty(value = "是否发送邮件:0=否;1=是", example = "1")
    @TableField(exist = false)
    private Integer isSendEmail;
    @ApiModelProperty(value = "是否发送短信:0=否;1=是", example = "1")
    @TableField(exist = false)
    private Integer isSendSms;
    @ApiModelProperty(value = "公司名称", example = "1")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
@@ -124,6 +124,10 @@
    @ApiModelProperty(value = "维保说明")
    private String maintenanceContent;
    @ApiModelProperty(value = "购入日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date buyDate;
    @ApiModelProperty(value = "分类名称")
    @TableField(exist = false)
    private String categoryName;
@@ -140,6 +144,10 @@
    @TableField(exist = false)
    private String realName;
    @ApiModelProperty(value = "维保人员名称")
    @TableField(exist = false)
    private String maintenanceUserName;
    @ApiModelProperty(value = "图片地址")
    @TableField(exist = false)
    private String fileUrl;
@@ -153,6 +161,18 @@
    private List<Multifile> multifileList;
    @ApiModelProperty(value = "项目名称")
    @TableField(exist = false)
    private String projectName;
    @ApiModelProperty(value = "楼宇名称")
    @TableField(exist = false)
    private String buildingName;
    @ApiModelProperty(value = "楼层名称")
    @TableField(exist = false)
    private String floorName;
    @ApiModelProperty(value = "房间名称")
    @TableField(exist = false)
    private String roomName;
//    @ApiModelProperty(value = "附件信息")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
@@ -35,7 +35,7 @@
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
@@ -33,7 +33,7 @@
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
@@ -99,6 +99,7 @@
    @ApiModelProperty(value = "单据日期")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date doneDate;
    @ApiModelProperty(value = "一级分类名称")
@@ -117,6 +118,10 @@
    @TableField(exist = false)
    private String code;
    @ApiModelProperty(value = "类型 0采购入库 1领用退回 2调整入库 3其他入库 4盘盈入库 5领用出库 6仓库出库 7调整出库 8采购出库 9其他出库 10盘亏出库", example = "1")
    @TableField(exist = false)
    private Integer type;
    @ApiModelProperty(value = "单据日期 å¼€å§‹ yyyy-MM-dd", example = "1")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
@@ -56,7 +56,7 @@
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "状态 0启用 1禁用", example = "1")
    @ApiModelProperty(value = "状态 0启用 1禁用 ", example = "1")
    @ExcelColumn(name="状态",index = 8,width = 6,valueMapping = "0=启用;1=停用;")
    private Integer status;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
@@ -77,7 +77,6 @@
    @ApiModelProperty(value = "提报时间")
    @ExcelColumn(name="提报时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date submitDate;
    @ApiModelProperty(value = "编号")
@@ -142,6 +141,15 @@
    @TableField(exist = false)
    private Integer workOrderFloorId;
    @ApiModelProperty(value = "所属项目编码", example = "1")
    @TableField(exist = false)
    private Integer workOrderProjectId;
    @ApiModelProperty(value = "所属楼宇编码", example = "1")
    @TableField(exist = false)
    private Integer workOrderBuildId;
    @ApiModelProperty(value = "工单分类编码(关联category)", example = "1")
    @TableField(exist = false)
    private Integer workOrderCateId;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
@@ -120,4 +120,5 @@
    @TableField(exist = false)
    private String floorName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
@@ -174,6 +174,9 @@
    @ExcelColumn(name="工单分类",index = 3,width = 10)
    @TableField(exist = false)
    private String categoryName;
    @ApiModelProperty(value = "工单父级分类")
    @TableField(exist = false)
    private String categoryParentName;
    @ApiModelProperty(value = "分配人姓名")
    @TableField(exist = false)
    private String dispatchUserName;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.dao.business.model.Approve;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -25,6 +26,10 @@
    @ApiModelProperty(value = "面积")
    private BigDecimal area;
    @ApiModelProperty(value = "租赁状态:0=待租赁;1=已租赁 ;2=未开启租赁", example = "1")
    private Integer leaseStatus;
    @ApiModelProperty(value = "父级主键")
    private Integer pId;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java
@@ -24,9 +24,6 @@
    @ApiModelProperty(value = "楼层名称", example = "1")
    private String floorName;
    @ApiModelProperty(value = "楼层数", example = "1")
    private Integer floor;
    @ApiModelProperty(value = "房间状态数据", example = "1")
    private List<YwRoomStatusDataVO> ywRoomStatusDataVOList;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java
@@ -27,6 +27,9 @@
    @ApiModelProperty(value = "可招商房源数", example = "1")
    private Integer investmentRoomAmount;
    @ApiModelProperty(value = "在租每天金额", example = "1" ,hidden = true)
    private BigDecimal leaseDayPrice;
    @ApiModelProperty(value = "在租实时均价", example = "1")
    private BigDecimal leasePrice;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java
@@ -31,7 +31,7 @@
    @ApiModelProperty(value = "租客名称", example = "1")
    private String customerName;
    @ApiModelProperty(value = "房间状态:0=待租;1=已租;2=即将到期", example = "1")
    @ApiModelProperty(value = "房间状态:0=待租;1=已租;2=即将到期;", example = "1")
    private Integer roomStatus;
    @ApiModelProperty(value = "到期日期", example = "1")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java
@@ -1,9 +1,12 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwQuickModel;
import com.doumee.dao.business.vo.MonthDataResponse;
import com.doumee.dao.business.vo.WorkDeskDataResponse;
import com.doumee.dao.system.model.Notices;
import java.util.List;
@@ -23,4 +26,5 @@
    WorkDeskDataResponse workDeskData(LoginUserInfo loginUserInfo);
    PageData<Notices> getMyNotices(PageWrap<Notices> pageWrap, LoginUserInfo loginUserInfo);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
@@ -3,9 +3,11 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.YwSmsEmailBillCallDTO;
import com.doumee.dao.business.model.YwContractBill;
import com.doumee.dao.business.vo.YwContractBillCallDataVO;
import com.doumee.dao.business.vo.YwContractBillDataVO;
import com.doumee.service.business.impl.SmsEmailServiceImpl;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@@ -122,6 +124,6 @@
    void downloadCallFeeDoc(List<Integer> billIds, LoginUserInfo loginUserInfo, HttpServletResponse response);
    void sendSmsEmail(List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList, SmsEmailServiceImpl smsEmailService, LoginUserInfo loginUserInfo);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
@@ -6,6 +6,7 @@
import com.doumee.dao.business.model.YwDevice;
import com.doumee.dao.business.vo.YwDeviceCateDataVO;
import com.doumee.dao.business.vo.YwDeviceDataVO;
import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
import java.util.List;
@@ -108,7 +109,7 @@
    YwDevice findByCode(String deviceCode);
    Set<YwDeviceCateDataVO> getDeviceCateData(YwDevice model);
    Set<YwDeviceParentCateDataVO> getDeviceCateData(YwDevice model);
    YwDeviceStatusDataVO getDeviceStatus(YwDevice model);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwPatrolTaskRecord;
@@ -101,4 +102,6 @@
    YwPatrolTaskRecord getDetail(Integer id);
    YwPatrolTaskRecord getPointRecordByCode(YwPatrolTaskRecord bean);
    YwPatrolTaskRecord getRecordByUserPoint(YwPatrolTaskRecord bean, LoginUserInfo loginUserInfo);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
@@ -65,7 +65,7 @@
     */
    YwProblem findById(Integer id);
    YwProblem getDetail(Integer id);
    YwProblem getDetail(Integer id,Integer workorderId);
    /**
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java
@@ -4,6 +4,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwStocktaking;
import com.doumee.service.business.impl.YwOutinboundServiceImpl;
import java.util.List;
/**
@@ -32,7 +34,7 @@
    void beginById(Integer id, LoginUserInfo loginUserInfo);
    void finishById(Integer id, LoginUserInfo loginUserInfo);
    void finishById(Integer id, YwOutinboundServiceImpl ywOutinboundService,LoginUserInfo loginUserInfo);
    /**
     * åˆ é™¤
     *
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java
@@ -2,6 +2,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.YwCallTempDataDTO;
import com.doumee.dao.business.model.YwTempConfig;
import com.doumee.dao.business.vo.YwCallTempDataVO;
@@ -98,4 +99,6 @@
    long count(YwTempConfig ywTempConfig);
    YwCallTempDataVO getCallTemp();
    void updTempConfig(YwCallTempDataDTO ywCallTempDataDTO);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -584,21 +584,22 @@
    @Override
    public Integer sendBillSms(String content,String mobile,Integer billId) {
        boolean result = true;
        if(StringUtils.isBlank(mobile)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
            result = false;
        }
        boolean result=   emayService.sendSingleSms(mobile,content);
        if(!result){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信发送失败,请稍后重试!");
        if(result){
            result = emayService.sendSingleSms(mobile,content);
        }
        SmsEmail smsEmail = new SmsEmail();
        smsEmail.setIsdeleted(Constants.ZERO);
        smsEmail.setCreateDate(new Date());
        smsEmail.setStatus(Constants.ZERO);
        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
        smsEmail.setType(Constants.ZERO);
        smsEmail.setRemark(result?"短信发送成功":"短信发送失败");
        smsEmail.setTitle("账单催费");
        smsEmail.setObjId(billId);
        smsEmail.setObjType(Constants.ZERO+"");
        smsEmail.setObjType(Constants.ONE+"");
        smsEmail.setContent(content);
        smsEmailMapper.insert(smsEmail);
        return smsEmail.getId();
@@ -609,21 +610,21 @@
    @Override
    public Integer sendEmail(String email,String content,Integer billId) {
        boolean result = true;
        if(StringUtils.isBlank(email)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
            result = false;
        }
        boolean result=   emailService.sendEmail(email,"账单催费",content,null);
        if(result){
            result=   emailService.sendEmail(email,"账单催费",content,null);
        }
        SmsEmail smsEmail = new SmsEmail();
        smsEmail.setRemark("邮件发生成功");
        if(!result){
            smsEmail.setRemark("邮件发生失败");
        }
        smsEmail.setRemark(result?"邮件发送成功":"邮件发送失败");
        smsEmail.setIsdeleted(Constants.ZERO);
        smsEmail.setCreateDate(new Date());
        smsEmail.setStatus(Constants.ONE);
        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
        smsEmail.setType(Constants.TWO);
        smsEmail.setObjId(billId);
        smsEmail.setObjType(Constants.ONE+"");
        smsEmail.setObjType(Constants.TWO+"");
        smsEmail.setContent(content);
        smsEmailMapper.insert(smsEmail);
        return smsEmail.getId();
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java
@@ -2,12 +2,18 @@
import com.alibaba.druid.sql.visitor.functions.Concat;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.LoginUserModel;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.MonthDataResponse;
@@ -18,7 +24,6 @@
import com.doumee.service.business.WorkbenchesService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.jsonwebtoken.lang.Objects;
import io.swagger.models.auth.In;
import org.apache.tomcat.util.bcel.classfile.Constant;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +32,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -53,21 +59,32 @@
    @Autowired
    private YwStocktakingMapper ywStocktakingMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public List<YwQuickModel> getYwQuickList(LoginUserInfo loginUserInfo){
        List<YwQuickModel> ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
                .eq(YwQuickModel::getUserId,loginUserInfo.getId())
                .isNull(YwQuickModel::getUserId)
                .orderByAsc(YwQuickModel::getSort)
        );
        if(CollectionUtils.isEmpty(ywQuickModelList)){
            ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
        if(Objects.nonNull(loginUserInfo)){
            List<YwQuickModel> userModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                    .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
                    .isNull(YwQuickModel::getUserId)
                    .eq(YwQuickModel::getUserId,loginUserInfo.getId())
                    .orderByAsc(YwQuickModel::getSort)
            );
            if(CollectionUtils.isNotEmpty(userModelList)){
                ywQuickModelList = userModelList;
            }
        }
        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_QUICK_MODEL).getCode();
        for (YwQuickModel ywQuickModel:ywQuickModelList) {
            ywQuickModel.setIcoPath(path + ywQuickModel.getIcoPath());
        }
        return ywQuickModelList;
    }
@@ -80,7 +97,7 @@
                .isNull(YwQuickModel::getUserId)
                .orderByAsc(YwQuickModel::getSort)
        );
        if(CollectionUtils.isEmpty(ywQuickModelList) || Constants.equalsInteger(idList.size(),ywQuickModelList.size())){
        if(CollectionUtils.isEmpty(ywQuickModelList) ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"快捷模块配置异常,请联系管理员");
        }
        ywQuickModelMapper.delete(new QueryWrapper<YwQuickModel>().lambda().eq(YwQuickModel::getUserId,loginUserInfo.getId()));
@@ -111,6 +128,8 @@
                .eq(Notices::getUserId,loginUserInfo.getId())
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getStatus,Constants.ZERO)
                .like(Notices::getParam1,yearMonth)
                .ne(Notices::getObjType,Constants.TWO)
        );
        for (String str:dataList) {
            MonthDataResponse  monthDataResponse = new MonthDataResponse();
@@ -173,9 +192,22 @@
    @Override
    public PageData<Notices> getMyNotices(PageWrap<Notices> pageWrap,LoginUserInfo loginUserInfo) {
        IPage<Notices> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
        Notices model = pageWrap.getModel();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(Notices.class)
                .eq(Notices::getUserId,loginUserInfo.getId())
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(model)&&Objects.nonNull(model.getStatus()),Notices::getStatus,model.getStatus())
                .apply(" param1 <= CURDATE() ")
                .orderByAsc(Notices::getReaded)
                .orderByDesc(Notices::getId);
        PageData<Notices> pageData = PageData.from(noticesJoinMapper.selectJoinPage(page,Notices.class, queryWrapper));
        return pageData;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
@@ -116,7 +116,6 @@
                .selectAs(YwProject::getName,YwBuilding::getProjectName)
                .select(" (select ifnull(sum(y.FEE_AREA),0) from yw_room y where y.ISDELETED = 0 and y.status = 0 and y.IS_INVESTMENT = 1 and y.BUILDING_ID = t.id ) ",YwBuilding::getRoomFeeArea)
                .select(" (select ifnull(sum(y.RENT_AREA),0) from yw_room y where y.ISDELETED = 0 and y.status = 0 and y.IS_INVESTMENT = 1 and y.BUILDING_ID = t.id ) ",YwBuilding::getRoomRentArea)
                .select("",YwBuilding::getRoomFeeArea)
                .leftJoin(YwProject.class,YwProject::getId,YwBuilding::getProjectId)
                .eq(YwBuilding::getId,id)
                .last(" limit 1 ")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
@@ -28,6 +28,7 @@
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -66,11 +67,17 @@
    private YwContractMapper ywContractMapper;
    @Autowired
    private YwAccountMapper ywAccountMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private YwTempConfigMapper ywTempConfigMapper;
    @Value("${zip_file_path}")
    private String zipFilePath;
    @Override
    public Integer create(YwContractBill ywContractBill) {
@@ -682,12 +689,13 @@
                    .selectAs(YwContractDetail::getType,YwContractBill::getDetailType)
                    .selectAs(YwContract::getZlPayType,YwContractBill::getZlPayType)
                    .selectAs(YwContract::getWyPayType,YwContractBill::getWyPayType)
                    .select(" ( select ifnull(sum(r.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 0 and yr.type = 0 )  " , YwContractBill::getTotalArea)
                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 0 and yr.type = 0 )  " , YwContractBill::getTotalArea)
                    .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
                    .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                    .leftJoin(YwContractDetail.class,YwContractDetail::getId,YwContractBill::getDetailId)
                    .in(YwContractBill::getId,billIds)
            );
            this.dealRoomDetail(ywContractBillList);
            List<YwTempConfig> ywTempConfigList = ywTempConfigMapper.selectList(new QueryWrapper<YwTempConfig>().lambda().eq(YwTempConfig::getIsdeleted,Constants.ZERO));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywTempConfigList)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到模板配置项,请联系管理员");
@@ -700,7 +708,7 @@
            }
            List<File> fileList = new ArrayList<>();
            for (YwContractBill ywContractBill:ywContractBillList) {
                this.dealTempData(tempList,ywContractBill,loginUserInfo);
                List<YwTempConfig> dealList = this.dealTempData(tempList,ywContractBill,loginUserInfo);
                String fileName =  "催费通知单_" +ywContractBill.getCode() +"_" + System.currentTimeMillis()+".docx";
                YwTempConfig ywTempConfig = new YwTempConfig();
                if(Constants.equalsInteger(ywContractBill.getType(),Constants.ZERO)){
@@ -717,7 +725,7 @@
                if(Objects.isNull(ywTempConfig)){
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"模板信息异常,请联系管理员");
                }
                String path = ExcelReplaceCommon.modifyWordTemplate(ywTempConfig.getUrl(),tempList,fileName);
                String path = ExcelReplaceCommon.modifyWordTemplate(ywTempConfig.getUrl(),dealList,fileName,zipFilePath);
                File f = new File(path);
                if(f !=null && f.isFile()){
                    fileList.add(f);
@@ -739,9 +747,13 @@
    }
    public void dealTempData(List<YwTempConfig> ywTempConfigList , YwContractBill ywContractBill, LoginUserInfo loginUserInfo){
    public List<YwTempConfig> dealTempData(List<YwTempConfig> ywTempConfigList , YwContractBill ywContractBill, LoginUserInfo loginUserInfo){
        //查询收支账号数据
        YwAccount ywAccount = ywAccountMapper.selectOne(new QueryWrapper<YwAccount>().lambda().eq(YwAccount::getIsdeleted,Constants.ZERO).eq(YwAccount::getStatus,Constants.ZERO).eq(YwAccount::getCompanyId,ywContractBill.getCompanyId())
                        .orderByDesc(YwAccount::getId)
                .last(" limit 1 "));
        List<YwTempConfig> dealList = new ArrayList<>();
        for (YwTempConfig y:ywTempConfigList) {
            if(y.getTitle().equals("${费用名称}")&&Objects.nonNull(ywContractBill.getCostType())){
                //费用类型:0=租赁费;1=物业费;2=租赁押金;3=物业押金;4=水电费;5=杂项费;6=其他; 7=保证金
@@ -798,15 +810,15 @@
                    y.setUrl("元每平米天");
                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                    y.setUrl("元每平米月");
                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.TWO)){
                    y.setUrl("元每平米年");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.THREE)){
                    y.setUrl("元每天");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FOUR)){
                    y.setUrl("元每月");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FIVE)){
                    y.setUrl("元每年");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.SIX)){
                    y.setUrl("元每场");
                }
            }else if(y.getTitle().equals("${应收日期}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
@@ -821,7 +833,7 @@
                }
            }else if(y.getTitle().equals("${租客名称}")&&StringUtils.isNotBlank(ywContractBill.getCustomerName())){
                y.setUrl(ywContractBill.getCustomerName());
            }else if(y.getTitle().equals("${楼宇/楼层/房源}")){
            }else if(y.getTitle().equals("${房间信息}")){
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
                    StringBuilder roomPathName = new StringBuilder();
                    for (YwContractRoom ywContractRoom:ywContractBill.getYwContractRoomList()) {
@@ -846,21 +858,37 @@
            }else if(y.getTitle().equals("${租赁面积}")&&Objects.nonNull(ywContractBill.getTotalArea())){
                y.setUrl(ywContractBill.getTotalArea().toString());
            }else if(y.getTitle().equals("${所属公司账户名称}")){
                y.setUrl("所属公司账户名称");
                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
                    y.setUrl(ywAccount.getName());
                }else{
                    y.setUrl("-");
                }
            }else if(y.getTitle().equals("${所属公司银行账号}")){
                y.setUrl("所属公司银行账号");
                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
                    y.setUrl(ywAccount.getName());
                }else{
                    y.setUrl("-");
                }
            }else if(y.getTitle().equals("${所属公司开户银行}")){
                y.setUrl("所属公司开户银行");
                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getBankNo())){
                    y.setUrl(ywAccount.getBankNo());
                }else{
                    y.setUrl("-");
                }
            }else if(y.getTitle().equals("${通知单生成日期}")){
                y.setUrl(DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
            }else if(y.getTitle().equals("${当前用户姓名}")){
            }else if(y.getTitle().equals("${制表人名称}")){
                y.setUrl(loginUserInfo.getRealname());
            }
            dealList.add(y);
        }
        return dealList;
    }
    public void sendSmsEmail(List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList,LoginUserInfo loginUserInfo){
    @Override
    public void sendSmsEmail(List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList,SmsEmailServiceImpl smsEmailService,LoginUserInfo loginUserInfo){
        if(CollectionUtils.isEmpty(ywSmsEmailBillCallDTOList)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -874,12 +902,15 @@
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(tempList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到模板配置项,请联系管理员");
        }
        Optional<YwTempConfig> smsTempConfigOptional = ywTempConfigList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).findAny();
        Optional<YwTempConfig> emailTempConfigOptional = ywTempConfigList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).findAny();
        for (YwSmsEmailBillCallDTO ywSmsEmailBillCallDTO:ywSmsEmailBillCallDTOList) {
            if(Objects.isNull(ywSmsEmailBillCallDTO)
            || Objects.isNull(ywSmsEmailBillCallDTO.getBillId())
                    || Objects.isNull(ywSmsEmailBillCallDTO.getBillId())
                    || Objects.isNull(ywSmsEmailBillCallDTO.getUserId())
            ||Objects.isNull(ywSmsEmailBillCallDTO.getSendEmail())
                    || Objects.isNull(ywSmsEmailBillCallDTO.getSendSms())){
                    ||Objects.isNull(ywSmsEmailBillCallDTO.getSendEmail())
                    || Objects.isNull(ywSmsEmailBillCallDTO.getSendSms())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
@@ -906,29 +937,156 @@
            if(Objects.isNull(member)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"存在未查询到的人员信息");
            }
            if(Objects.nonNull(member)){
                if(Constants.equalsInteger(ywSmsEmailBillCallDTO.getSendSms(),Constants.ONE) && StringUtils.isNotBlank(member.getPhone())
                 && smsTempConfigOptional.isPresent()){
                    String content = this.dealTempSmsEmailData(smsTempConfigOptional.get().getTitle(),tempList,ywContractBill,loginUserInfo);
                    smsEmailService.sendBillSms(content,member.getPhone(),ywContractBill.getId());
                }
                if(Constants.equalsInteger(ywSmsEmailBillCallDTO.getSendEmail(),Constants.ONE) && StringUtils.isNotBlank(member.getEmail())
                        && emailTempConfigOptional.isPresent()){
                    String content = this.dealTempSmsEmailData(emailTempConfigOptional.get().getTitle(),tempList,ywContractBill,loginUserInfo);
                    smsEmailService.sendEmail(content,member.getEmail(),ywContractBill.getId());
                }
            }
        }
    }
        for (YwSmsEmailBillCallDTO ywSmsEmailBillCallDTO:ywSmsEmailBillCallDTOList) {
    public String  dealTempSmsEmailData(String tempStr,List<YwTempConfig> ywTempConfigList , YwContractBill ywContractBill, LoginUserInfo loginUserInfo){
        //查询收支账号数据
        YwAccount ywAccount = ywAccountMapper.selectOne(new QueryWrapper<YwAccount>().lambda().eq(YwAccount::getIsdeleted,Constants.ZERO).eq(YwAccount::getStatus,Constants.ZERO).eq(YwAccount::getCompanyId,ywContractBill.getCompanyId())
                .orderByDesc(YwAccount::getId)
                .last(" limit 1 "));
        for (YwTempConfig y:ywTempConfigList) {
            if(y.getTitle().equals("${费用名称}")&&Objects.nonNull(ywContractBill.getCostType())){
                //费用类型:0=租赁费;1=物业费;2=租赁押金;3=物业押金;4=水电费;5=杂项费;6=其他; 7=保证金
                if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ZERO)){
                    tempStr.replace("${费用名称}","租赁费");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ONE)){
                    tempStr.replace("${费用名称}","物业费");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.TWO)){
                    tempStr.replace("${费用名称}","租赁押金");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.THREE)){
                    tempStr.replace("${费用名称}","物业押金");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FOUR)){
                    tempStr.replace("${费用名称}","水电费");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FIVE)){
                    tempStr.replace("${费用名称}","杂项费");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SIX)){
                    tempStr.replace("${费用名称}","其他");
                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SEVEN)){
                    tempStr.replace("${费用名称}","保证金");
                }
            }else if(y.getTitle().equals("${计费周期}")&&Objects.nonNull(ywContractBill.getDetailType())){
                if(Constants.equalsInteger(ywContractBill.getDetailType(),Constants.ZERO)){
                    //租赁支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付
                    if(Objects.nonNull(ywContractBill.getZlPayType())){
                        if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ZERO)){
                            tempStr.replace("${计费周期}","一次性付款");
                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ONE)){
                            tempStr.replace("${计费周期}","每三个月一付");
                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.TWO)){
                            tempStr.replace("${计费周期}","六个月一付");
                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.THREE)){
                            tempStr.replace("${计费周期}","一年一付");
                        }
                    }
                }else{
                    //物业支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付
                    if(Objects.nonNull(ywContractBill.getWyPayType())){
                        if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ZERO)){
                            tempStr.replace("${计费周期}","一次性付款");
                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ONE)){
                            tempStr.replace("${计费周期}","每三个月一付");
                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.TWO)){
                            tempStr.replace("${计费周期}","六个月一付");
                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.THREE)){
                            tempStr.replace("${计费周期}","一年一付");
                        }
                    }
                }
            }else if(y.getTitle().equals("${单价}")&&Objects.nonNull(ywContractBill.getPrice())){
                tempStr.replace("${单价}",ywContractBill.getPrice().toString());
            }else if(y.getTitle().equals("${单位}")&&Objects.nonNull(ywContractBill.getCircleType())){
                //付款周期类型 0=元每平米天;1=元每平米月;2=元每平米年;3=元每天;4=元每月;5=元每年;6=元每场;
                if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ZERO)){
                    tempStr.replace("${单位}","元每平米天");
                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                    tempStr.replace("${单位}","元每平米月");
                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.TWO)){
                    tempStr.replace("${单位}","元每平米年");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.THREE)){
                    tempStr.replace("${单位}","元每天");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FOUR)){
                    tempStr.replace("${单位}","元每月");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FIVE)){
                    tempStr.replace("${单位}","元每年");
                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.SIX)){
                    tempStr.replace("${单位}","元每场");
                }
            }else if(y.getTitle().equals("${应收日期}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
                tempStr.replace("${应收日期}",DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
            }else if(y.getTitle().equals("${应收金额}")&&Objects.nonNull(ywContractBill.getReceivableFee())){
                tempStr.replace("${应收金额}",ywContractBill.getReceivableFee().toString());
            }else if(y.getTitle().equals("${账单备注}")){
                if(StringUtils.isNotBlank(ywContractBill.getRemark())){
                    tempStr.replace("${账单备注}",ywContractBill.getRemark());
                }else{
                    tempStr.replace("${账单备注}","");
                }
            }else if(y.getTitle().equals("${租客名称}")&&StringUtils.isNotBlank(ywContractBill.getCustomerName())){
                tempStr.replace("${租客名称}",ywContractBill.getCustomerName());
            }else if(y.getTitle().equals("${房间信息}")){
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
                    StringBuilder roomPathName = new StringBuilder();
                    for (YwContractRoom ywContractRoom:ywContractBill.getYwContractRoomList()) {
                        if(StringUtils.isNotBlank(ywContractRoom.getProjectName())){
                            roomPathName.append(ywContractRoom.getProjectName()+"/");
                        }
                        if(StringUtils.isNotBlank(ywContractRoom.getBuildingName())){
                            roomPathName.append(ywContractRoom.getBuildingName()+"/");
                        }
                        if(StringUtils.isNotBlank(ywContractRoom.getFloorName())){
                            roomPathName.append(ywContractRoom.getFloorName()+"/");
                        }
                        if(StringUtils.isNotBlank(ywContractRoom.getRoomName())){
                            roomPathName.append(ywContractRoom.getRoomName());
                        }
                        if(StringUtils.isNotBlank(roomPathName)){
                            roomPathName.append(";");
                        }
                    }
                    tempStr.replace("${房间信息}",roomPathName.toString());
                }
            }else if(y.getTitle().equals("${租赁面积}")&&Objects.nonNull(ywContractBill.getTotalArea())){
                tempStr.replace("${租赁面积}",ywContractBill.getTotalArea().toString());
            }else if(y.getTitle().equals("${所属公司账户名称}")){
                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
                    tempStr.replace("${所属公司账户名称}",ywAccount.getName());
                }else{
                    tempStr.replace("${所属公司账户名称}","-");
                }
            }else if(y.getTitle().equals("${所属公司银行账号}")){
                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
                    tempStr.replace("${所属公司银行账号}",ywAccount.getName());
                }else{
                    tempStr.replace("${所属公司银行账号}","-");
                }
            }else if(y.getTitle().equals("${所属公司开户银行}")){
                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getBankNo())){
                    tempStr.replace("${所属公司开户银行}",ywAccount.getBankNo());
                }else{
                    tempStr.replace("${所属公司开户银行}","-");
                }
            }else if(y.getTitle().equals("${通知单生成日期}")){
                tempStr.replace("${通知单生成日期}",DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
            }else if(y.getTitle().equals("${制表人名称}")){
                tempStr.replace("${制表人名称}",loginUserInfo.getRealname());
            }
        }
        return tempStr;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -12,6 +12,7 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dto.YwContractBillDTO;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.SystemUserMapper;
@@ -25,6 +26,7 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -75,8 +77,6 @@
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Integer create(YwContract model) {
        isParamValidCreated(model);
        model.setCreator(model.getLoginUserInfo().getId());
        model.setIsdeleted(Constants.ZERO);
        model.setCreateDate(new Date());
@@ -91,7 +91,7 @@
        }
        model.setRemark(getRemarlByParam(model));
        ywContractMapper.insert(model);
        dealDetailListBiz(model);//处理条款信息
        dealDetailListBiz(model,false);//处理条款信息
        dealMultifileBiz(model);//处理附件信息
        dealRoomsForContract(model);//处理房源关联表
        dealLogBiz(model,Constants.YwLogType.CONTRACT_CREATE,model.getLoginUserInfo().getRealname(),"【"+model.getRemark().replace("合同摘要:","")+"】");//记录新建日志
@@ -162,7 +162,7 @@
        isParamValidForBill(model);
        model.setCreateDate(new Date());
        model.setEditDate(model.getCreateDate());
        dealDetailListBiz(model);//处理条款信息
        dealDetailListBiz(model,true);//处理条款信息
        return model.getBillList();
    }
@@ -177,8 +177,7 @@
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写合同信息");
        }
        if(model.getEndDate().getTime()<= model.getStartDate().getTime()){
        if(model.getEndDate().getTime()< model.getStartDate().getTime()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,合同有效期结束时间不得早于开始时间!");
        }
@@ -211,7 +210,7 @@
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写租赁条款信息!");
                }
                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
                if(d.getEndDate().getTime()< d.getStartDate().getTime()){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,租赁条款有效期结束时间不得早于开始时间!");
                }
@@ -387,7 +386,7 @@
                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
                .apply(" END_DATE < NOW() ")
                .apply(" END_DATE < CURRENT_DATE ")
        );
    }
@@ -605,7 +604,11 @@
        }
    }
    private void dealDetailListBiz(YwContract model) {
    /**
     * @param model
     * @param createBill  æ ¹æ®æ¡æ¬¾ç”Ÿæˆè´¦å• false åˆ™æ ¹æ®å‰ç«¯ç¼–辑后的数据生成
     */
    private void dealDetailListBiz(YwContract model,boolean createBill) {
        List<YwContractDetail> details1 = new ArrayList<>();
        List<YwContractDetail> details2 = new ArrayList<>();
        int num = 0;
@@ -645,7 +648,90 @@
            }
        }
        //处理账单信息
        dealBillListBiz(model,details1,details2);
        if(createBill){
            dealBillListBiz(model,details1,details2);
        }else{
            //2025-1-23 13:56:53 åŠ å…¥ å‰ç«¯å…¥å‚调整后的账单信息
            List<YwContractBill> ywContractBillList = new ArrayList<>();
            //查询租赁条款
            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
                YwContractDetail ywContractDetail = details1.get(Constants.ZERO);
                YwContractBill zlBill = new YwContractBill();
                BeanUtils.copyProperties(model.getZlBillDTO(),zlBill);
                zlBill.setCreator(model.getCreator());
                zlBill.setCreateDate(model.getCreateDate());
                zlBill.setIsdeleted(Constants.ZERO);
                zlBill.setStatus(Constants.ZERO);
                zlBill.setReceivableFee(zlBill.getTotleFee());
                zlBill.setType(Constants.ZERO);
                zlBill.setCompanyId(model.getCompanyId());
                zlBill.setContractId(model.getId());
                zlBill.setBillType(Constants.ZERO);
                zlBill.setPayStatus(Constants.ZERO);
                ywContractBillList.add(zlBill);
                Integer sortnum = Constants.ONE;
                for (YwContractBillDTO zlBillDTO:model.getZlBillDTOList()) {
                    YwContractBill zl = new YwContractBill();
                    BeanUtils.copyProperties(zlBillDTO,zl);
                    zl.setCreator(model.getCreator());
                    zl.setCreateDate(model.getCreateDate());
                    zl.setIsdeleted(Constants.ZERO);
                    zl.setStatus(Constants.ZERO);
                    zl.setReceivableFee(zl.getTotleFee());
                    zl.setType(Constants.ZERO);
                    zl.setCompanyId(model.getCompanyId());
                    zl.setContractId(model.getId());
                    zl.setBillType(Constants.ZERO);
                    zl.setPayStatus(Constants.ZERO);
                    zl.setSortnum(sortnum);
                    zl.setDetailId(ywContractDetail.getId());
                    ywContractBillList.add(zl);
                    sortnum++;
                }
            }
            //查询物业账单
            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
                YwContractDetail ywContractDetail = details2.get(Constants.ZERO);
                YwContractBill wyBill = new YwContractBill();
                BeanUtils.copyProperties(model.getWyBillDTO(),wyBill);
                wyBill.setCreator(model.getCreator());
                wyBill.setCreateDate(model.getCreateDate());
                wyBill.setIsdeleted(Constants.ZERO);
                wyBill.setStatus(Constants.ZERO);
                wyBill.setReceivableFee(wyBill.getTotleFee());
                wyBill.setType(Constants.ZERO);
                wyBill.setCompanyId(model.getCompanyId());
                wyBill.setContractId(model.getId());
                wyBill.setBillType(Constants.ZERO);
                wyBill.setPayStatus(Constants.ZERO);
                ywContractBillList.add(wyBill);
                Integer sortnum = Constants.ONE;
                for (YwContractBillDTO wyBillDTO:model.getWyBillDTOList()) {
                    YwContractBill wy = new YwContractBill();
                    BeanUtils.copyProperties(wyBillDTO,wy);
                    wy.setCreator(model.getCreator());
                    wy.setCreateDate(model.getCreateDate());
                    wy.setIsdeleted(Constants.ZERO);
                    wy.setStatus(Constants.ZERO);
                    wy.setReceivableFee(wy.getTotleFee());
                    wy.setType(Constants.ZERO);
                    wy.setCompanyId(model.getCompanyId());
                    wy.setContractId(model.getId());
                    wy.setBillType(Constants.ZERO);
                    wy.setPayStatus(Constants.ZERO);
                    wy.setSortnum(sortnum);
                    wy.setDetailId(ywContractDetail.getId());
                    ywContractBillList.add(wy);
                    sortnum++;
                }
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){
                ywContractBillMapper.insert(ywContractBillList);
            }
        }
    }
    /**
@@ -1043,8 +1129,7 @@
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写合同信息");
        }
        if(model.getEndDate().getTime()<= model.getStartDate().getTime()){
        if(model.getEndDate().getTime()< model.getStartDate().getTime()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,合同有效期结束时间不得早于开始时间!");
        }
        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
@@ -1080,7 +1165,7 @@
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写租赁条款信息!");
                }
                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
                if(d.getEndDate().getTime()< d.getStartDate().getTime()){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,租赁条款有效期结束时间不得早于开始时间!");
                }
                if(d.getEndDate().getTime()>model.getEndDate().getTime() ||d.getStartDate().getTime()<model.getStartDate().getTime()){
@@ -1188,7 +1273,53 @@
        if(user ==null || (user.getDeleted()!=null && user.getDeleted()) ){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,经办人信息不存在,请尝试刷新页面重试!");
        }
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(model.getYwContractBillDTOList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"无账单信息,请刷新重试");
        }
        for (YwContractBillDTO billDTO:model.getYwContractBillDTOList()) {
            if(
                    Objects.isNull(billDTO.getStartDate())
                    ||Objects.isNull(billDTO.getEndDate())
                    ||Objects.isNull(billDTO.getPlanPayDate())
                    ||Objects.isNull(billDTO.getTotleFee())
                    ||Objects.isNull(billDTO.getCostType())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"账单明细参数错误");
            }
        }
        List<YwContractBillDTO> ywContractBillDTOList = model.getYwContractBillDTOList();
        //查询租赁条款
        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                || Constants.equalsInteger(model.getType(),Constants.TWO)){
            List<YwContractBillDTO> leaseBillDTOList = ywContractBillDTOList.stream()
                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.ZERO)).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(leaseBillDTOList)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无租赁费账单!");
            }
            model.setZlBillDTOList(leaseBillDTOList);
            Optional<YwContractBillDTO> leaseBillOptional = ywContractBillDTOList.stream()
                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.TWO)).findAny();
            if(!leaseBillOptional.isPresent()){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无租赁押金账单!");
            }
            model.setZlBillDTO(leaseBillOptional.get());
        }
        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                || Constants.equalsInteger(model.getType(),Constants.ONE)){
            List<YwContractBillDTO> wyBillDTOList = ywContractBillDTOList.stream()
                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.ONE)).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(wyBillDTOList)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无物业费账单!");
            }
            model.setWyBillDTOList(wyBillDTOList);
            Optional<YwContractBillDTO> wyBillOptional = ywContractBillDTOList.stream()
                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.THREE)).findAny();
            if(!wyBillOptional.isPresent()){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无物业押金账单!");
            }
            model.setWyBillDTO(wyBillOptional.get());
        }
    }
    @Override
@@ -1276,38 +1407,38 @@
        if (model == null) {
                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
            //合同附件
            initFiles(model);
            //查询房源信息数据
            MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
            rw.selectAll(YwRoom.class)
                    .selectAs(YwProject::getName, YwRoom::getProjectName)
                    .selectAs(YwFloor::getName, YwRoom::getFloorName)
                    .selectAs(YwBuilding::getName, YwRoom::getBuildingName)
                    .leftJoin(YwProject.class, YwProject::getId, YwRoom::getProjectId)
                    .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
                    .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
                    .eq(YwRoom::getIsdeleted, Constants.ZERO)
                    .exists("(select a.id from yw_contract_room a where a.isdeleted=0 and a.type=0 and a.room_id=t.id and a.contract_id=" + model.getId() + ")");
            model.setRoomList(roomMapper.selectJoinList(YwRoom.class, rw));
            model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
            model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
            //查询租賃条款信息
            MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>();
            dw.selectAll(YwContractDetail.class)
                    .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
                    .eq(YwContractDetail::getContractId, model.getId())
                    .in(YwContractDetail::getType, Constants.ZERO, Constants.TWO)
                    .orderByAsc(YwContractDetail::getSortnum);
            model.setZlDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
            //查询物業条款信息
            dw = new MPJLambdaWrapper<>();
            dw.selectAll(YwContractDetail.class)
                    .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
                    .eq(YwContractDetail::getContractId, model.getId())
                    .in(YwContractDetail::getType, Constants.ONE, Constants.THREE)
                    .orderByAsc(YwContractDetail::getSortnum);
            model.setWyDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
        //合同附件
        initFiles(model);
        //查询房源信息数据
        MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
        rw.selectAll(YwRoom.class)
                .selectAs(YwProject::getName, YwRoom::getProjectName)
                .selectAs(YwFloor::getName, YwRoom::getFloorName)
                .selectAs(YwBuilding::getName, YwRoom::getBuildingName)
                .leftJoin(YwProject.class, YwProject::getId, YwRoom::getProjectId)
                .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
                .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
                .eq(YwRoom::getIsdeleted, Constants.ZERO)
                .exists("(select a.id from yw_contract_room a where a.isdeleted=0 and a.type=0 and a.room_id=t.id and a.contract_id=" + model.getId() + ")");
        model.setRoomList(roomMapper.selectJoinList(YwRoom.class, rw));
        model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
        model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
        //查询租賃条款信息
        MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>();
        dw.selectAll(YwContractDetail.class)
                .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
                .eq(YwContractDetail::getContractId, model.getId())
                .in(YwContractDetail::getType, Constants.ZERO, Constants.TWO)
                .orderByAsc(YwContractDetail::getSortnum);
        model.setZlDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
        //查询物業条款信息
        dw = new MPJLambdaWrapper<>();
        dw.selectAll(YwContractDetail.class)
                .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
                .eq(YwContractDetail::getContractId, model.getId())
                .in(YwContractDetail::getType, Constants.ONE, Constants.THREE)
                .orderByAsc(YwContractDetail::getSortnum);
        model.setWyDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
        return model;
    }
@@ -1429,7 +1560,8 @@
        queryWrapper.selectAll(YwContract.class )
                .selectAs(Company::getName,YwContract::getCompanyName )
                .selectAs(YwCustomer::getName,YwContract::getRenterName )
                .select("(select sum(r.area) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)",YwContract::getTotalArea )
                .select("(select sum(r.RENT_AREA) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)",YwContract::getTotalArea )
                .select(" ( select  ifnull(sum(y.TOTLE_FEE),0)  from yw_contract_bill y   where y.CONTRACT_ID = t.id and y.type = 0 and y.COST_TYPE=0 and y.BILL_TYPE = 0 ) " , YwContract::getTotalFee)
                .leftJoin(Company.class,Company::getId,YwContract::getCompanyId)
                .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId);
        Utils.MP.blankToNull(pageWrap.getModel());
@@ -1537,6 +1669,9 @@
        if (pageWrap.getModel().getRoomId() != null) {
            queryWrapper.apply(" t.id in ( select ycr.CONTRACT_ID from yw_contract_room ycr where ycr.type = 0 and  ycr.ROOM_ID = "+pageWrap.getModel().getRoomId()+" )  ");
        }
        if (pageWrap.getModel().getBuildingId() != null) {
            queryWrapper.apply(" t.id in ( select ycr.CONTRACT_ID from yw_contract_room ycr left join yw_room yr on ycr.ROOM_ID = yr.id where ycr.type = 0 and  yr.BUILDING_ID = "+pageWrap.getModel().getBuildingId()+" )  ");
        }
        queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwContract::getStartDate, pageWrap.getModel().getQueryStartTime())
                        .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwContract::getEndDate, pageWrap.getModel().getQueryEndTime());
        queryWrapper.orderByDesc(YwContract::getCreateDate );
@@ -1545,6 +1680,28 @@
            for(YwContract model : data.getRecords()){
                model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
                model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
                //查询房源信息数据
                MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
                rw.selectAll(YwRoom.class)
                        .selectAs(YwProject::getName, YwRoom::getProjectName)
                        .selectAs(YwFloor::getName, YwRoom::getFloorName)
                        .selectAs(YwBuilding::getName, YwRoom::getBuildingName)
                        .leftJoin(YwProject.class, YwProject::getId, YwRoom::getProjectId)
                        .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
                        .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
                        .eq(YwRoom::getIsdeleted, Constants.ZERO)
                        .exists("(select a.id from yw_contract_room a where a.isdeleted=0 and a.type=0 and a.room_id=t.id and a.contract_id=" + model.getId() + ")");
                model.setRoomList(roomMapper.selectJoinList(YwRoom.class, rw));
                model.setLeaseDays(
                        DateUtil.daysBetweenDates(model.getEndDate(),model.getStartDate()) + 1
                );
                if(Objects.nonNull(model.getLeaseDays())&&Objects.nonNull(model.getTotalArea())&&Objects.nonNull(model.getTotalFee())){
                    model.setLeasePrice(model.getTotalFee().divide((model.getTotalArea().multiply(new BigDecimal(model.getLeaseDays()))),2,BigDecimal.ROUND_HALF_UP));
                }else{
                    model.setLeasePrice(BigDecimal.ZERO);
                }
            }
        }
        return data;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
@@ -11,10 +11,7 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwDeviceMapper;
import com.doumee.dao.business.YwDeviceRecordMapper;
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.YwDevice;
import com.doumee.dao.business.model.YwDeviceRecord;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.YwDeviceCateDataVO;
import com.doumee.dao.business.vo.YwDeviceDataVO;
import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
@@ -103,7 +100,7 @@
                }
                multifile.setCreateDate(ywDevice.getCreateDate());
                multifile.setEditDate(ywDevice.getCreateDate());
                multifile.setCreator(ywDevice.getEditor());
                multifile.setCreator(ywDevice.getCreator());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(ywDevice.getId());
                multifile.setEditor(ywDevice.getCreator());
@@ -226,7 +223,28 @@
    @Override
    public YwDevice getDetail(Integer id) {
        YwDevice ywDevice = ywDeviceMapper.selectById(id);
        YwDevice ywDevice = ywDeviceMapper.selectJoinOne(YwDevice.class,
                new MPJLambdaWrapper<YwDevice>()
                .selectAll(YwDevice.class)
                        .select("c.name",YwDevice::getCategoryName)
                        .select("c1.name",YwDevice::getCategoryParentName)
                        .select("s.realname",YwDevice::getRealName)
                        .select("s1.realname",YwDevice::getMaintenanceUserName)
                        .selectAs(YwProject::getName,YwDevice::getProjectName)
                        .selectAs(YwFloor::getName,YwDevice::getFloorName)
                        .selectAs(YwBuilding::getName,YwDevice::getBuildingName)
                        .selectAs(YwRoom::getCode,YwDevice::getRoomName)
                        .leftJoin(YwRoom.class,YwRoom::getId,YwDevice::getRoomId)
                        .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                        .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                        .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
                        .leftJoin("category c on t.CATE_ID = c.id")
                        .leftJoin("category c1 on c.PARENT_ID = c1.id")
                        .leftJoin("system_user s on t.user_id = s.id")
                        .leftJoin("system_user s1 on t.MAINTENANCE_USER_ID = s1.id")
                        .eq(YwDevice::getId,id)
                        .last(" limit 1 ")
        );
        Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE.getKey()).last(" limit 1"));
        if(Objects.nonNull(multifile)){
@@ -303,10 +321,12 @@
        queryWrapper.selectAll(YwDevice.class)
                .select("c.name",YwDevice::getCategoryName)
                .select("c1.name",YwDevice::getCategoryParentName)
                .selectAs(SystemUser::getRealname,YwDevice::getRealName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwDevice::getUserId)
                .select("s.realname",YwDevice::getRealName)
                .select("s1.realname",YwDevice::getMaintenanceUserName)
                .leftJoin("category c on t.CATE_ID = c.id")
                .leftJoin("category c1 on c.PARENT_ID = c1.id")
                .leftJoin("system_user s on t.user_id = s.id")
                .leftJoin("system_user s1 on t.MAINTENANCE_USER_ID = s1.id")
                .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(YwDevice::getName,model.getName()).or().like(YwDevice::getCode,model.getName()))
                .eq(Objects.nonNull(model.getStatus()),YwDevice::getStatus,model.getStatus())
                .eq(Objects.nonNull(model.getRoomId()),YwDevice::getRoomId,model.getRoomId())
@@ -343,7 +363,7 @@
    }
    @Override
    public Set<YwDeviceCateDataVO> getDeviceCateData(YwDevice model){
    public Set<YwDeviceParentCateDataVO> getDeviceCateData(YwDevice model){
        MPJLambdaWrapper<YwDevice> queryWrapper = new MPJLambdaWrapper<YwDevice>();
        queryWrapper.selectAll(YwDevice.class)
                .select("c.name",YwDevice::getCategoryName)
@@ -370,6 +390,7 @@
            ywDeviceCateDataVO.setCateName(y.getCategoryName());
            ywDeviceCateDataVO.setCateParentId(y.getCateParentId());
            ywDeviceCateDataVOSet.add(ywDeviceCateDataVO);
            YwDeviceParentCateDataVO ywDeviceParentCateDataVO = new YwDeviceParentCateDataVO();
            ywDeviceParentCateDataVO.setCateId(y.getCateParentId());
            ywDeviceParentCateDataVO.setCateName(y.getCategoryParentName());
@@ -390,7 +411,7 @@
                    ywDeviceCateDataVOSet.stream().filter(i->Constants.equalsInteger(i.getCateParentId(),ywDeviceParentCateDataVO.getCateId())).collect(Collectors.toList())
            );
        }
        return ywDeviceCateDataVOSet;
        return ywDeviceParentCateDataVOSet;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
@@ -103,7 +103,7 @@
    @Override
    public void deleteById(Integer id) {
        if(ywOutinboundRecordMapper.selectCount(new QueryWrapper<YwOutinboundRecord>().lambda().eq(YwOutinboundRecord::getMaterialId,id))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前资产已有出入库记录,不可删除");
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前物料已有出入库记录,不可删除");
        }
        ywMaterialMapper.update(new UpdateWrapper<YwMaterial>().lambda().set(YwMaterial::getIsdeleted,Constants.ONE).eq(YwMaterial::getId,id));
    }
@@ -219,7 +219,10 @@
                .and(StringUtils.isNotBlank(model.getCode()),i->i.like(YwMaterial::getCode,model.getCode()).or().like(YwMaterial::getName,model.getCode()))
                .like(StringUtils.isNotBlank(model.getAttr()),YwMaterial::getAttr,model.getAttr())
                .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
                .eq(Objects.nonNull(model.getStatus()),YwMaterial::getStatus,model.getStatus())
                .eq(Objects.nonNull(model.getRoomId()),YwMaterial::getRoomId,model.getRoomId())
                .eq(Objects.nonNull(model.getCateId()),YwMaterial::getCateId,model.getCateId())
                .eq(Objects.nonNull(model.getParentCateId()),YwMaterial::getParentCateId,model.getParentCateId())
                .eq(Objects.nonNull(model.getFloorId()),YwRoom::getFloor,model.getFloorId())
                .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                .eq(YwMaterial::getIsdeleted,Constants.ZERO)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java
@@ -20,6 +20,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -97,13 +98,15 @@
        MPJLambdaWrapper<YwOutinboundRecord> queryWrapper = new MPJLambdaWrapper<YwOutinboundRecord>();
        Utils.MP.blankToNull(pageWrap.getModel());
        YwOutinboundRecord model = pageWrap.getModel();
        if(Objects.isNull(model)||Objects.isNull(model.getInOut())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        List<Integer> typeList = new ArrayList<>();
        if(!(Objects.isNull(model)||Objects.isNull(model.getInOut()))){
            typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
        }
        List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
        queryWrapper.selectAll(YwOutinboundRecord.class)
                .selectAs(SystemUser::getRealname,YwOutinboundRecord::getCreateUserName)
                .selectAs(YwOutinbound::getCode,YwOutinboundRecord::getCode)
                .selectAs(YwOutinbound::getType,YwOutinboundRecord::getType)
                .selectAs(YwOutinbound::getDoneDate,YwOutinboundRecord::getDoneDate)
                .selectAs(YwWarehouse::getName,YwOutinboundRecord::getWarehouseName)
                .selectAs(YwMaterial::getCode,YwOutinboundRecord::getMaterialCode)
                .selectAs(YwMaterial::getName,YwOutinboundRecord::getMaterialName)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
@@ -80,6 +80,7 @@
        ywOutinbound.setOrigin(Constants.ZERO);
        ywOutinboundMapper.insert(ywOutinbound);
        for (YwOutinboundRecord ywOutinboundRecord:recordList) {
                ywOutinboundRecord.setOutInBoundId(ywOutinbound.getId());
            ywOutinboundRecord.setCreator(loginUserInfo.getId());
            ywOutinboundRecord.setCreateDate(new Date());
            ywOutinboundRecord.setIsdeleted(Constants.ZERO);
@@ -94,7 +95,7 @@
    public List<YwOutinboundRecord> verifyData(YwOutinbound ywOutinbound){
        if(Objects.isNull(ywOutinbound)
                || Objects.isNull(ywOutinbound.getType())
                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE)))
//                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE)))
                || Objects.isNull(ywOutinbound.getWarehouseId())
                || Objects.isNull(ywOutinbound.getDoneDate())
                || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywOutinbound.getRecordList())
@@ -110,6 +111,7 @@
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            ywOutinboundRecord.setId(null);
        }
        //判断当前是否存在进行中的盘点单
        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda().eq(YwStocktaking::getIsdeleted,Constants.ZERO)
@@ -130,10 +132,13 @@
    public void dealStockData(YwOutinbound ywOutinbound,List<YwOutinboundRecord> recordList,Integer inOut){
        for (YwOutinboundRecord ywOutinboundRecord:recordList) {
            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO).eq(YwStock::getWarehouseId,ywOutinbound.getWarehouseId()).eq(YwStock::getMaterialId,ywOutinboundRecord.getMaterialId()));
            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
                    .eq(YwStock::getWarehouseId,ywOutinbound.getWarehouseId()).eq(YwStock::getMaterialId,ywOutinboundRecord.getMaterialId()));
            if(Constants.equalsInteger(inOut,Constants.ZERO)){
                //入库
                if(Objects.isNull(ywStock)){
                    ywStock = new YwStock();
                    ywStock.setIsdeleted(Constants.ZERO);
                    ywStock.setStock(ywOutinboundRecord.getStock());
                    ywStock.setWarehouseId(ywOutinbound.getWarehouseId());
                    ywStock.setMaterialId(ywOutinboundRecord.getMaterialId());
@@ -142,7 +147,7 @@
                    ywStockMapper.insert(ywStock);
                }else{
                    ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
                            .set(YwStock::getStock," ( stock + " + ywStock.getStock() + " )")
                                .setSql(" stock = ( stock + "+ywOutinboundRecord.getStock()+") ")
                            .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
                            .set(YwStock::getEditor, ywOutinbound.getCreator())
                            .eq(YwStock::getId,ywStock.getId())
@@ -157,7 +162,7 @@
                    ywStockMapper.deleteById(ywStock.getId());
                }else{
                    ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
                            .set(YwStock::getStock," ( stock  - " + ywStock.getStock() + " )")
                            .setSql(" stock = ( stock - "+ywOutinboundRecord.getStock()+") ")
                            .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
                            .set(YwStock::getEditor, ywOutinbound.getCreator())
                            .eq(YwStock::getId,ywStock.getId())
@@ -376,7 +381,7 @@
    public synchronized String  getNextInOutCode(Integer inOut){
        String prefix =  Constants.equalsInteger(inOut,0)?"RK-":"CK-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
        String prefix =  (Constants.equalsInteger(inOut,0)?"RK-":"CK-") + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
        Integer countNum  = RedisUtil.getObject(redisTemplate,
                Constants.equalsInteger(inOut,0)?Constants.RedisKeys.COM_OUTBOUND_OUT_KEY:Constants.RedisKeys.COM_OUTBOUND_IN_KEY,
                Integer.class);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -213,22 +214,35 @@
        if(StringUtils.isNotBlank(ywPatrolScheme.getUserIds())){
            String [] userIds = ywPatrolScheme.getUserIds().split(",");
            for (String userId:userIds) {
                //添加待办信息
                Notices notices = new Notices();
                notices.setCreateDate(new Date());
                notices.setCreator(ywPatrolScheme.getCreator());
                notices.setIsdeleted(Constants.ZERO);
                notices.setParam1(DateUtil.formatDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
                notices.setTitle("巡检任务待办");
                notices.setContent("["+ywPatrolTask.getCode()+"]将在["+notices.getParam1()+"]进行巡检,请按时执行");
                notices.setObjId(ywPatrolTask.getId());
                notices.setObjType(Constants.ONE);
                notices.setType(notices.getObjType());
                notices.setUserId(Integer.valueOf(userId));
                notices.setStatus(Constants.ZERO);
                noticesJoinMapper.insert(notices);
            List<SystemUser> systemUserList = systemUserMapper.selectList(new QueryWrapper<SystemUser>().lambda().in(SystemUser::getId,userIds));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemUserList)){
                List<String> names = systemUserList.stream().filter(i->StringUtils.isNotBlank(i.getRealname())).map(i->i.getRealname()).collect(Collectors.toList());
                for (SystemUser systemUser:systemUserList) {
                    //添加待办信息
                    Notices notices = new Notices();
                    notices.setCreateDate(new Date());
                    notices.setCreator(ywPatrolScheme.getCreator());
                    notices.setIsdeleted(Constants.ZERO);
                    notices.setParam1(DateUtil.formatDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
                    notices.setTitle("巡检任务待办");
                    notices.setContent("["+ywPatrolTask.getCode()+"]将在["+notices.getParam1()+"]进行巡检,请按时执行");
                    notices.setObjId(ywPatrolTask.getId());
                    notices.setObjType(Constants.ONE);
                    notices.setType(notices.getObjType());
                    notices.setUserId(Integer.valueOf(systemUser.getId()));
                    notices.setStatus(Constants.ZERO);
                    //整理json数据
                    Map<String,Object> jsonMap = new HashMap<>();
                    jsonMap.put("key1", ywPatrolScheme.getTitle());
                    jsonMap.put("key2", DateUtil.getFomartDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
                    jsonMap.put("key3", DateUtil.getFomartDate(ywPatrolTask.getStartDate(),"HH:mm") + "-" + DateUtil.getFomartDate(ywPatrolTask.getEndDate(),"HH:mm"));
                    jsonMap.put("key4", StringUtils.join(names , "、"));
                    notices.setParam2(JSONObject.toJSONString(jsonMap));
                    notices.setParam3(Constants.ZERO+"");
                    noticesJoinMapper.insert(notices);
                }
            }
        }
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
@@ -234,13 +234,7 @@
                .set(YwPatrolTaskRecord::getDealInfo, ywPatrolTaskRecord.getDealInfo())
                .eq(YwPatrolTaskRecord::getId,ywPatrolTaskRecord.getId()));
        //标记待办已处理
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getStatus,Constants.ONE)
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getObjType,Constants.ONE)
                .eq(Notices::getObjId,ywPatrolTask.getId())
        );
        if(ywPatrolTaskRecordMapper.selectCount(new QueryWrapper<YwPatrolTaskRecord>().lambda()
                .eq(YwPatrolTaskRecord::getTaskId,ywPatrolTask.getId())
                .eq(YwPatrolTaskRecord::getStatus,Constants.ZERO)
@@ -255,18 +249,27 @@
                    .set(YwPatrolTask::getEditor,loginUserInfo.getId())
            );
            if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda()
                    .eq(YwPatrolTask::getSchemeId,ywPatrolTask.getSchemeId())
                    .in(YwPatrolTask::getStatus,Constants.ZERO,Constants.ONE)
                    .ne(YwPatrolTask::getId,ywPatrolTask.getId())
            )==Constants.ZERO){
                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
                        .set(YwPatrolScheme::getStatus,Constants.TWO)
                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
                );
            }
//            if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda()
//                    .eq(YwPatrolTask::getSchemeId,ywPatrolTask.getSchemeId())
//                    .in(YwPatrolTask::getStatus,Constants.ZERO,Constants.ONE)
//                    .ne(YwPatrolTask::getId,ywPatrolTask.getId())
//            )==Constants.ZERO){
//                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
//                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
//                        .set(YwPatrolScheme::getStatus,Constants.TWO)
//                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
//                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
//                );
//            }
            //标记待办已处理
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getStatus,Constants.ONE)
                    .set(Notices::getParam3,Constants.TWO)
                    .eq(Notices::getIsdeleted,Constants.ZERO)
                    .eq(Notices::getObjType,Constants.ONE)
                    .eq(Notices::getObjId,ywPatrolTask.getId())
            );
        }else{
            if(Constants.equalsInteger(ywPatrolTask.getStatus(),Constants.ZERO)){
                ywPatrolTaskMapper.update(null,new UpdateWrapper<YwPatrolTask>().lambda()
@@ -276,14 +279,21 @@
                        .set(YwPatrolTask::getEditor,loginUserInfo.getId())
                );
            }
            if(Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ZERO)){
                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
                        .set(YwPatrolScheme::getStatus,Constants.ONE)
                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
                );
            }
//            if(Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ZERO)){
//                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
//                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
//                        .set(YwPatrolScheme::getStatus,Constants.ONE)
//                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
//                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
//                );
//            }
            //标记待办已处理
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getParam3,Constants.ONE)
                    .eq(Notices::getIsdeleted,Constants.ZERO)
                    .eq(Notices::getObjType,Constants.ONE)
                    .eq(Notices::getObjId,ywPatrolTask.getId())
            );
        }
        //附件数据
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywPatrolTaskRecord.getMultifileList())){
@@ -324,7 +334,7 @@
                .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwPatrolTaskRecord::getPointId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTaskRecord::getDealUserId)
                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                .eq(YwPatrolScheme::getIsdeleted, Constants.ZERO)
                .eq(YwPatrolTaskRecord::getIsdeleted, Constants.ZERO)
                .eq(YwPatrolPoint::getCode,bean.getPointCode())
                .eq(YwPatrolTaskRecord::getTaskId,bean.getTaskId())
                .orderByDesc(YwPatrolScheme::getCreateDate)
@@ -339,6 +349,48 @@
    }
    /**
     * æ ¹æ®ç™»å½•人与巡检点查询任务信息
     * @param bean
     * @return
     */
    @Override
    public YwPatrolTaskRecord getRecordByUserPoint(YwPatrolTaskRecord bean,LoginUserInfo loginUserInfo) {
        if(Objects.isNull(bean)
                || StringUtils.isBlank(bean.getPointCode())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getCode,bean.getPointCode()))==Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未匹配到巡检点,请重新扫码!");
        }
        YwPatrolTaskRecord ywPatrolTaskRecord = ywPatrolTaskRecordMapper.selectJoinOne(YwPatrolTaskRecord.class,new MPJLambdaWrapper<YwPatrolTaskRecord>()
                .selectAll(YwPatrolTaskRecord.class)
                .selectAs(YwPatrolPoint::getName,YwPatrolTaskRecord::getPointName)
                .selectAs(YwPatrolPoint::getContent,YwPatrolTaskRecord::getContent)
                .selectAs(YwPatrolPoint::getDeviceId,YwPatrolTaskRecord::getDeviceId)
                .selectAs(YwPatrolScheme::getTitle,YwPatrolTaskRecord::getSchemeTitle)
                .selectAs(SystemUser::getRealname,YwPatrolTaskRecord::getRealname)
                .selectAs(Company::getName,YwPatrolTaskRecord::getCompanyName)
                .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwPatrolTaskRecord::getPointId)
                .leftJoin(YwPatrolTask.class,YwPatrolTask::getId,YwPatrolTaskRecord::getTaskId)
                .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTaskRecord::getDealUserId)
                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                .eq(YwPatrolTaskRecord::getIsdeleted, Constants.ZERO)
                .eq(YwPatrolTaskRecord::getStatus, Constants.ZERO)
                .eq(YwPatrolPoint::getCode,bean.getPointCode())
                .apply("  DATE(t2.START_DATE) = DATE(NOW()) and find_in_set('"+loginUserInfo.getId()+"', t3.USER_IDS )  ")
                .orderByDesc(YwPatrolScheme::getCreateDate)
                .last(" limit 1 ")
        );
        if(Objects.isNull(ywPatrolTaskRecord)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"今日暂无巡检任务!");
        }
        getFileListByModel(ywPatrolTaskRecord);
        return ywPatrolTaskRecord;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
@@ -53,7 +53,6 @@
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer create(YwProblem ywProblem) {
        if(Objects.isNull(ywProblem)
            || Objects.isNull(ywProblem.getSubmitDate())
            || StringUtils.isBlank(ywProblem.getContent())
            || StringUtils.isBlank(ywProblem.getPhone())
            || StringUtils.isBlank(ywProblem.getName())
@@ -64,6 +63,7 @@
        ywProblem.setIsdeleted(Constants.ZERO);
        ywProblem.setStatus(Constants.ZERO);
        ywProblem.setDealStatus(Constants.ZERO);
        ywProblem.setSubmitDate(new Date());
        ywProblemMapper.insert(ywProblem);
        List<Multifile> fileList = new ArrayList<>();
@@ -130,14 +130,16 @@
    @Override
    public YwProblem getDetail(Integer id) {
    public YwProblem getDetail(Integer id,Integer workorderId) {
        MPJLambdaWrapper<YwProblem> queryWrapper = new MPJLambdaWrapper<YwProblem>();
        queryWrapper.selectAll(YwProblem.class)
                .selectAs(SystemUser::getRealname,YwProblem::getDealUserName)
                .selectAs(Company::getName,YwProblem::getDealUserCompanyName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwProblem::getDealUserId)
                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                .eq(YwProblem::getId,id)
                .eq(Objects.nonNull(id),YwProblem::getId,id)
                .eq(Objects.nonNull(workorderId),YwProblem::getWorkorderId,workorderId)
                .last(" limit 1 ")
        ;
        YwProblem ywProblem = ywProblemMapper.selectJoinOne(YwProblem.class,queryWrapper);
        if(Objects.isNull(ywProblem)){
@@ -149,7 +151,7 @@
                .eq(Multifile::getIsdeleted,Constants.ZERO));
        if(multifiles!=null){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PROBLEM).getCode();
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_WORKORDER_FILE).getCode();
            for(Multifile f : multifiles){
                if(StringUtils.isBlank(f.getFileurl())){
                    continue;
@@ -160,6 +162,8 @@
        }
        return ywProblem;
    }
@@ -190,14 +194,16 @@
        }else{
            if(Objects.isNull(ywProblem.getWorkOrderAreaType())
                    ||Objects.isNull(ywProblem.getWorkOrderCateId())
                    ||StringUtils.isBlank(ywProblem.getWorkOrderContent())
                    ||StringUtils.isBlank(ywProblem.getDealInfo())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            YwWorkorder ywWorkorder = new YwWorkorder();
            ywWorkorder.setProjectId(ywProblem.getWorkOrderProjectId());
            ywWorkorder.setBuildingId(ywProblem.getWorkOrderBuildId());
            ywWorkorder.setAreaType(ywProblem.getWorkOrderAreaType());
            ywWorkorder.setCateId(ywProblem.getWorkOrderCateId());
            ywWorkorder.setContent(ywProblem.getWorkOrderContent());
            ywWorkorder.setContent(ywProblem.getDealInfo());
            ywWorkorder.setRoomId(ywProblem.getWorkOrderRoomId());
            ywWorkorder.setFloorId(ywProblem.getWorkOrderFloorId());
            ywWorkorder.setGetDate(ywProblem.getWorkOrderGetDate());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
@@ -23,6 +23,7 @@
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.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
@@ -293,7 +294,15 @@
            projectDataVOList.add(projectDataVO);
        }
        List<YwRoom>  ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
        List<YwRoom>  ywRoomList = ywRoomMapper.selectJoinList(YwRoom.class,new MPJLambdaWrapper<YwRoom>()
                .selectAll(YwRoom.class)
//                        .select("  ( SELECT count(1) FROM  yw_contract y1 " +
//                                " left join yw_contract_room y2 on y1.id = y2.contract_id " +
//                                " where 1 = 1 and y2.type = 0  and y1.`STATUS` in( 0,1,2) " +
//                                " and y1.START_DATE <  now() and y1.END_DATE >  now() and y2.ROOM_ID = yw_room.id ) as investmentStatus ")
                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
                .eq(YwRoom::getStatus,Constants.ZERO)
                .eq(YwRoom::getIsInvestment,Constants.ONE)
@@ -316,6 +325,7 @@
            projectDataVO.setArea(data.getRentArea().setScale(2, BigDecimal.ROUND_HALF_UP));
            projectDataVO.setPId(data.getFloor());
            projectDataVO.setLv(Constants.THREE);
            projectDataVO.setLeaseStatus(data.getLeaseStatus());
            projectDataVOList.add(projectDataVO);
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
@@ -25,10 +25,7 @@
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -288,7 +285,7 @@
                YwRoomStatusDataVO roomStatusDataVO = new YwRoomStatusDataVO();
                roomStatusDataVO.setFloorId(ywRoom.getFloor());
                roomStatusDataVO.setRoomId(ywRoom.getId());
                roomStatusDataVO.setRoomCode(ywRoom.getCode());
                roomStatusDataVO.setRoomCode(ywRoom.getRoomNum());
                roomStatusDataVO.setRoomRentArea(ywRoom.getRentArea());
                List<YwContract> roomContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
@@ -297,10 +294,10 @@
                        .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId)
                        .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                        .eq(YwContract::getIsdeleted,Constants.ZERO)
                        .ge(YwContract::getStartDate, DateUtil.getCurrDateTime())
                        .le(YwContract::getStartDate, DateUtil.getCurrDateTime())
                        .ge(YwContract::getEndDate, DateUtil.getCurrDateTime())
                        .eq(YwContractRoom::getType,Constants.ZERO)
                        .eq(YwContractRoom::getRoomId,ywRoom.getId())
                        .ne(YwContract::getBillStatus,Constants.THREE)
                        .orderByDesc(YwContract::getStartDate)
                );
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
@@ -320,9 +317,24 @@
                                roomStatusDataVO.setOverData(ywContract.getBtDate());
                            }
                        }else{
                            if(Objects.nonNull(ywContract.getEndDate()) && DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getEndDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"))<=90){
                            System.out.println(DateUtil.daysBetweenDates(ywContract.getEndDate(),new Date()));
                            if(Objects.nonNull(ywContract.getEndDate())
                                    &&
                                DateUtil.daysBetweenDates(ywContract.getEndDate(),new Date())<=90){
                                roomStatusDataVO.setRoomStatus(Constants.TWO);
                                roomStatusDataVO.setOverData(ywContract.getEndDate());
                            }else{
                                roomStatusDataVO.setOverData(ywContract.getEndDate());
                            }
                        }
                    }else{
                        roomStatusDataVO.setRoomStatus(Constants.ZERO);
                        //已退租 è®¡ç®—退租时间
                        if(Objects.nonNull(ywContract.getBtDate())){
                            //查询退租日期和当前日期相差天数
                            Integer btDays = DateUtil.daysBetweenDates(new Date(),ywContract.getBtDate());
                            if(btDays>=Constants.ZERO){
                                roomStatusDataVO.setFreeDayAmount(btDays);
                            }
                        }
                    }
@@ -332,12 +344,15 @@
        }
        for (YwFloor ywFloor:ywFloorList) {
            YwFloorStatusDataVO ywFloorStatusDataVO = new YwFloorStatusDataVO();
            ywFloorStatusDataVO.setFloor(ywFloor.getFloor());
            ywFloorStatusDataVO.setFloorName(ywFloor.getName());
            ywFloorStatusDataVO.setFloorId(ywFloor.getId());
            ywFloorStatusDataVO.setFloorArea(ywFloor.getArea());
            ywFloorStatusDataVO.setFloorArea(BigDecimal.ZERO);
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(roomStatusDataList)){
                List<YwRoomStatusDataVO> floorRoomList = roomStatusDataList.stream().filter(i->Objects.nonNull(i.getFloorId())&&Constants.equalsInteger(i.getFloorId(),ywFloor.getId())).collect(Collectors.toList());
                ywFloorStatusDataVO.setYwRoomStatusDataVOList(floorRoomList);
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(floorRoomList)){
                    ywFloorStatusDataVO.setFloorArea(floorRoomList.stream().filter(i->Objects.nonNull(i.getRoomRentArea())).map(i->i.getRoomRentArea()).reduce(BigDecimal.ZERO,BigDecimal::add));
                }
            }
            ywFloorStatusDataVOList.add(ywFloorStatusDataVO);
        }
@@ -358,6 +373,7 @@
        ywRoomContractDataVO.setLeasePrice(BigDecimal.ZERO);
        ywRoomContractDataVO.setLeaseArea(BigDecimal.ZERO);
        ywRoomContractDataVO.setLeaseRoomAmount(Constants.ZERO);
        ywRoomContractDataVO.setLeaseDayPrice(BigDecimal.ZERO);
        List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
@@ -376,15 +392,13 @@
        List<YwContract> roomContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
                .selectAll(YwContract.class)
                .select(" ( select  ifnull(sum(yr.RENT_AREA),0)  from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and y.CONTRACT_ID = t.id ) " , YwContract::getTotalArea)
                .select(" ( select  ifnull(sum(y.TOTLE_FEE),0)  from yw_contract_bill y   where y.CONTRACT_ID = t.id and y.type = 0  ) " , YwContract::getTotalFee)
                .select(" ( select  ifnull(sum(y.TOTLE_FEE),0)  from yw_contract_bill y   where y.CONTRACT_ID = t.id and y.type = 0 and y.COST_TYPE=0 and y.BILL_TYPE = 0  ) " , YwContract::getTotalFee)
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ONE,Constants.TWO,Constants.THREE)
                .ne(YwContract::getBillStatus,Constants.THREE)
                .apply(Objects.nonNull(model.getBuildingId()),
                        " t.id in ( select y.CONTRACT_ID from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and  yr.BUILDING_ID = "+model.getBuildingId()+" ) ")
                .apply(Objects.nonNull(model.getProjectId()),
                        " t.id in ( select y.CONTRACT_ID from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and  yr.PROJECT_ID = "+model.getProjectId()+" ) ")
                .apply(Objects.nonNull(model.getProjectId())," ")
                .orderByDesc(YwContract::getStartDate)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
@@ -392,17 +406,21 @@
        }
        //处理租赁单价 æ ¹æ®  åˆåŒç§Ÿèµæ€»é¢ /  ï¼ˆç§Ÿèµæ—¶é•¿ * ç§Ÿèµé¢ç§¯ï¼‰
        for (YwContract ywContract:roomContractList) {
            long contractDayAmount = DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getEndDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(ywContract.getStartDate(),"yyyy-MM-dd"));
            long contractDayAmount = DateUtil.daysBetweenDates(ywContract.getEndDate()
                    ,ywContract.getStartDate());
            if(Objects.nonNull(contractDayAmount) && Objects.nonNull(ywContract.getTotalArea()) && Objects.nonNull(ywContract.getTotalFee())){
                ywRoomContractDataVO.setLeasePrice(
                        ywRoomContractDataVO.getLeasePrice().add(
                ywRoomContractDataVO.setLeaseDayPrice(
                        ywRoomContractDataVO.getLeaseDayPrice().add(
                            ywContract.getTotalFee().divide((ywContract.getTotalArea().multiply(new BigDecimal(Long.toString(contractDayAmount)))),2,BigDecimal.ROUND_HALF_UP)
                        )
                );
            }
        }
        ywRoomContractDataVO.setLeaseContractAmount(roomContractList.size());
        if(Objects.nonNull(ywRoomContractDataVO.getLeaseDayPrice())&&ywRoomContractDataVO.getLeaseDayPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            ywRoomContractDataVO.setLeasePrice(
                    ywRoomContractDataVO.getLeaseDayPrice().divide(new BigDecimal(Integer.toString(ywRoomContractDataVO.getLeaseContractAmount())),2,BigDecimal.ROUND_HALF_UP));
        }
        List<Integer> contractId = roomContractList.stream().map(i->i.getId()).collect(Collectors.toList());
        List<YwRoom> ywLeaseRoomList = ywRoomMapper.selectJoinList(YwRoom.class,new MPJLambdaWrapper<YwRoom>()
                .selectAll(YwRoom.class)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
@@ -105,8 +105,7 @@
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStock::getWarehouseId)
                .leftJoin(YwMaterial.class,YwMaterial::getId,YwStock::getMaterialId)
                .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
                .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getName,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
                .like(StringUtils.isNotBlank(model.getMaterialCode()),YwMaterial::getCode,model.getMaterialCode())
                .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getCode,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
                .like(StringUtils.isNotBlank(model.getMaterialAttr()),YwMaterial::getAttr,model.getMaterialAttr())
                .orderByAsc(YwMaterial::getCode)
        ;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
@@ -145,7 +145,8 @@
                .eq(Objects.nonNull(model.getStocktakingId()),YwStocktakingRecord::getStocktakingId,model.getStocktakingId())
                .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getCode,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
                .eq(Objects.nonNull(model.getType()),YwStocktakingRecord::getType,model.getType())
                .eq(Objects.nonNull(model.getStatus()),YwStocktakingRecord::getStatus,model.getStatus());
                .eq(Objects.nonNull(model.getStatus()),YwStocktakingRecord::getStatus,model.getStatus())
                .eq(Objects.nonNull(model.getMaterialQrcode()),YwMaterial::getQrcode,model.getMaterialQrcode());
        IPage iPage = ywStocktakingRecordMapper.selectJoinPage(page, YwStocktakingRecord.class,queryWrapper);
        return PageData.from(iPage);
    }
@@ -168,7 +169,7 @@
        }
        LoginUserInfo loginUserInfo = ywStocktakingRecord.getLoginUserInfo();
        YwStocktakingRecord model = ywStocktakingRecordMapper.selectById(ywStocktakingRecord.getId());
        if(Objects.nonNull(model)){
        if(Objects.isNull(model)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        YwStocktaking ywStocktaking = ywStocktakingMapper.selectById(ywStocktakingRecord.getStocktakingId());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -14,8 +15,10 @@
import com.doumee.dao.business.YwStocktakingRecordMapper;
import com.doumee.dao.business.YwWarehouseMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Notices;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwStocktakingService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -30,10 +33,7 @@
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -61,6 +61,9 @@
    private NoticesJoinMapper noticesJoinMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    @Override
@@ -79,9 +82,16 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到仓库数据");
        }
        //判断当前仓库当前日期是否存在盘点单
        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda().eq(YwStocktaking::getIsdeleted,Constants.ZERO).eq(YwStocktaking::getStatus,Constants.ZERO)
                .eq(YwStocktaking::getWarehouseId,ywStocktaking.getWarehouseId()).apply(" DATE(PLAN_DATE) = '" + DateUtil.formatDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd") +"'" ))>0){
        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda()
                .eq(YwStocktaking::getIsdeleted,Constants.ZERO)
                .in(YwStocktaking::getStatus,Constants.ZERO,Constants.ONE)
                .eq(YwStocktaking::getWarehouseId,ywStocktaking.getWarehouseId())
                .apply(" DATE(PLAN_DATE) = '" + DateUtil.formatDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd") +"'" ))>0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"["+DateUtil.formatDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd")+"]["+ywWarehouse.getName()+"]已有盘点单,不可重复发起盘点");
        }
        SystemUser systemUser = systemUserMapper.selectById(ywStocktaking.getUserId());
        if(Objects.isNull(systemUser)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到盘点人信息");
        }
        LoginUserInfo loginUserInfo = ywStocktaking.getLoginUserInfo();
        ywStocktaking.setCreator(loginUserInfo.getId());
@@ -103,6 +113,14 @@
        notices.setType(notices.getObjType());
        notices.setUserId(ywStocktaking.getUserId());
        notices.setStatus(Constants.ZERO);
        //整理json数据
        Map<String,Object> jsonMap = new HashMap<>();
        jsonMap.put("key1","盘点单"+ywStocktaking.getCode());
        jsonMap.put("key2", DateUtil.getFomartDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd"));
        jsonMap.put("key3", ywWarehouse.getName());
        jsonMap.put("key4", systemUser.getRealname());
        notices.setParam2(JSONObject.toJSONString(jsonMap));
        notices.setParam3(Constants.ZERO+"");
        noticesJoinMapper.insert(notices);
        return ywStocktaking.getId();
    }
@@ -122,7 +140,8 @@
                    .eq(YwStocktaking::getId,id)
            );
            //标记待办删除
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda().set(Notices::getIsdeleted,Constants.ONE)
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getIsdeleted,Constants.ONE)
                    .eq(Notices::getIsdeleted,Constants.ZERO)
                    .eq(Notices::getObjType,Constants.ZERO)
                    .eq(Notices::getObjId,id)
@@ -147,7 +166,8 @@
                    .set(YwStocktaking::getEditor,loginUserInfo.getId())
                    .set(YwStocktaking::getStatus,Constants.THREE).eq(YwStocktaking::getId,id));
            //标记待办删除
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda().set(Notices::getIsdeleted,Constants.ONE)
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getIsdeleted,Constants.ONE)
                    .eq(Notices::getIsdeleted,Constants.ZERO)
                    .eq(Notices::getObjType,Constants.ZERO)
                    .eq(Notices::getObjId,id)
@@ -164,7 +184,7 @@
        if(Objects.isNull(model)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到盘点单数据");
        }
        if(model.getPlanDate().getTime()<System.currentTimeMillis()){
        if(model.getPlanDate().getTime()>System.currentTimeMillis()){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未到开始时间,无法进行该操作");
        }
        if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)&&Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
@@ -178,7 +198,8 @@
            //标记待办已处理
            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                    .set(Notices::getStatus,Constants.ONE)
                    .set(Notices::getParam3,Constants.ONE)
                    .eq(Notices::getStatus,Constants.ZERO)
                    .eq(Notices::getIsdeleted,Constants.ZERO)
                    .eq(Notices::getObjType,Constants.ZERO)
                    .eq(Notices::getObjId,id)
@@ -195,6 +216,7 @@
                    ywStocktakingRecord.setIsdeleted(Constants.ZERO);
                    ywStocktakingRecord.setStatus(Constants.ZERO);
                    ywStocktakingRecord.setMaterialId(ywStock.getMaterialId());
                    ywStocktakingRecord.setUserId(model.getUserId()+"");
                    ywStocktakingRecord.setStock(ywStock.getStock());
                    ywStocktakingRecord.setStocktakingId(model.getId());
                    ywStocktakingRecordList.add(ywStocktakingRecord);
@@ -209,7 +231,7 @@
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void finishById(Integer id, LoginUserInfo loginUserInfo) {
    public void finishById(Integer id, YwOutinboundServiceImpl ywOutinboundService, LoginUserInfo loginUserInfo) {
        YwStocktaking model = ywStocktakingMapper.selectById(id);
        if(Objects.isNull(model)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到盘点单数据");
@@ -222,6 +244,10 @@
        }
        List<YwStocktakingRecord> recordList = ywStocktakingRecordMapper.selectList(new QueryWrapper<YwStocktakingRecord>().lambda()
                .eq(YwStocktakingRecord::getStocktakingId,id).eq(YwStocktakingRecord::getIsdeleted,Constants.ZERO));
        //盘盈数据列表
        List<YwOutinboundRecord> inBoundRecordList = new ArrayList<>();
        //盘亏数据列表
        List<YwOutinboundRecord> outBoundRecordList = new ArrayList<>();
        for (YwStocktakingRecord ywStocktakingRecord:recordList) {
            //提交时 æœªè¿›è¡Œç›˜ç‚¹çš„æ˜Žç»†æ•°æ®
            if(Constants.equalsInteger(ywStocktakingRecord.getStatus(),Constants.ZERO)){
@@ -230,18 +256,30 @@
                        .set(YwStocktakingRecord::getUserId,loginUserInfo.getId())
                        .eq(YwStocktakingRecord::getId,ywStocktakingRecord.getId())
                );
                continue;
            }
            //查询库存信息 è¿›è¡Œåº“存更新
            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getMaterialId,ywStocktakingRecord.getMaterialId())
                    .eq(YwStock::getWarehouseId,model.getWarehouseId()).eq(YwStock::getStock,ywStocktakingRecord.getStock()));
            if(Objects.isNull(ywStock)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"库存信息异常,请联系管理员");
            if(ywStock.getStock().compareTo(ywStocktakingRecord.getActStock())<Constants.ZERO ){
                YwOutinboundRecord ywOutinboundRecord = new YwOutinboundRecord();
                ywOutinboundRecord.setMaterialId(ywStock.getMaterialId());
                ywOutinboundRecord.setStock(ywStocktakingRecord.getActStock().subtract(ywStock.getStock()));
                inBoundRecordList.add(ywOutinboundRecord);
            }else if(ywStock.getStock().compareTo(ywStocktakingRecord.getActStock())>Constants.ZERO ){
                YwOutinboundRecord ywOutinboundRecord = new YwOutinboundRecord();
                ywOutinboundRecord.setMaterialId(ywStock.getMaterialId());
                ywOutinboundRecord.setStock(ywStock.getStock().subtract(ywStocktakingRecord.getActStock()));
                outBoundRecordList.add(ywOutinboundRecord);
            }
            if(ywStocktakingRecord.getActStock().compareTo(BigDecimal.ZERO)==Constants.ZERO){
                ywStockMapper.deleteById(ywStock.getId());
            }else {
                ywStockMapper.update(new UpdateWrapper<YwStock>().lambda().set(YwStock::getStock,ywStocktakingRecord.getActStock()).eq(YwStock::getId,ywStock.getId()));
            }
//            if(Objects.isNull(ywStock)){
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"库存信息异常,请联系管理员");
//            }
//            if(ywStocktakingRecord.getActStock().compareTo(BigDecimal.ZERO)==Constants.ZERO){
//                ywStockMapper.deleteById(ywStock.getId());
//            }else {
//                ywStockMapper.update(new UpdateWrapper<YwStock>().lambda().set(YwStock::getStock,ywStocktakingRecord.getActStock()).eq(YwStock::getId,ywStock.getId()));
//            }
        }
        ywStocktakingMapper.update(new UpdateWrapper<YwStocktaking>().lambda()
                .set(YwStocktaking::getEditDate,DateUtil.getCurrDateTime())
@@ -250,6 +288,40 @@
                .set(YwStocktaking::getEditor,loginUserInfo.getId())
                .set(YwStocktaking::getStatus,Constants.TWO)
                .eq(YwStocktaking::getId,model.getId()));
        //生产盘盈的入库单
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(inBoundRecordList)){
            YwOutinbound ywOutinbound = new YwOutinbound();
            ywOutinbound.setDoneDate(new Date());
            ywOutinbound.setWarehouseId(model.getWarehouseId());
            ywOutinbound.setType(4);
            ywOutinbound.setOrigin(1);
            ywOutinbound.setContent("盘点单【"+model.getCode() +"】处理生成盘盈数据");
            ywOutinbound.setStatus(Constants.ZERO);
            ywOutinbound.setRecordList(inBoundRecordList);
            ywOutinbound.setLoginUserInfo(loginUserInfo);
            ywOutinboundService.create(ywOutinbound);
        }
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(outBoundRecordList)){
            YwOutinbound ywOutinbound = new YwOutinbound();
            ywOutinbound.setDoneDate(new Date());
            ywOutinbound.setWarehouseId(model.getWarehouseId());
            ywOutinbound.setType(10);
            ywOutinbound.setOrigin(1);
            ywOutinbound.setContent("盘点单【"+model.getCode() +"】处理生成盘亏数据");
            ywOutinbound.setStatus(Constants.ZERO);
            ywOutinbound.setRecordList(outBoundRecordList);
            ywOutinbound.setLoginUserInfo(loginUserInfo);
            ywOutinboundService.create(ywOutinbound);
        }
        //标记待办已完成
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getStatus,Constants.ONE)
                .set(Notices::getParam3,Constants.TWO)
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getObjType,Constants.ZERO)
                .eq(Notices::getObjId,id)
        );
    }
@@ -282,6 +354,12 @@
        if(Objects.isNull(model)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到盘点单数据");
        }
        SystemUser systemUser = systemUserMapper.selectById(ywStocktaking.getUserId());
        if(Objects.isNull(systemUser)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到盘点人信息");
        }
        YwWarehouse ywWarehouse = ywWarehouseMapper.selectById(ywStocktaking.getWarehouseId());
        if(Objects.isNull(ywWarehouse)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到仓库数据");
@@ -301,7 +379,7 @@
        //标记待办已处理
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getStatus,Constants.ONE)
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getIsdeleted,Constants.ONE)
                .eq(Notices::getObjType,Constants.ZERO)
                .eq(Notices::getObjId,ywStocktaking.getId())
        );
@@ -319,6 +397,14 @@
        notices.setType(notices.getObjType());
        notices.setUserId(ywStocktaking.getUserId());
        notices.setStatus(Constants.ZERO);
        //整理json数据
        Map<String,Object> jsonMap = new HashMap<>();
        jsonMap.put("key1","盘点单"+ywStocktaking.getCode());
        jsonMap.put("key2", DateUtil.getFomartDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd"));
        jsonMap.put("key3", ywWarehouse.getName());
        jsonMap.put("key4", systemUser.getRealname());
        notices.setParam2(JSONObject.toJSONString(jsonMap));
        notices.setParam3(Constants.ZERO+"");
        noticesJoinMapper.insert(notices);
@@ -343,8 +429,8 @@
    public YwStocktaking getDetail(Integer id) {
        MPJLambdaWrapper<YwStocktaking> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(YwStocktaking.class)
                .select(" s.name ", YwStocktaking::getUserName)
                .select(" s1.name ",YwStocktaking::getCreateName)
                .select(" s.realname ", YwStocktaking::getUserName)
                .select(" s1.realname ",YwStocktaking::getCreateName)
                .selectAs(YwWarehouse::getName,YwStocktaking::getWarehouseName)
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStocktaking::getWarehouseId)
                .leftJoin("system_user s on t.user_id = s.id")
@@ -383,8 +469,8 @@
        Utils.MP.blankToNull(pageWrap.getModel());
        YwStocktaking model = pageWrap.getModel();
        queryWrapper.selectAll(YwStocktaking.class)
                .select(" s.name ", YwStocktaking::getUserName)
                .select(" s1.name ",YwStocktaking::getCreateName)
                .select(" s.realname ", YwStocktaking::getUserName)
                .select(" s1.realname ",YwStocktaking::getCreateName)
                .selectAs(YwWarehouse::getName,YwStocktaking::getWarehouseName)
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStocktaking::getWarehouseId)
                .leftJoin("system_user s on t.user_id = s.id")
@@ -392,10 +478,10 @@
                .eq(YwStocktaking::getIsdeleted,Constants.ZERO)
                .like(StringUtils.isNotBlank(model.getName()),YwStocktaking::getName,model.getName())
                .eq(Objects.nonNull(model.getStatus()),YwStocktaking::getStatus,model.getStatus())
                .eq(Objects.nonNull(model.getUserId()),YwStocktaking::getUserId,model.getUserId())
                .orderByAsc(YwStocktaking::getStatus)
                .orderByDesc(YwStocktaking::getPlanDate)
        ;
        IPage iPage = ywStocktakingMapper.selectJoinPage(page, YwStocktaking.class,queryWrapper);
        return PageData.from(iPage);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
@@ -1,10 +1,13 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwTempConfigMapper;
import com.doumee.dao.business.dto.YwCallTempDataDTO;
import com.doumee.dao.business.model.YwTempConfig;
import com.doumee.dao.business.vo.YwCallTempDataVO;
import com.doumee.service.business.YwTempConfigService;
@@ -12,11 +15,14 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -182,6 +188,66 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void updTempConfig(YwCallTempDataDTO ywCallTempDataDTO){
        if(Objects.isNull(ywCallTempDataDTO)
            || Objects.isNull(ywCallTempDataDTO.getSmsTemp())
            || Objects.isNull(ywCallTempDataDTO.getEmailTemp())
            || Objects.isNull(ywCallTempDataDTO.getLeaseTemp())
            || Objects.isNull(ywCallTempDataDTO.getOtherTemp())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        YwTempConfig smsTemp = ywCallTempDataDTO.getSmsTemp();
        if(Objects.isNull(smsTemp.getId())
            || Objects.isNull(smsTemp.getTitle())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"短息模板参数错误");
        }
        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
                .set(YwTempConfig::getTitle,smsTemp.getTitle())
                .eq(YwTempConfig::getId,smsTemp.getId())
        );
        YwTempConfig emailTemp = ywCallTempDataDTO.getEmailTemp();
        if(Objects.isNull(emailTemp.getId())
                || Objects.isNull(emailTemp.getTitle())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"邮件模板参数错误");
        }
        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
                .set(YwTempConfig::getTitle,emailTemp.getTitle())
                .eq(YwTempConfig::getId,emailTemp.getId())
        );
        YwTempConfig leasesTemp = ywCallTempDataDTO.getLeaseTemp();
        if(Objects.isNull(leasesTemp.getId())
                || Objects.isNull(leasesTemp.getTitle())
                || StringUtils.isBlank(leasesTemp.getUrl())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"租赁通知单模板参数错误");
        }
        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
                .set(YwTempConfig::getTitle,leasesTemp.getTitle())
                .set(YwTempConfig::getUrl,leasesTemp.getUrl())
                .eq(YwTempConfig::getId,leasesTemp.getId())
        );
        YwTempConfig otherTemp = ywCallTempDataDTO.getOtherTemp();
        if(Objects.isNull(otherTemp.getId())
                || Objects.isNull(otherTemp.getTitle())
                || StringUtils.isBlank(otherTemp.getUrl())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"其他通知单模板参数错误");
        }
        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
                .set(YwTempConfig::getTitle,otherTemp.getTitle())
                .set(YwTempConfig::getUrl,otherTemp.getUrl())
                .eq(YwTempConfig::getId,otherTemp.getId())
        );
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
@@ -71,11 +71,11 @@
        if(Objects.isNull(ywWarehouse)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        //判断数据下是否存在资产数据
        //判断数据下是否存在物料数据
        if(ywStockMapper.selectCount(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
                .gt(YwStock::getStock,Constants.ZERO)
                .eq(YwStock::getWarehouseId,ywWarehouse.getId()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前仓库内有库存的资产,不可删除");
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前仓库内有库存的物料,不可删除");
        };
        ywWarehouseMapper.update(new UpdateWrapper<YwWarehouse>().lambda()
                .set(YwWarehouse::getEditDate, DateUtil.getCurrDateTime())
@@ -128,6 +128,12 @@
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //判断数据下是否存在物料数据
        if(ywStockMapper.selectCount(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
                .gt(YwStock::getStock,Constants.ZERO)
                .eq(YwStock::getWarehouseId,ywWarehouse.getId()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前仓库内有库存的物料,不可删除");
        };
        ywWarehouseMapper.update(new UpdateWrapper<YwWarehouse>().lambda().eq(YwWarehouse::getId,ywWarehouse.getId()).set(YwWarehouse::getStatus,ywWarehouse.getStatus()));
    }
@@ -177,13 +183,18 @@
                .like(StringUtils.isNotBlank(model.getName()),YwWarehouse::getName,model.getName())
                .eq(YwWarehouse::getIsdeleted,Constants.ZERO)
        ;
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
        if(CollectionUtils.isEmpty(pageWrap.getSorts())){
            queryWrapper.orderByAsc(YwWarehouse::getSortnum);
        }else{
            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                    queryWrapper.orderByDesc(sortData.getProperty());
                } else {
                    queryWrapper.orderByAsc(sortData.getProperty());
                }
            }
        }
        IPage iPage = ywWarehouseMapper.selectJoinPage(page,YwWarehouse.class,queryWrapper);
        return PageData.from(iPage);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -16,7 +17,9 @@
import com.doumee.dao.business.vo.YwWorkorderDataVO;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.Notices;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwWorkorderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -60,6 +63,9 @@
    private YwBuildingMapper ywBuildingMapper;
    @Autowired
    private YwFloorMapper ywFloorMapper;
    @Autowired
    private NoticesJoinMapper noticesJoinMapper;
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -194,6 +200,30 @@
        update.setDispatchInfo(ywWorkorder.getDispatchInfo());
        update.setDealUserId(ywWorkorder.getDealUserId());
        ywWorkorderMapper.updateById(update);
        //添加待办信息
        Notices notices = new Notices();
        notices.setCreateDate(new Date());
        notices.setCreator(update.getEditor());
        notices.setIsdeleted(Constants.ZERO);
        notices.setParam1(DateUtil.formatDate(model.getCreateDate(),"yyyy-MM-dd"));
        notices.setTitle("工单待办");
        notices.setObjId(update.getId());
        notices.setObjType(Constants.TWO);
        notices.setType(notices.getObjType());
        notices.setUserId(ywWorkorder.getDealUserId());
        notices.setStatus(Constants.ZERO);
        //整理json数据
        Map<String,Object> jsonMap = new HashMap<>();
        jsonMap.put("key1", model.getBuildingName()+"/"+model.getFloorName());
        jsonMap.put("key2", DateUtil.getFomartDate(model.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
        jsonMap.put("key3", Constants.equalsInteger(model.getAreaType(),Constants.ZERO)?"室内维修":"公共区域");
        jsonMap.put("key4", model.getCategoryParentName()+"/"+model.getCategoryName());
        notices.setParam2(JSONObject.toJSONString(jsonMap));
        notices.setParam3(Constants.ZERO+"");
        noticesJoinMapper.insert(notices);
        dealLogBiz(model,Constants.YwLogType.WORKORDER_DISPATCH,ywWorkorder.getLoginUserInfo().getRealname(),user.getRealname());//记录新建日志
    }
    @Override
@@ -220,6 +250,17 @@
        update.setDealDate(update.getEditDate());
        update.setDealInfo(ywWorkorder.getDealInfo());
        ywWorkorderMapper.updateById(update);
        //标记待办已处理
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getStatus,Constants.ONE)
                .set(Notices::getParam3,Constants.TWO)
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getObjType,Constants.TWO)
                .eq(Notices::getObjId,update.getId())
        );
        List<Multifile> fileList = new ArrayList<>();
        if(ywWorkorder.getDealFileList()!=null && ywWorkorder.getDealFileList().size()>0){
@@ -330,8 +371,9 @@
                .selectAs(Company::getName,YwWorkorder::getDealUserCompany)
                .select("t3.realname",YwWorkorder::getCreatorName)
                .select("t3.mobile",YwWorkorder::getCreatorMobile)
                .select("t9.name",YwWorkorder::getCreatorCompany)
                .selectAs(Category::getName,YwWorkorder::getCategoryName)
                .select("c.name",YwWorkorder::getCreatorCompany)
                .select("ct.name",YwWorkorder::getCategoryName)
                .select("ct1.name",YwWorkorder::getCategoryParentName)
                .selectAs(YwRoom::getName,YwWorkorder::getRoomName)
                .selectAs(YwRoom::getRoomNum,YwWorkorder::getRoomNum)
                .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
@@ -345,7 +387,9 @@
                .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId)
                .leftJoin(YwProject.class,YwProject::getId,YwWorkorder::getProjectId)
                .leftJoin(" company t9 on t9.id = t1.company_id  ")
                .leftJoin(" company c on c.id = t1.company_id  ")
                .leftJoin(" category ct on ct.id = t.cate_id  ")
                .leftJoin(" category ct1 on ct1.id = ct.PARENT_ID  ")
                .eq(YwWorkorder::getId,id);
        YwWorkorder model = ywWorkorderMapper.selectJoinOne(YwWorkorder.class,queryWrapper);
        initFiles(model);//读取附件信息
@@ -551,7 +595,7 @@
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.THREE),YwWorkorder::getRoomId,dto.getQueryId()));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            ywWorkorderDataVO.setAmount(list.size());
            ywWorkorderDataVO.setMonthAmount(list.stream().filter(i-> DateUtil.formatDate(i.getSubmitDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setMonthAmount(list.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setWaitDealAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ONE)).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setWaitAssignAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
        }