Browse Source

fix

release_toaliyun_real
winter 1 year ago
parent
commit
f722473cec
4 changed files with 106 additions and 43 deletions
  1. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterMapper.java
  2. +39
    -17
      mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java
  3. +59
    -26
      mallinkService/src/main/java/com/iformall/service/impl/WxEnergyServiceImpl.java
  4. +6
    -0
      mallinkService/src/main/resources/mapper/WxEnergyMeterMapper.xml

+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterMapper.java View File

@@ -10,6 +10,8 @@ import java.util.List;
public interface WxEnergyMeterMapper extends CommonMapper<WxEnergyMeter, Long> {

List<WxEnergyMeter> findList(WxEnergyMeter wxBillRent);
List<Long> findIdList(WxEnergyMeter wxBillRent);

WxEnergyMeter selectById(@Param("id")Long id,@Param("tenantId")String tenantId);


+ 39
- 17
mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java View File

@@ -3,6 +3,7 @@ package com.iformall.service.helper;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

@@ -11,6 +12,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.iformall.domain.po.WxEnergyFees;
import com.iformall.domain.po.WxEnergyFeesShop;
import com.iformall.domain.po.WxEnergyFeesTime;
import com.iformall.domain.po.WxEnergyMeter;
@@ -19,7 +21,9 @@ import com.iformall.domain.po.WxMallBuilding;
import com.iformall.domain.po.WxMallFloor;
import com.iformall.domain.po.WxShop;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumEnergyMeterPhysicsType;
import com.iformall.enums.EnumYesOrNo;
import com.iformall.mapper.WxEnergyMeterMapper;
import com.iformall.mapper.WxEnergyMeterReadingMapper;
import com.iformall.service.WxMallBuildingService;
import com.iformall.service.WxMallFloorService;
@@ -31,6 +35,8 @@ public class WxEnergyHelper {
@Autowired
WxEnergyMeterReadingMapper wxEnergyMeterReadingMapper;
@Autowired
WxEnergyMeterMapper wxEnergyMeterMapper;
@Lazy
@Autowired
private WxMallBuildingService wxMallBuildingService;
@@ -77,7 +83,7 @@ public class WxEnergyHelper {
}
private String replaceFormulaData(String formula,BigDecimal totalArea,WxShop shop,Map<Long,BigDecimal> buildingAreaMap,
Map<Long,WxMallFloor> floorMap,Map<Long,BigDecimal> meterNumberMap) {
Map<Long, BigDecimal> floorAreaMap,Map<Long,BigDecimal> meterNumberMap) {
if (StringUtils.isBlank(formula)) {
return null;
}
@@ -97,14 +103,14 @@ public class WxEnergyHelper {
}
}
if (null != floorMap && null != floorAreaList && floorAreaList.size() > 0 ) {
if (null != floorAreaMap && null != floorAreaList && floorAreaList.size() > 0 ) {
for (int i = 0 ; i < floorAreaList.size(); i ++) {
String floorArea = floorAreaList.get(i);
String[] bs = floorArea.split("_");
if (null != bs && bs.length > 1) {
WxMallFloor floor = floorMap.get(Long.parseLong(bs[1]));
if (null != floor && null != floor.getOperatingArea()) {
formula = formula.replaceAll("{#floorArea_"+Long.parseLong(bs[1])+"#}", floor.getOperatingArea().toPlainString());
BigDecimal floorarea = floorAreaMap.get(Long.parseLong(bs[1]));
if (null != floorarea) {
formula = formula.replaceAll("{#floorArea_"+Long.parseLong(bs[1])+"#}", floorarea.toPlainString());
}
}
@@ -142,33 +148,49 @@ public class WxEnergyHelper {
* @param shopfee
* @return
*/
public String calcuteMoney(StringBuffer sb,BigDecimal totalArea,WxShop shop,WxEnergyFeesTime time,List<WxEnergyMeter> meterList,WxEnergyFeesShop shopfee,
Map<Long,BigDecimal> buildingAreaMap,Map<Long,WxMallFloor> floorMap,Map<Long,BigDecimal> meterNumberMap) {
public String calcuteMoney(StringBuffer sb,BigDecimal totalArea,WxShop shop,WxEnergyFeesTime time,WxEnergyFees fees, WxEnergyFeesShop shopfee,
List<Long> userMeterList,Map<Long,List<Long>> summaryMeterMap,Map<Long,BigDecimal> buildingAreaMap,Map<Long, BigDecimal> floorAreaMap) {
if (StringUtils.isBlank(shopfee.getPrice())) {
return "0";
}
if (shopfee.getIsPublic() == EnumYesOrNo.YES.getCode()) {
//替代占位符为真实数据
//
String formula = replaceFormulaData(shopfee.getFormula(),totalArea,shop,buildingAreaMap,floorMap,meterNumberMap);
//公摊总表数据,根据公摊总表下的公共表来查询所有的读数
Map<Long,BigDecimal> meterNumberMap = null;
if (null != summaryMeterMap) {
meterNumberMap = new HashMap<Long,BigDecimal>();
for (Iterator<Long> it = summaryMeterMap.keySet().iterator(); it.hasNext();) {
Long sumaryMeterId = it.next();
List<Long> childmids = summaryMeterMap.get(sumaryMeterId);
//查询子表的总读数
WxEnergyMeterReading mrq = new WxEnergyMeterReading();
mrq.updateTenantInfo(shopfee);
mrq.setMeterIds(childmids);
mrq.setStartTime(time.getStartTime());
mrq.setEndTime(time.getEndTime());
BigDecimal totalNumber = wxEnergyMeterReadingMapper.findNumberSum(mrq);
if (null == totalNumber || totalNumber.compareTo(new BigDecimal(0)) <= 0 ) {
totalNumber = new BigDecimal(0);
}
meterNumberMap.put(sumaryMeterId, totalNumber);
}
}
String formula = replaceFormulaData(shopfee.getFormula(),totalArea,shop,buildingAreaMap,floorAreaMap,meterNumberMap);
if (null != formula) {
return new BigDecimal(FormulaParser.evaluate(formula)).setScale(2,BigDecimal.ROUND_HALF_UP).toPlainString();
}
return "0";
}else {
if (null == meterList || meterList.size() <= 0 ) {
if (null == userMeterList || userMeterList.size() <= 0 ) {
return "0";
}
List<Long> meterIdList = new ArrayList<Long>();
for (int i = 0 ; i < meterList.size(); i++) {
WxEnergyMeter meter = meterList.get(i);
meterIdList.add(meter.getId());
}
//根据表,区间的开始日期,结束日期来查询抄表数据。
WxEnergyMeterReading mrq = new WxEnergyMeterReading();
mrq.updateTenantInfo(shopfee);
mrq.setMeterIds(meterIdList);
mrq.setMeterIds(userMeterList);
mrq.setStartTime(time.getStartTime());
mrq.setEndTime(time.getEndTime());
BigDecimal totalNumber = wxEnergyMeterReadingMapper.findNumberSum(mrq);
if (null == totalNumber || totalNumber.compareTo(new BigDecimal(0)) <= 0 ) {
return "0";


+ 59
- 26
mallinkService/src/main/java/com/iformall/service/impl/WxEnergyServiceImpl.java View File

@@ -538,7 +538,7 @@ public class WxEnergyServiceImpl implements WxEnergyService {
WxEnergyMeter mq = new WxEnergyMeter();
mq.updateTenantInfo(record);
List<Integer> ptylist = new ArrayList<Integer>();
ptylist.add(EnumEnergyMeterPhysicsType.PUBLIC.getCode());
//ptylist.add(EnumEnergyMeterPhysicsType.PUBLIC.getCode());
ptylist.add(EnumEnergyMeterPhysicsType.SUMMARY.getCode());
mq.setPhysicsTypeList(ptylist);
PageInfo<WxEnergyMeter> page = this.meterListAsPage(mq,1,1000);
@@ -881,12 +881,7 @@ public class WxEnergyServiceImpl implements WxEnergyService {
try {
wxEnergyReadingCalcuteMapper.insert(record);
WxEnergyFees fees = this.getFeesById(record.getFeesId(),record.getTenantId());
if (fees.getIsPublic() == EnumYesOrNo.YES.getCode()) {
generateCalcuteResult(fees, record, record.getShopIds(), EnumEnergyMeterPhysicsType.PUBLIC);
}else {
generateCalcuteResult(fees, record, record.getShopIds(), EnumEnergyMeterPhysicsType.USER);
}
generateCalcuteResult(fees, record, record.getShopIds());
} catch (Exception e) {
logger.error("保存租赁账单失败,e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
@@ -899,20 +894,68 @@ public class WxEnergyServiceImpl implements WxEnergyService {
}
}
public void generateCalcuteResult(WxEnergyFees fees,WxEnergyReadingCalcute record,List<Long> shopIds,EnumEnergyMeterPhysicsType type) {
public void generateCalcuteResult(WxEnergyFees fees,WxEnergyReadingCalcute record,List<Long> shopIds) {
final IdWorker idWorker = IdWorker.get();
WxShop shq = new WxShop();
shq.updateTenantInfo(record);
shq.setIds(shopIds);
Map<Long, WxShop> shopMap = wxShopService.findShopMap(shq);
//TODO 总共面积
BigDecimal totalArea = null;
//TODO 楼栋的面积
// 总共面积
BigDecimal totalArea = new BigDecimal(0);
// 楼栋的面积
Map<Long,BigDecimal> buildingAreaMap = null;
//TODO 楼层
Map<Long,WxMallFloor> floorMap = null;
//TODO 公摊总表的读数
Map<Long,BigDecimal> meterNumberMap = null;
//楼层
Map<Long, BigDecimal> floorAreaMap = null;
WxMallFloor fq = new WxMallFloor();
fq.updateTenantInfo(record);
List<WxMallFloor> floorList = wxMallFloorService.getBudingFloorList(fq, null);
if (null != floorList && floorList.size() > 0 ) {
floorAreaMap = new HashMap<Long, BigDecimal>();
buildingAreaMap = new HashMap<Long, BigDecimal>();
for (int i = 0 ; i < floorList.size() ; i ++) {
WxMallFloor floor = floorList.get(i);
if (null != floor.getOperatingArea()) {
floorAreaMap.put(floor.getId(), floor.getOperatingArea());
BigDecimal bud = buildingAreaMap.get(floor.getBuildingId());
if (null == bud) {
bud = new BigDecimal(0);
}
bud = bud.add(floor.getOperatingArea());
buildingAreaMap.put(floor.getBuildingId(), bud);
totalArea = totalArea.add(floor.getOperatingArea());
}
}
}
//用户表
WxEnergyMeter mq = new WxEnergyMeter();
mq.updateTenantInfo(record);
mq.setType(fees.getType());
mq.setPhysicsType(EnumEnergyMeterPhysicsType.USER.getCode());
List<Long> meterList = wxEnergyMeterMapper.findIdList(mq);
//查询公摊表
Map<Long,List<Long>> summaryMeterMap = null;
if (fees.getIsPublic() == EnumYesOrNo.YES.getCode()) {
WxEnergyMeter sumq = new WxEnergyMeter();
sumq.updateTenantInfo(record);
sumq.setType(fees.getType());
sumq.setPhysicsType(EnumEnergyMeterPhysicsType.SUMMARY.getCode());
List<WxEnergyMeter> sumeterList = wxEnergyMeterMapper.findList(mq);
if (null != sumeterList && sumeterList.size() > 0 ) {
summaryMeterMap = new HashMap<Long,List<Long>>();
for (int i = 0 ; i < meterList.size(); i ++) {
WxEnergyMeter summaryMeter = sumeterList.get(i);
//查询总表下的子表
WxEnergyMeterChild mcq = new WxEnergyMeterChild();
mcq.updateTenantInfo(record);
mcq.setParentMeterId(summaryMeter.getId());
List<Long> childMeterIds = wxEnergyMeterChildMapper.findChildMeterIdList(mcq);
if (null != childMeterIds && childMeterIds.size() > 0 ) {
summaryMeterMap.put(summaryMeter.getId(), childMeterIds);
}
}
}
}
List<WxEnergyReadingCalcuteResult> resultList = new ArrayList<WxEnergyReadingCalcuteResult>();
for (int i = 0 ; i < shopIds.size(); i ++) {
Long shopId= shopIds.get(i);
@@ -945,16 +988,6 @@ public class WxEnergyServiceImpl implements WxEnergyService {
return;
}
//根据店铺去查询表
WxEnergyMeter mq = new WxEnergyMeter();
mq.updateTenantInfo(record);
mq.setType(fees.getType());
mq.setPhysicsType(type.getCode());
List<WxEnergyMeter> meterList = wxEnergyMeterMapper.findList(mq);
if (null == meterList || meterList.size() <= 0 ) {
return;
}
//循环店铺科目,
for (int j = 0 ; j < shopFeesList.size() ; j ++) {
WxEnergyFeesShop shopfee = shopFeesList.get(j);
@@ -968,7 +1001,7 @@ public class WxEnergyServiceImpl implements WxEnergyService {
cs.setFeesId(shopfee.getFeesId());
cs.setFeesShopId(shopfee.getId());
StringBuffer sb = new StringBuffer();
cs.setMoney(wxEnergyHelper.calcuteMoney(sb,totalArea,shop,time, meterList, shopfee,buildingAreaMap,floorMap,meterNumberMap));
cs.setMoney(wxEnergyHelper.calcuteMoney(sb,totalArea,shop,time, fees, shopfee,meterList,summaryMeterMap,buildingAreaMap,floorAreaMap));
cs.setPeriod(record.getPeriod());
cs.setMoney(sb.toString());
resultList.add(cs);


+ 6
- 0
mallinkService/src/main/resources/mapper/WxEnergyMeterMapper.xml View File

@@ -56,6 +56,12 @@
<include refid="dynamicWhereConditions"/>
</select>
<select id="findIdList" parameterType="com.iformall.domain.po.WxEnergyMeter" resultType="Long">
select id
from wx_energy_meter
<include refid="dynamicWhereConditions"/>
</select>
<select id="selectById" parameterType="HashMap" resultMap="BaseResultMap">
select
<include refid="allColumns"/>


Loading…
Cancel
Save