old mode 100644
new mode 100755
| | |
| | | import com.java110.core.annotation.Java110Transactional; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.dto.RoomDto; |
| | | import com.java110.dto.community.CommunityDto; |
| | | import com.java110.dto.fee.FeeAttrDto; |
| | | import com.java110.dto.fee.FeeConfigDto; |
| | | import com.java110.dto.fee.FeeDto; |
| | | import com.java110.dto.feeFormula.FeeFormulaDto; |
| | | import com.java110.dto.owner.OwnerDto; |
| | | import com.java110.fee.bmo.importFee.IFeeSharingBMO; |
| | | import com.java110.intf.IImportFeeDetailInnerServiceSMO; |
| | | import com.java110.intf.community.ICommunityInnerServiceSMO; |
| | | import com.java110.intf.community.IRoomInnerServiceSMO; |
| | | import com.java110.intf.fee.*; |
| | | import com.java110.intf.user.IOwnerInnerServiceSMO; |
| | | import com.java110.po.fee.FeeAttrPo; |
| | | import com.java110.po.fee.PayFeeConfigPo; |
| | | import com.java110.po.fee.PayFeePo; |
| | |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.BeanConvertUtil; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import com.java110.vo.ResultVo; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.ResponseEntity; |
| | |
| | | import javax.script.ScriptEngineManager; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Service("feeSharingBMOImpl") |
| | | public class FeeSharingBMOImpl implements IFeeSharingBMO { |
| | |
| | | @Autowired |
| | | private IImportFeeDetailInnerServiceSMO importFeeDetailInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private ICommunityInnerServiceSMO communityInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl; |
| | | |
| | | /** |
| | | * 添加小区信息 |
| | | * |
| | |
| | | public ResponseEntity<String> share(JSONObject reqJson) { |
| | | |
| | | |
| | | CommunityDto communityDto = new CommunityDto(); |
| | | communityDto.setCommunityId(reqJson.getString("communityId")); |
| | | List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto); |
| | | |
| | | Assert.listOnlyOne(communityDtos, "未找到小区信息"); |
| | | |
| | | String scope = reqJson.getString("scope"); |
| | | RoomDto roomDto = new RoomDto(); |
| | | roomDto.setState(RoomDto.STATE_SELL); // 已售房屋 |
| | | String[] states = null; |
| | | if (reqJson.containsKey("roomState") && reqJson.getString("roomState").split(",").length > 0) { |
| | | states = reqJson.getString("roomState").split(","); |
| | | roomDto.setStates(states); |
| | | } else { |
| | | roomDto.setStates(new String[]{RoomDto.STATE_SELL, RoomDto.STATE_SHOP_SELL}); // 已经入住 |
| | | } |
| | | if (reqJson.containsKey("roomType")) { |
| | | roomDto.setRoomType(reqJson.getString("roomType")); |
| | | } |
| | | if (reqJson.containsKey("feeLayer") && !"全部".equals(reqJson.getString("feeLayer"))) { |
| | | String[] layers = reqJson.getString("feeLayer").split("#"); |
| | | roomDto.setLayers(layers); |
| | | } |
| | | List<RoomDto> roomDtos = null; |
| | | if ("1001".equals(scope)) {//小区 |
| | | roomDto.setCommunityId(reqJson.getString("objId")); |
| | |
| | | } |
| | | |
| | | if (roomDtos == null || roomDtos.size() < 1) { |
| | | throw new IllegalArgumentException("未找到相应房屋公摊费用"); |
| | | throw new IllegalArgumentException("未找到相应房屋"); |
| | | } |
| | | |
| | | //房屋刷入业主信息 |
| | | List<String> roomIds = new ArrayList<>(); |
| | | for (RoomDto tmpRoomDto : roomDtos) { |
| | | roomIds.add(tmpRoomDto.getRoomId()); |
| | | } |
| | | OwnerDto ownerDto = new OwnerDto(); |
| | | ownerDto.setCommunityId(roomDtos.get(0).getCommunityId()); |
| | | ownerDto.setRoomIds(roomIds.toArray(new String[roomIds.size()])); |
| | | List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto); |
| | | for (RoomDto tmpRoomDto : roomDtos) { |
| | | for (OwnerDto tmpOwnerDto : ownerDtos) { |
| | | if (tmpRoomDto.getRoomId().equals(tmpOwnerDto.getRoomId())) { |
| | | tmpRoomDto.setOwnerId(tmpOwnerDto.getOwnerId()); |
| | | tmpRoomDto.setOwnerName(tmpOwnerDto.getName()); |
| | | tmpRoomDto.setLink(tmpOwnerDto.getLink()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | FeeConfigDto feeConfigDto = new FeeConfigDto(); |
| | |
| | | String formulaValue = deakFormula(feeFormulaDtos.get(0)); |
| | | |
| | | //公摊费用到房屋 |
| | | sharingFeeToRoom(formulaValue, Double.parseDouble(feeFormulaDtos.get(0).getPrice()), roomDtos, reqJson, feeConfigDto); |
| | | sharingFeeToRoom(formulaValue, Double.parseDouble(feeFormulaDtos.get(0).getPrice()), roomDtos, reqJson, feeConfigDto, communityDtos.get(0),states); |
| | | |
| | | |
| | | return ResultVo.success(); |
| | |
| | | * @param roomDtos |
| | | */ |
| | | private void sharingFeeToRoom(String formulaValue, double price, List<RoomDto> roomDtos, |
| | | JSONObject reqJson, FeeConfigDto feeConfigDto) { |
| | | JSONObject reqJson, FeeConfigDto feeConfigDto, CommunityDto communityDto,String[] states) { |
| | | |
| | | |
| | | List<PayFeePo> payFeePos = new ArrayList<>(); |
| | | List<FeeAttrPo> feeAttrPos = new ArrayList<>(); |
| | | List<ImportFeeDetailPo> importFeeDetailPos = new ArrayList<>(); |
| | | String importFeeId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId); |
| | | Map<String, Integer> floorRooms = new HashMap(); |
| | | Map<String, Integer> unitRooms = new HashMap(); |
| | | for (RoomDto roomDto : roomDtos) { |
| | | doSharingFeeToRoom(formulaValue, price, roomDto, reqJson, payFeePos, feeConfigDto, feeAttrPos, importFeeId, importFeeDetailPos); |
| | | doSharingFeeToRoom(formulaValue, price, roomDto, reqJson, payFeePos, feeConfigDto, feeAttrPos, |
| | | importFeeId, importFeeDetailPos, floorRooms, unitRooms, communityDto,states); |
| | | } |
| | | |
| | | feeInnerServiceSMOImpl.saveFee(payFeePos); |
| | |
| | | private void doSharingFeeToRoom(String formulaValue, double price, RoomDto roomDto, JSONObject reqJson, |
| | | List<PayFeePo> payFeePos, FeeConfigDto feeConfigDto, |
| | | List<FeeAttrPo> feeAttrPos, String importFeeId, |
| | | List<ImportFeeDetailPo> importFeeDetailPos) { |
| | | List<ImportFeeDetailPo> importFeeDetailPos, |
| | | Map<String, Integer> floorRooms, |
| | | Map<String, Integer> unitRooms, |
| | | CommunityDto communityDto, |
| | | String[] states) { |
| | | |
| | | if (!floorRooms.containsKey(roomDto.getFloorId())) { |
| | | RoomDto tmpRoomDto = new RoomDto(); |
| | | tmpRoomDto.setCommunityId(communityDto.getCommunityId()); |
| | | tmpRoomDto.setFloorId(roomDto.getFloorId()); |
| | | tmpRoomDto.setStates(states); |
| | | int roomCount = roomInnerServiceSMOImpl.queryRoomsCount(tmpRoomDto); |
| | | floorRooms.put(roomDto.getFloorId(), roomCount); |
| | | } |
| | | |
| | | if (!unitRooms.containsKey(roomDto.getUnitId())) { |
| | | RoomDto tmpRoomDto = new RoomDto(); |
| | | tmpRoomDto.setCommunityId(communityDto.getCommunityId()); |
| | | tmpRoomDto.setUnitId(roomDto.getUnitId()); |
| | | tmpRoomDto.setStates(states); |
| | | int roomCount = roomInnerServiceSMOImpl.queryRoomsCount(tmpRoomDto); |
| | | unitRooms.put(roomDto.getUnitId(), roomCount); |
| | | } |
| | | |
| | | long floorRoomCount = floorRooms.get(roomDto.getFloorId()); |
| | | long unitRoomCount = unitRooms.get(roomDto.getUnitId()); |
| | | |
| | | |
| | | String orgFormulaValue = formulaValue; |
| | | formulaValue = formulaValue.replace("T", reqJson.getString("totalDegrees")) |
| | | .replace("F", roomDto.getFloorArea()) |
| | | .replace("U", roomDto.getUnitArea()) |
| | | .replace("R", roomDto.getBuiltUpArea()) |
| | | .replace("X", roomDto.getFeeCoefficient()); |
| | | formulaValue = formulaValue.replaceAll("T", reqJson.getString("totalDegrees")) |
| | | .replaceAll("F", roomDto.getFloorArea()) |
| | | .replaceAll("U", roomDto.getUnitArea()) |
| | | .replaceAll("R", roomDto.getBuiltUpArea()) |
| | | .replaceAll("X", roomDto.getFeeCoefficient()) |
| | | .replaceAll("L", floorRoomCount + "") |
| | | .replaceAll("D", unitRoomCount + "") |
| | | .replaceAll("C", communityDto.getCommunityArea()); |
| | | |
| | | |
| | | ScriptEngineManager manager = new ScriptEngineManager(); |
| | | ScriptEngine engine = manager.getEngineByName("JavaScript"); |
| | |
| | | BigDecimal priceObj = new BigDecimal(price); |
| | | priceObj = valueObj.multiply(priceObj).setScale(2, BigDecimal.ROUND_HALF_EVEN); |
| | | amount = priceObj.doubleValue(); |
| | | value = valueObj.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue() + ""; |
| | | } catch (Exception e) { |
| | | throw new IllegalArgumentException("公式计算异常,公式为【" + orgFormulaValue + "】,计算 【" + formulaValue + "】异常"); |
| | | } |
| | |
| | | feeAttrPo.setFeeId(payFeePo.getFeeId()); |
| | | feeAttrPos.add(feeAttrPo); |
| | | |
| | | |
| | | feeAttrPo = new FeeAttrPo(); |
| | | feeAttrPo.setCommunityId(reqJson.getString("communityId")); |
| | | feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); |
| | | feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME); |
| | | feeAttrPo.setValue(reqJson.getString("endTime")); |
| | | feeAttrPo.setFeeId(payFeePo.getFeeId()); |
| | | feeAttrPos.add(feeAttrPo); |
| | | |
| | | if (!StringUtil.isEmpty(roomDto.getOwnerId())) { |
| | | feeAttrPo = new FeeAttrPo(); |
| | | feeAttrPo.setCommunityId(reqJson.getString("communityId")); |
| | | feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); |
| | | feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID); |
| | | feeAttrPo.setValue(roomDto.getOwnerId()); |
| | | feeAttrPo.setFeeId(payFeePo.getFeeId()); |
| | | feeAttrPos.add(feeAttrPo); |
| | | |
| | | feeAttrPo = new FeeAttrPo(); |
| | | feeAttrPo.setCommunityId(reqJson.getString("communityId")); |
| | | feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); |
| | | feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME); |
| | | feeAttrPo.setValue(roomDto.getOwnerName()); |
| | | feeAttrPo.setFeeId(payFeePo.getFeeId()); |
| | | feeAttrPos.add(feeAttrPo); |
| | | |
| | | feeAttrPo = new FeeAttrPo(); |
| | | feeAttrPo.setCommunityId(reqJson.getString("communityId")); |
| | | feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); |
| | | feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK); |
| | | feeAttrPo.setValue(roomDto.getLink()); |
| | | feeAttrPo.setFeeId(payFeePo.getFeeId()); |
| | | feeAttrPos.add(feeAttrPo); |
| | | } |
| | | |
| | | String formulaValueRemark = orgFormulaValue.replace("T", reqJson.getString("totalDegrees") + "<总用量>") |
| | | .replace("F", roomDto.getFloorArea() + "<" + roomDto.getFloorNum() + "栋面积>") |
| | | .replace("U", roomDto.getUnitArea() + "<" + roomDto.getUnitNum() + "单元面积>") |
| | | .replace("R", roomDto.getBuiltUpArea() + "<" + roomDto.getRoomNum() + "室面积>") |
| | | .replace("C", communityDto.getCommunityArea() + "<小区面积>") |
| | | .replace("X", roomDto.getFeeCoefficient() + "<" + roomDto.getRoomNum() + "室算费系数>"); |
| | | |
| | | formulaValueRemark += (" * " + price + "<单价>"); |
| | |
| | | importFeeDetailPo.setState("1000"); |
| | | importFeeDetailPo.setImportFeeId(importFeeId); |
| | | importFeeDetailPo.setRemark("公摊用量:" + value); |
| | | importFeeDetailPo.setObjType(FeeDto.PAYER_OBJ_TYPE_ROOM); |
| | | importFeeDetailPo.setObjId(roomDto.getRoomId()); |
| | | importFeeDetailPo.setObjName(RoomDto.ROOM_TYPE_ROOM.equals(roomDto.getRoomType()) ? roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + roomDto.getRoomNum() : |
| | | roomDto.getFloorNum() + "-" + roomDto.getRoomNum()); |
| | | importFeeDetailPos.add(importFeeDetailPo); |
| | | } |
| | | |