diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxContractBaseController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxContractBaseController.java index abaa55d03..b309ba36a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxContractBaseController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxContractBaseController.java @@ -1,17 +1,26 @@ package com.iformall.controller.contract; import java.util.HashMap; +import java.util.List; import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.WxFlowModel; +import com.iformall.domain.po.WxRentContract; import com.iformall.enums.EnumFlowContractType; import com.iformall.enums.EnumFlowKey; +import com.iformall.enums.EnumRentShopType; +import com.iformall.service.WxFlowService; @RestController public class WxContractBaseController extends BaseController{ + @Autowired + private WxFlowService wxFlowService; + protected Map generateFlowParams(EnumFlowKey flowType,EnumFlowContractType contractType,String remark,Long contractId) { Map map = new HashMap(); map.put("businessType", flowType.getCode()); @@ -23,4 +32,19 @@ public class WxContractBaseController extends BaseController{ map.put("variables", variables); return map; } + + protected boolean rentContractHasWorkFlow(WxRentContract wxRentContract) { + WxFlowModel wxFlowModel = new WxFlowModel(); + if (wxRentContract.getRentShopType().intValue() == EnumRentShopType.SHOP.getCode().intValue()) { + wxFlowModel.setFlowType(EnumFlowContractType.RENT.getCode()); + }else if (wxRentContract.getRentShopType().intValue() == EnumRentShopType.POINT.getCode().intValue()) { + wxFlowModel.setFlowType(EnumFlowContractType.RENT_POINT.getCode()); + } + wxFlowModel.updateTenantInfo(wxRentContract); + List flows = wxFlowService.getModelBybusiness(wxFlowModel); + if (null != flows && flows.size() > 0) { + return true; + } + return false; + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java index 3e200c4e7..f4cf16c77 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java @@ -16,6 +16,7 @@ import com.iformall.enums.EnumFromType; import com.iformall.enums.EnumIsPreview; import com.iformall.enums.EnumRentContractAppStatus; import com.iformall.enums.EnumRentContractStatus; +import com.iformall.enums.EnumRentShopType; import com.iformall.enums.EnumRentStartType; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillPropertyMapper; @@ -71,14 +72,12 @@ public class WxRentContractController extends WxContractBaseController { @Autowired private WxShopService wxShopService; - - + @UserDataRuleAnnotation("rent_contract_list") @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) - @SystemControllerLog(description = "租赁合同-列表") public ResultData list(@ModelAttribute WxRentContract wxRentContract, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxRentContractController::list"); if (null == wxRentContract) { @@ -169,7 +168,6 @@ public class WxRentContractController extends WxContractBaseController { @GetMapping("/findById") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) - @SystemControllerLog(description = "租赁合同-查找") public ResultData findById(Long id) { logger.debug("[" + getIpAddr() + "] WxRentContractController::findById"); // 同步欠缴状态 @@ -232,7 +230,6 @@ public class WxRentContractController extends WxContractBaseController { @ApiImplicitParams({ @ApiImplicitParam(name = "merchantId", value = "merchantId", dataType = "Long", paramType = "query", required = true), @ApiImplicitParam(name = "contractId", value = "contractId", dataType = "Long", paramType = "query", required = true)}) - @SystemControllerLog(description = "租赁合同-终结合同") public ResultData merchantShops(Long merchantId,Long contractId) { List shopList = wxMerchantService.getMerchantShopIds(merchantId); @@ -297,7 +294,6 @@ public class WxRentContractController extends WxContractBaseController { */ @GetMapping("getXuQianRentContract") @ApiImplicitParams({}) - @SystemControllerLog(description = "查询续签合同") public ResultData getRentContractList(@ModelAttribute WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::getRentContractList"); wxRentContract.updateTenantInfo(getTenantInfo()); @@ -386,12 +382,56 @@ public class WxRentContractController extends WxContractBaseController { } + @GetMapping("effective") + @ApiImplicitParams({}) + @SystemControllerLog(description = "合同生效") + public ResultData effective(@ModelAttribute WxRentContract wxRentContract) { + logger.debug("[" + getIpAddr() + "] WxRentContractController::getRentContractList"); + WxRentContract contract = wxRentContractService.getSimpleDeatil(wxRentContract.getId()); + if (null == contract) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"租赁合同不存在"); + } + //查询是否有审批流程 + if(rentContractHasWorkFlow(contract)) { + return new ResultData(ErrorCode.FLOW_FAIL.getCode(),"租赁合同存在工作流,不允许直接生效。"); + } + + if (contract.getStatus().intValue() != EnumRentContractStatus.DRAFT.getCode().intValue()) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"租赁合同状态为草稿才能进行此操作"); + } + //店铺是否存在其他有效合同里面 + boolean result = wxRentContractService.hasOtherValidContractShop(contract); + if (result) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR,"店铺已经在其他计租中或者已签约未到期的合同里面了。"); + } + wxRentContractService.updateRentContractStatus(wxRentContract.getId()); + return new ResultData(Result.SUCCESS,"合同生效成功!"); + } + + @PostMapping("apply") + @SystemControllerLog(description = "租赁合同-提交审批") + public ResultData apply(@ModelAttribute WxRentContract wxRentContract) { + MallUserInfo user = getUser(); + + WxRentContract rentContract = wxRentContractMapper.selectById(wxRentContract.getId()); + if (null == rentContract) { + return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]未找到租金合同"); + } + + //查询是否有审批流程 + if(rentContractHasWorkFlow(rentContract)) { + return new ResultData(ErrorCode.FLOW_FAIL.getCode(),"租赁合同存在工作流,不允许直接生效。"); + } + + rentContract.setFlowParams(generateFlowParams(EnumFlowKey.NEW_RENT_CONTRACT, EnumFlowContractType.RENT, wxRentContract.getRemark(), wxRentContract.getId())); + return wxRentContractService.apply(rentContract,user); + } + @GetMapping("getRentContractList") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) - @SystemControllerLog(description = "租赁合同-列表") public ResultData getRentContractList(@ModelAttribute WxRentContract wxRentContract, Integer validStatus, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxRentContractController::getRentContractList"); if (null == wxRentContract) wxRentContract = new WxRentContract(); @@ -425,7 +465,6 @@ public class WxRentContractController extends WxContractBaseController { @GetMapping("/hasRentStatus") - @SystemControllerLog(description = "查询店铺租赁状态") public ResultData hasRentStatus(@ModelAttribute WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::hasRentStatus"); wxRentContract.updateTenantInfo(getTenantInfo()); @@ -433,7 +472,6 @@ public class WxRentContractController extends WxContractBaseController { } @GetMapping("/hasContractNumber") - @SystemControllerLog(description = "租赁合同-检查合同编号是否存在") public ResultData hasContractNumber(@ModelAttribute WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::hasContractNumber"); wxRentContract.updateTenantInfo(getTenantInfo()); @@ -441,7 +479,6 @@ public class WxRentContractController extends WxContractBaseController { } @GetMapping("getMerchantList") - @SystemControllerLog(description = "获取商户列表") @ApiImplicitParams({ @ApiImplicitParam(name = "shopType", value = "店铺类型 1:店铺 2:多经点位", dataType = "Integer", paramType = "query", required = true)}) public ResultData getMerchantList(Integer shopType) throws Exception{ @@ -475,7 +512,6 @@ public class WxRentContractController extends WxContractBaseController { * @return */ @PostMapping("buildBillPriceList") - @SystemControllerLog(description = "租赁合同-生成账单列表金额") public ResultData buildBillPriceList(@RequestBody WxRentContract wxRentContract) throws Exception{ logger.debug("[" + getIpAddr() + "] WxRentContractController::buildBillPriceList"); WxRentContract dbRent = wxRentContractMapper.selectById(wxRentContract.getId()); @@ -598,13 +634,7 @@ public class WxRentContractController extends WxContractBaseController { return wxRentContractService.getContractByContractNumber(wxRentContract); } - @PostMapping("apply") - @SystemControllerLog(description = "租赁合同-提交审批") - public ResultData apply(@ModelAttribute WxRentContract wxRentContract) { - MallUserInfo user = getUser(); - wxRentContract.setFlowParams(generateFlowParams(EnumFlowKey.NEW_RENT_CONTRACT, EnumFlowContractType.RENT, wxRentContract.getRemark(), wxRentContract.getId())); - return wxRentContractService.apply(wxRentContract,user); - } + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java index c5c042694..1e22db687 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java @@ -112,4 +112,11 @@ public interface WxRentContractService { WxRentContract getSimpleDeatil(Long id); + /** + * 查询合同的店铺是否已经在其他有效合同里面了 + * @param wxRentContract + * @return + */ + boolean hasOtherValidContractShop(WxRentContract wxRentContract); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 92e9c7351..f901f2d84 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2451,24 +2451,19 @@ public class WxRentContractServiceImpl implements WxRentContractService { } @Override - public ResultData apply(WxRentContract wxRentContract,MallUserInfo user) { + public ResultData apply(WxRentContract rentContract,MallUserInfo user) { //如果存在其他的草稿状态或者履约驳回状态的合同,不允许提交审批 - Integer count = wxRentContractMapper.getCanApplyCount(wxRentContract.getId()); + Integer count = wxRentContractMapper.getCanApplyCount(rentContract.getId()); if (null != count && count.intValue()>0) { return new ResultData(Result.ERROR, "当前存在其他草稿状态或者履约驳回的合同。清作废再提交审批。"); } - WxRentContract rentContract = wxRentContractMapper.selectById(wxRentContract.getId()); - if (null == rentContract) { - return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]未找到租金合同"); - } - rentContract.setFlowParams(wxRentContract.getFlowParams()); if (CollectionUtils.isEmpty(rentContract.getFlowParams())) { - return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]租金合同没有审批流程."); + return new ResultData(Result.ERROR, "编号["+rentContract.getId()+"]租金合同没有审批流程."); } if (rentContract.getMerchantId() == null) { - return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]租金合同没有绑定商户."); + return new ResultData(Result.ERROR, "编号["+rentContract.getId()+"]租金合同没有绑定商户."); } if ((EnumRentContractStatus.DRAFT.getCode().intValue() == rentContract.getStatus().intValue() @@ -2478,17 +2473,17 @@ public class WxRentContractServiceImpl implements WxRentContractService { ) { Integer bussinessType = (Integer) rentContract.getFlowParams().get("businessType"); if (null == bussinessType) { - return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]租金合同FlowParams错误,未找到businessType."); + return new ResultData(Result.ERROR, "编号["+rentContract.getId()+"]租金合同FlowParams错误,未找到businessType."); } WxFlowModel flowModle = wxFlowService.getModelByType(bussinessType, rentContract); if (null == flowModle) { - return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]租金合同配置的流程["+String.valueOf(bussinessType)+"]未找到流程模板."); + return new ResultData(Result.ERROR, "编号["+rentContract.getId()+"]租金合同配置的流程["+String.valueOf(bussinessType)+"]未找到流程模板."); } rentContract.getFlowParams().put("businessId", rentContract.getId().toString()); wxFlowService.start(rentContract.getFlowParams(), user.getId(), user.getName(), rentContract); return new ResultData(Result.SUCCESS,"提交审批成功",rentContract); }else { - return new ResultData(Result.ERROR, "编号["+wxRentContract.getId()+"]租金合同状态不能提交审批.允许提交的状态为 [草稿+未提交审批],[履约中+审批驳回]"); + return new ResultData(Result.ERROR, "编号["+rentContract.getId()+"]租金合同状态不能提交审批.允许提交的状态为 [草稿+未提交审批],[履约中+审批驳回]"); } } @@ -2550,4 +2545,27 @@ public class WxRentContractServiceImpl implements WxRentContractService { public WxRentContract getSimpleDeatil(Long id) { return wxRentContractMapper.selectById(id); } + + @Override + public boolean hasOtherValidContractShop(WxRentContract wxRentContract) { + WxRentContract wrc = new WxRentContract(); + wrc.setMerchantId(wxRentContract.getMerchantId()); + List validstatuss = new ArrayList(); + validstatuss.add(EnumRentContractStatus.PAING.getCode()); + validstatuss.add(EnumRentContractStatus.READY_FOR_PAING.getCode()); + wrc.setStatuss(validstatuss); + List contractList = wxRentContractMapper.findList(wrc); + boolean exists =false; + for (WxRentContract wc : contractList) { + if (null != wxRentContract.shopIdsByRentInfo()) { + for (Long sid : wxRentContract.shopIdsByRentInfo()) { + if(wc.getRentInfo().indexOf(String.valueOf(sid)) != -1 ) { + exists = true; + break; + } + } + } + } + return exists; + } }