diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxEnergyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxEnergyController.java index cea22d93c..f6ccdd727 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxEnergyController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxEnergyController.java @@ -51,6 +51,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -206,6 +207,7 @@ public class WxEnergyController extends BaseController { WxEnergyMeter meter = list.get(i); WxShop s = new WxShop(); s.setId(meter.getId()); + s.setTreeType(meter.getTreeType()); s.setShopNumber(meter.getName()); s.setTreeParentId(record.getFloor()); s.setTreeParentType("floor"); @@ -280,7 +282,7 @@ public class WxEnergyController extends BaseController { } return new ResultData(list); } - return new ResultData(); + return new ResultData(new ArrayList()); } @ApiOperation("用户能源表新增修改") @@ -324,7 +326,7 @@ public class WxEnergyController extends BaseController { @ApiOperation("用户能源表新增修改") @PostMapping("deleteChildMeter") - public ResultData deleteChildMeter(@RequestBody WxEnergyMeterChild record) { + public ResultData deleteChildMeter(@RequestBody WxEnergyMeter record) { record.updateTenantInfo(getTenantInfo()); if (null == record.getId()) { return new ResultData(Result.ERROR,"请选择一个关联"); @@ -367,7 +369,7 @@ public class WxEnergyController extends BaseController { @GetMapping("feesShopComponentList") public ResultData shopFeesList(@ModelAttribute WxEnergyFeesShop record) { record.updateTenantInfo(getTenantInfo()); - return new ResultData(wxEnergyService.getFeesCalcuteComponentList(record)); + return new ResultData(wxEnergyService.getFeesShopComponentList(record)); } @ApiOperation("计费标准新增修改") @@ -389,13 +391,13 @@ public class WxEnergyController extends BaseController { @GetMapping("feesShopDetail") public ResultData feesShopDetail(@ModelAttribute WxEnergyFeesShop record) { record.updateTenantInfo(getTenantInfo()); - return new ResultData(wxEnergyService.getShopFeesCalcute(record.getId(),record.getTenantId())); + return new ResultData(wxEnergyService.getFeesShop(record.getId(),record.getTenantId())); } @ApiOperation("店铺修改计费标准") @PostMapping("updateFeesShop") public ResultData updateFeesShop(@RequestBody WxEnergyFeesShop record) { - wxEnergyService.saveOrUpdateShopFeesCalcute(record); + wxEnergyService.updateFeesShop(record); return new ResultData(); } @@ -429,7 +431,10 @@ public class WxEnergyController extends BaseController { @ApiOperation("费用区间自动时间") @GetMapping("periodAutoTimes") public ResultData periodAutoTimes(@ModelAttribute WxEnergyFeesTime record) { - return new ResultData(); + Map retMap = new HashMap(); + retMap.put("startTime", new Date()); + retMap.put("endTime", new Date()); + return new ResultData(retMap); } @ApiOperation("费用区间列表") @@ -606,6 +611,17 @@ public class WxEnergyController extends BaseController { @PostMapping("createReadingCalcute") public ResultData createReadingCalcute(@RequestBody WxEnergyReadingCalcute record) { record.updateTenantInfo(getTenantInfo()); + //如果已经存在则不允许 + WxEnergyReadingCalcute rcq = new WxEnergyReadingCalcute(); + rcq.updateTenantInfo(record); + rcq.setPeriod(record.getPeriod()); + rcq.setFeesId(record.getFeesId()); + rcq.setIsDel(EnumYesOrNo.NO.getCode()); + rcq.setShopIds(record.getShopIds()); + List rcList = wxEnergyService.findCalcuteList(rcq); + if (null != rcList && rcList.size() > 0 ) { + return new ResultData(Result.ERROR,"已存在重复数据"); + } wxEnergyService.saveOrUpdateReadingCalcute(record,this.getUser()); return new ResultData(); } @@ -654,27 +670,18 @@ public class WxEnergyController extends BaseController { } @ApiOperation("科目抄表计算记录导出") - @GetMapping("readingCalcuteExport") - public void readingCalcuteExport(@ModelAttribute WxEnergyReadingCalcute record, HttpServletRequest request, HttpServletResponse response) { -// record.updateTenantInfo(getTenantInfo()); -// WxEnergyReadingCalcute wrc = wxEnergyService.getReadingCalcuteById(record); -// if (null == wrc) { -// return; -// } -// wxEnergyService.exportReadingCalcute(wrc, request, response); - } - - @ApiOperation("计算") - @PostMapping("calcute") - public ResultData calcute(@RequestBody WxEnergyReadingCalcute record) { -// record.updateTenantInfo(getTenantInfo()); -// WxEnergyReadingCalcute wrc = wxEnergyService.getReadingCalcuteById(record); -// if (null == wrc) { -// return new ResultData(Result.ERROR,"id错误"); -// } -// Integer number = wxEnergyService.calcuteReading(wrc, getUser()); -// return new ResultData(number); - return null; + @GetMapping("readingCalcuteResultExport") + public void readingCalcuteResultExport(@ModelAttribute WxEnergyReadingCalcuteResult record, HttpServletRequest request, HttpServletResponse response) { + record.updateTenantInfo(getTenantInfo()); + wxEnergyService.exportReadingCalcuteResult(record, request, response); + } + + @ApiOperation("生成账单") + @PostMapping("createBill") + public ResultData createBill(@RequestBody WxEnergyReadingCalcute record) { + record.updateTenantInfo(getTenantInfo()); + wxEnergyService.createBill(record, getUser()); + return new ResultData(); } @PostMapping("calcuteIsDel") diff --git a/mallinkAdmin/src/main/resources/db/migration/V202408000000005.sql b/mallinkAdmin/src/main/resources/db/migration/V202408000000005.sql index ca1257354..66fe4b937 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202408000000005.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202408000000005.sql @@ -675,42 +675,6 @@ CREATE TABLE `wx_energy_fees_time_shop` ( KEY `T_P_S` (`tenant_id`,`shop_id`,`period`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='能耗表'; -CREATE TABLE `wx_energy_reading_calcute_shop` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', - `parent_tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', - `create_time` timestamp NULL DEFAULT NULL, - `update_time` timestamp NULL DEFAULT NULL, - `calcute_id` bigint(20) NOT NULL COMMENT '费用计算ID', - `shop_id` bigint(20) NOT NULL COMMENT '店铺ID', - PRIMARY KEY (`id`), - UNIQUE KEY `id_UNIQUE` (`id`), - UNIQUE KEY `T_T_F` (`tenant_id`,`calcute_id`,`shop_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='能耗表抄表'; - -drop TABLE wx_energy_reading_calcute; -CREATE TABLE `wx_energy_reading_calcute` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', - `parent_tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', - `create_time` timestamp NULL DEFAULT NULL, - `update_time` timestamp NULL DEFAULT NULL, - `create_by` bigint(20) DEFAULT NULL, - `create_by_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `update_by` bigint(20) DEFAULT NULL, - `update_by_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `remark` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `period` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属年月', - `fees_id` bigint(20) NOT NULL COMMENT '科目ID', - `is_calcuted` int(1) NOT NULL DEFAULT '0' COMMENT '是否已计算过', - `calcute_success` int(1) DEFAULT '0' COMMENT '计算是否成功', - `is_del` int(1) NOT NULL DEFAULT '0' COMMENT '是否已删除', - `shop_size` int(6) NOT NULL DEFAULT '0' COMMENT '店铺数量', - PRIMARY KEY (`id`), - UNIQUE KEY `id_UNIQUE` (`id`), - UNIQUE KEY `T_P_F` (`tenant_id`,`period`,`fees_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='能耗表抄表'; - alter table wx_energy_meter_reading_0 add column building_name varchar(100) comment '所属楼栋,有可能会是多个'; alter table wx_energy_meter_reading_1 add column building_name varchar(100) comment '所属楼栋,有可能会是多个'; @@ -1320,6 +1284,29 @@ alter table wx_energy_fees_97 add column is_public int(1) not null default alter table wx_energy_fees_98 add column is_public int(1) not null default 0 comment '是否公摊'; alter table wx_energy_fees_99 add column is_public int(1) not null default 0 comment '是否公摊'; +drop TABLE wx_energy_reading_calcute; +CREATE TABLE `wx_energy_reading_calcute` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', + `create_time` timestamp NULL DEFAULT NULL, + `update_time` timestamp NULL DEFAULT NULL, + `create_by` bigint(20) DEFAULT NULL, + `create_by_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `update_by` bigint(20) DEFAULT NULL, + `update_by_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `period` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属年月', + `fees_id` bigint(20) NOT NULL COMMENT '科目ID', + `is_calcuted` int(1) NOT NULL DEFAULT '0' COMMENT '是否已计算过', + `is_del` int(1) NOT NULL DEFAULT '0' COMMENT '是否已删除', + `shop_size` int(6) NOT NULL DEFAULT '0' COMMENT '店铺数量', + `shop` text COLLATE utf8mb4_unicode_ci COMMENT '店铺编号', + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`), + UNIQUE KEY `T_P_F` (`tenant_id`,`period`,`fees_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='能耗表抄表'; + CREATE TABLE `wx_energy_reading_calcute_result` ( `id` bigint(20) NOT NULL COMMENT '主键ID', @@ -1331,9 +1318,9 @@ CREATE TABLE `wx_energy_reading_calcute_result` ( `shop_id` bigint(20) NOT NULL COMMENT '店铺ID', `fees_id` bigint(20) NOT NULL COMMENT '科目编号', `fees_shop_id` bigint(20) NOT NULL COMMENT '店铺科目编号', - `meter_id` bigint(20) DEFAULT NULL COMMENT '表编号', `money` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '金额', `period` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属年月', + `money_deail` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '详细说明', PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `T_T_F` (`tenant_id`,`calcute_id`,`shop_id`) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMallAdminController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMallAdminController.java index 5c9bfa8f7..838c4a14e 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMallAdminController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMallAdminController.java @@ -15,7 +15,9 @@ import com.iformall.domain.po.WxAllBill; import com.iformall.domain.po.WxBillAction; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxEnergyFeesTime; +import com.iformall.domain.po.WxEnergyMeter; import com.iformall.domain.po.WxEnergyMeterReading; +import com.iformall.domain.po.WxEnergyMeterShopFloor; import com.iformall.domain.po.WxFlowModel; import com.iformall.domain.po.WxMallBuilding; import com.iformall.domain.po.WxMerchant; @@ -34,6 +36,7 @@ import com.iformall.enums.EnumBillOweOrNearType; import com.iformall.enums.EnumBillUpdateType; import com.iformall.enums.EnumCouponOrderStatus; import com.iformall.enums.EnumCouponType; +import com.iformall.enums.EnumEnergyMeterShopFloorType; import com.iformall.enums.EnumEnergyMeterType; import com.iformall.enums.EnumFilterSettle; import com.iformall.enums.EnumFlowKey; @@ -379,13 +382,46 @@ public class WxMallAdminController extends BaseController { } @ApiOperation("抄表数据分页列表接口") - @GetMapping("readingList") + @GetMapping("shopMeterList") + public ResultData shopMeterList(@ModelAttribute WxEnergyMeter record) { + record.setIsDel(EnumYesOrNo.NO.getCode()); + setQueryDataRule(record); + + WxEnergyMeterShopFloor sfq = new WxEnergyMeterShopFloor(); + sfq.updateTenantInfo(record); + sfq.setType(EnumEnergyMeterShopFloorType.SHOP.getCode()); + if (StringUtils.isNotBlank(record.getShopNumber())) { + WxShop sq = new WxShop(); + sq.updateTenantInfo(record); + sq.setShopNumber(record.getShopNumber()); + List sids = wxShopService.getShopIds(sq); + if (null == sids || sids.size() <= 0 ) { + return new ResultData(); + } + sfq.setAliseIdList(sids); + } + sfq.setAliseId(record.getShopId()); + List mids = wxEnergyService.getMeterIdList(sfq); + if (null == mids || mids.size() <= 0 ) { + return new ResultData(); + } + record.setIds(mids); + record.setSortColumns(BaseEntity.SortField.CreateTime_DESC); + PageInfo page = wxEnergyService.meterListAsPage(record, 1, 1000); + return new ResultData(page); + } + + @ApiOperation("抄表数据分页列表接口") + @GetMapping("preShopReadingList") public ResultData readingList(@ModelAttribute WxEnergyMeterReading record) { record.setIsDel(EnumYesOrNo.NO.getCode()); setQueryDataRule(record); record.setSortColumns(BaseEntity.SortField.CreateTime_DESC); PageInfo page = wxEnergyService.readingListAsPage(record, 1, 1000); - return new ResultData(page); + if (null != page && null != page.getList() && page.getList().size() > 0 ) { + return new ResultData(page.getList().get(0)); + } + return new ResultData(); } //能源抄表费用 diff --git a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java index 1f6a8951b..7ea61a869 100644 --- a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java +++ b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java @@ -435,6 +435,13 @@ public class BaseMyBatisConfiguration { wxAllBillSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxAllBillSharding); + ShardingSphere wxEnergyReadingCalcuteResultSharding = new ShardingSphere(); + wxEnergyReadingCalcuteResultSharding.setColumn("tenant_id"); + wxEnergyReadingCalcuteResultSharding.setTableName("wx_energy_reading_calcute_result"); + wxEnergyReadingCalcuteResultSharding.setCount(100); + wxEnergyReadingCalcuteResultSharding.setRule(EnumShardingRule.HASH.getCode()); + shardingList.add(wxEnergyReadingCalcuteResultSharding); + //初始化 shardingSpherePlugin.setShardingSpheres(shardingList); Properties properties = new Properties(); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java b/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java index 7644c5cd7..147446db9 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxAllBill.java @@ -260,7 +260,7 @@ public class WxAllBill extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "能源抄表计算ID", name = "energyReadingCalcuteId") private Long energyReadingCalcuteId; - @io.swagger.annotations.ApiModelProperty(value = "能源抄表ID", name = "energyReadingId") + @io.swagger.annotations.ApiModelProperty(value = "WxEnergyReadingCalcuteResult的id", name = "energyReadingId") private Long energyReadingId; @io.swagger.annotations.ApiModelProperty(value = "账单额外生成来源EnumBillExtraCreateFrom", name = "extraCreateFrom") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyFeesShop.java b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyFeesShop.java index 7d9beb6fd..479356538 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyFeesShop.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyFeesShop.java @@ -46,9 +46,14 @@ public class WxEnergyFeesShop extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "公摊计算公司", name = "formula") private String formula; - + @io.swagger.annotations.ApiModelProperty(value = "公摊计算公式数组字符串", name = "formula") + private String formulaListStr; + @TableField(exist = false) + private List formulaList; @io.swagger.annotations.ApiModelProperty(value = "公摊计算公司", name = "formulaContent") private String formulaContent; + @TableField(exist = false) + private List formulaContentList; @TableField(exist = false) private String treeType="feesShop"; @@ -64,8 +69,6 @@ public class WxEnergyFeesShop extends TenantEntity { @TableField(exist = false) private List shopIds; @TableField(exist = false) - private List calcuteIds; - @TableField(exist = false) private String feesName; @TableField(exist = false) private String feesIdsStr; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeter.java b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeter.java index eea712fb5..34f168892 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeter.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeter.java @@ -83,7 +83,6 @@ public class WxEnergyMeter extends TenantEntity { private Long treeParentId; @TableField(exist = false) private String treeParentType; - @TableField(exist = false) private Long aliasId; @TableField(exist = false) @@ -95,6 +94,8 @@ public class WxEnergyMeter extends TenantEntity { @TableField(exist = false) private Long shopId; @TableField(exist = false) + private String shopNumber; + @TableField(exist = false) private List physicsTypeList; @TableField(exist = false) private Integer isRealMeter; @@ -102,4 +103,5 @@ public class WxEnergyMeter extends TenantEntity { private Integer isValid; @TableField(exist = false) private Integer hasShop; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterReading.java b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterReading.java index 3456bf632..5df6c1982 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterReading.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterReading.java @@ -118,6 +118,8 @@ public class WxEnergyMeterReading extends TenantEntity { @TableField(exist = false) private List shopIds; @TableField(exist = false) + private List meterIds; + @TableField(exist = false) private String shopIdsStr; @TableField(exist = false) private Long timeId; @@ -154,56 +156,4 @@ public class WxEnergyMeterReading extends TenantEntity { return excelObject; } - private WxAllBill generateBill(WxEnergyReadingCalcute calcute,WxMerchant merchant,MallUserInfo user,String needPay,String detail,String remark) { - WxAllBill daily = new WxAllBill(); -// final IdWorker idWorker = IdWorker.get(); -// daily.setId(idWorker.nextId()); -// daily.updateTenantInfo(this); -// daily.setMerchantId(merchant.getId()); -// daily.setRentShopType(merchant.getType()); -// daily.setCreatetime(new Date()); -// daily.setCreateBy(user.getId()); -// daily.setCreateByName(user.getName()); -// daily.setUpdateBy(user.getId()); -// daily.setUpdateByName(user.getName()); -// daily.setUpdatetime(new Date()); -// daily.setReceivePay(needPay); -// daily.setNeedPay(needPay); -// daily.setPay("0"); -// daily.setStarttime(this.startTime); -// daily.setEndtime(this.endTime); -// daily.setOwe(needPay); -// daily.setShopId(this.shopId); -// daily.setShopNumber(this.shopNumber); -// daily.setBillType(EnumBillAllType.DAILY.getCode()); -// daily.setEnergyFeesId(calcute.getFeesId()); -// daily.setPriceDetail(detail); -// daily.setServiceChargePay("0"); -// daily.setBillRemark(remark); -// daily.setIsPreview(EnumYesOrNo.NO.getCode()); -// daily.setEnergyReadingCalcuteId(calcute.getId()); -// daily.setEnergyReadingId(id); - return daily; - } - - public WxAllBill generateUserBill(WxEnergyReadingCalcute calcute,WxMerchant merchant,MallUserInfo user,WxEnergyMeter meter) { -// BigDecimal dx = new BigDecimal(this.curNumber).subtract(new BigDecimal(this.preNumber)); -// BigDecimal needPay = new BigDecimal(this.price).multiply(dx).divide(new BigDecimal(meter.getRate())).setScale(2,RoundingMode.HALF_UP); -// if (needPay.compareTo(new BigDecimal(0)) <= 0 ) { -// return null; -// } -// String detail = "单价:"+this.price+",上次读数:"+this.preNumber+",本次读数:"+this.curNumber+",读数差:"+dx.toPlainString()+",表倍率:"+meter.getRate()+",费用:"+needPay.toPlainString(); -// return generateBill(calcute,merchant, user, needPay.toPlainString(), detail, "抄表计算自动生成"); - return null; - } - - public WxAllBill generatePublicBill(WxEnergyReadingCalcute calcute,WxMerchant merchant,MallUserInfo user,String needPay) { -// if (new BigDecimal(needPay).compareTo(new BigDecimal(0)) <= 0 ) { -// return null; -// } -// String detail = "单价:"+this.price+",费用:"+needPay; -// return generateBill(calcute,merchant, user, needPay, detail, "抄表计算自动生成公摊"); - return null; - } - } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterShopFloor.java b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterShopFloor.java index 88e44a8e7..d000b8232 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterShopFloor.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyMeterShopFloor.java @@ -49,6 +49,8 @@ public class WxEnergyMeterShopFloor extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "关联的编号", name = "aliseId") private Long aliseId; + @TableField(exist = false) + private List aliseIdList; @TableField(exist = false) private List shopIds; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcute.java b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcute.java index cd564fb75..8d9b84458 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcute.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcute.java @@ -59,21 +59,9 @@ public class WxEnergyReadingCalcute extends TenantEntity { @TableField(exist = false) private String feesPhysicsTypeName; - @io.swagger.annotations.ApiModelProperty(value = "isCalcuted", name = "isCalcuted") + @io.swagger.annotations.ApiModelProperty(value = "是否已生成账单", name = "isCalcuted") private Integer isCalcuted; - @io.swagger.annotations.ApiModelProperty(value = "importSuccess", name = "importSuccess") - private Integer calcuteSuccess; - @TableField(exist = false) - private String calcuteSuccessName; - private String getCalcuteSuccessName() { - if (null != calcuteSuccess && calcuteSuccess.intValue() == EnumYesOrNo.YES.getCode().intValue()) { - return "成功"; - }else { - return "未完成计算"; - } - } - @io.swagger.annotations.ApiModelProperty(value = "是否删除", name = "isDel") private Integer isDel; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcuteResult.java b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcuteResult.java index 99e7c0eef..1f7929e1e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcuteResult.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxEnergyReadingCalcuteResult.java @@ -2,7 +2,9 @@ package com.iformall.domain.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.common.IdWorker; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumBillAllType; import com.iformall.enums.EnumYesOrNo; import com.iformall.utils.DateUtils; @@ -65,17 +67,47 @@ public class WxEnergyReadingCalcuteResult extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="费用标准ID",name="feesCalcuteId") private Long feesShopId; - @io.swagger.annotations.ApiModelProperty(value="表ID",name="meterId") - private Long meterId; - @Excel(name = "表号", width = 20, orderNum = "7") - @TableField(exist = false) - private String meterName; - @Excel(name = "金额", width = 20, orderNum = "8") @io.swagger.annotations.ApiModelProperty(value="金额",name="money") private String money; + @Excel(name = "详细说明", width = 20, orderNum = "8") + @io.swagger.annotations.ApiModelProperty(value="详细说明",name="moneyDeail") + private String moneyDeail; + @TableField(exist = false) private List shopIds; + public WxAllBill generateBill(WxEnergyReadingCalcute calcute,WxMerchant merchant,WxShop shop,MallUserInfo user,String needPay,String detail,String remark) { + WxAllBill daily = new WxAllBill(); + final IdWorker idWorker = IdWorker.get(); + daily.setId(idWorker.nextId()); + daily.updateTenantInfo(this); + daily.setMerchantId(merchant.getId()); + daily.setRentShopType(merchant.getType()); + daily.setCreatetime(new Date()); + daily.setCreateBy(user.getId()); + daily.setCreateByName(user.getName()); + daily.setUpdateBy(user.getId()); + daily.setUpdateByName(user.getName()); + daily.setUpdatetime(new Date()); + daily.setReceivePay(needPay); + daily.setNeedPay(needPay); + daily.setPay("0"); + daily.setStarttime(DateUtils.getDayBegin(new Date())); + daily.setEndtime(DateUtils.getDayEnd(new Date())); + daily.setOwe(needPay); + daily.setShopId(this.shopId); + daily.setShopNumber(shop.getShopNumber()); + daily.setBillType(EnumBillAllType.DAILY.getCode()); + daily.setEnergyFeesId(calcute.getFeesId()); + daily.setPriceDetail(detail); + daily.setServiceChargePay("0"); + daily.setBillRemark(remark); + daily.setIsPreview(EnumYesOrNo.NO.getCode()); + daily.setEnergyReadingCalcuteId(calcute.getId()); + daily.setEnergyReadingId(id); + return daily; + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java b/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java index f7e5d2832..32b4d5149 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java @@ -116,7 +116,7 @@ public class WxShop extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="管理人电话",name="managerPhone") private String managerPhone; - @io.swagger.annotations.ApiModelProperty(value = "类型", name = "type") + @io.swagger.annotations.ApiModelProperty(value = "类型EnumRentShopType", name = "type") private Integer type; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java index 03eee0190..21019dde2 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java @@ -10,7 +10,8 @@ public enum EnumRentContractAdjustRatioWay { RATIO(1, "按比例"), MONEY(2, "按金额"), CUSTOM(3, "固定金额"), - FIX_RATIO(4, "固定比率"); + FIX_RATIO(4, "固定比率"), + FIX_UNIT_PRICE(5, "固定单价"); public static EnumRentContractAdjustRatioWay getEnum(Integer code) { for (EnumRentContractAdjustRatioWay value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterMapper.java index 9f3d20e84..236f10bfa 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterMapper.java @@ -10,6 +10,8 @@ import java.util.List; public interface WxEnergyMeterMapper extends CommonMapper { List findList(WxEnergyMeter wxBillRent); + + List findIdList(WxEnergyMeter wxBillRent); WxEnergyMeter selectById(@Param("id")Long id,@Param("tenantId")String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterReadingMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterReadingMapper.java index a17172ad4..d6bbfbefc 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterReadingMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxEnergyMeterReadingMapper.java @@ -4,6 +4,8 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxEnergyMeterReading; import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -16,4 +18,6 @@ public interface WxEnergyMeterReadingMapper extends CommonMapper getMeterMap(WxEnergyMeter record); List getMeterIdList(WxEnergyMeterShopFloor record); @@ -58,11 +58,11 @@ public interface WxEnergyService { List getFeesIdList(WxEnergyFees record); //计算标砖 - List> getFeesCalcuteComponentList(WxEnergyFeesShop record); + List> getFeesShopComponentList(WxEnergyFeesShop record); void createFeesShop(WxEnergyFeesShop record); void deleteFeesShop(WxEnergyFeesShop record); - WxEnergyFeesShop getShopFeesCalcute(Long id,String tenantId); - void saveOrUpdateShopFeesCalcute(WxEnergyFeesShop record); + WxEnergyFeesShop getFeesShop(Long id,String tenantId); + void updateFeesShop(WxEnergyFeesShop record); PageInfo feesShopListAsPage(WxEnergyFeesShop record, Integer pageIndex, Integer pageSize); //抄表数据 @@ -77,10 +77,11 @@ public interface WxEnergyService { //抄表科目计算数据 PageInfo readingCalcuteListAsPage(WxEnergyReadingCalcute record, Integer pageIndex, Integer pageSize); + List findCalcuteList(WxEnergyReadingCalcute record); void saveOrUpdateReadingCalcute(WxEnergyReadingCalcute record,MallUserInfo userInfo); PageInfo readingCalcuteResultListAsPage(WxEnergyReadingCalcuteResult record, Integer pageIndex, Integer pageSize); - void exportReadingCalcute(WxEnergyReadingCalcute record,HttpServletRequest request, HttpServletResponse response); - Integer calcuteReading(WxEnergyReadingCalcute record, MallUserInfo user); + void exportReadingCalcuteResult(WxEnergyReadingCalcuteResult record,HttpServletRequest request, HttpServletResponse response); + void createBill(WxEnergyReadingCalcute record, MallUserInfo user); void setReadingCalcuteIsDel(WxEnergyReadingCalcute record); List getReadingCalcuteShopNumber(WxEnergyReadingCalcute record); diff --git a/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java b/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java index 8fd35d877..3114b704f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java @@ -55,6 +55,8 @@ public interface WxMallBuildingService { void deleteById(Long id); ResultData getBuildingList(TenantEntity tenantEntity); + + List getBuildingList1(TenantEntity tenantEntity); ResultData getBuildingFloorList(WxMallBuilding wxMallBuilding,MallUserInfo mallUser); diff --git a/mallinkService/src/main/java/com/iformall/service/WxMallFloorService.java b/mallinkService/src/main/java/com/iformall/service/WxMallFloorService.java index 7bb163f6d..35263ac73 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMallFloorService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMallFloorService.java @@ -45,6 +45,8 @@ public interface WxMallFloorService { ResultData getFloorList(TenantEntity tenantEntity, Long buildingId); + List getBudingFloorList(TenantEntity tenantEntity, Long buildingId); + List getFloorIdList(WxMallFloor record); void deleteByBuildingId(Long buildingId); diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java index 429f17b22..54403b316 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java @@ -360,12 +360,16 @@ public class WxBillAllHelper { * 那是之前的账单,不处理。 * @param merchant */ - public boolean billEndCalcute(Integer decimalSize,Date endTime,WxAllBill bill,WxBillAction action, boolean isAllReturn) { + public boolean billEndCalcute(Integer decimalSize,Date endTime,WxAllBill bill,WxBillAction action) { String endTimeStr = DateUtils.date2String(endTime,DateUtils.DATE_TIME_PATTERN); boolean isUpdate = false; action.setBillId(bill.getId()); action.setBillType(bill.getBillType()); String oldReceivePay = bill.getReceivePay(); + boolean isAllReturn = false; + if (EnumBillAllType.getEnum(bill.getBillType()).isDeposit()) { + isAllReturn = true; + } //如果账单的开始时间在结束时间之后,已经支付了的要退回。 if (!bill.getStarttime().before(endTime)) { bill.setReceivePay("0"); diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java index 57cdc2574..1b39eb641 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxEnergyHelper.java @@ -1,54 +1,223 @@ 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; +import org.springframework.beans.factory.annotation.Autowired; +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; +import com.iformall.domain.po.WxEnergyMeterReading; +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; +import com.iformall.utils.FormulaParser; +import com.iformall.utils.PlaceholderExtractorWithPrefixAndSuffix; +@Service public class WxEnergyHelper { + + @Autowired + WxEnergyMeterReadingMapper wxEnergyMeterReadingMapper; + @Autowired + WxEnergyMeterMapper wxEnergyMeterMapper; + @Lazy + @Autowired + private WxMallBuildingService wxMallBuildingService; + @Lazy + @Autowired + WxMallFloorService wxMallFloorService; - public static List> generateCalcuteComponent() { + public List> generateCalcuteComponent(TenantEntity tenantEntity) { //公共表,公摊总表,当前楼栋面积,当前楼层面积,总面积,店铺公摊系数 List> retList = new ArrayList>(); - Map currentBuildingArea = new HashMap(); - currentBuildingArea.put("name", "店铺所属楼栋总计租面积"); - currentBuildingArea.put("value", "{#currentBuildingArea#}"); - retList.add(currentBuildingArea); - - Map currentFloorArea = new HashMap(); - currentFloorArea.put("name", "店铺所属楼层总计租面积"); - currentFloorArea.put("value", "{#currentFloorArea#}"); - retList.add(currentFloorArea); - - Map totalArea = new HashMap(); - totalArea.put("name", "商场总计租面积"); - totalArea.put("value", "{#totalArea#}"); - retList.add(totalArea); - + List buildingList = wxMallBuildingService.getBuildingList1(tenantEntity); + if (null != buildingList && buildingList.size() > 0 ) { + for (int i = 0 ; i < buildingList.size(); i++) { + WxMallBuilding mb = buildingList.get(i); + addComponent(retList, "楼栋("+mb.getBuildingName()+")面积", "{#buildingArea_"+mb.getId()+"#}"); + + List floorList = wxMallFloorService.getBudingFloorList(tenantEntity, mb.getId()); + if (null != floorList && floorList.size() > 0 ) { + for (int j = 0 ; j < floorList.size(); j++ ) { + WxMallFloor floor = floorList.get(j); + addComponent(retList, "楼层("+mb.getBuildingName()+floor.getFloorName()+")面积", "{#floorArea_"+floor.getId()+"#}"); + } + } + } + } + addComponent(retList, "商场总计租面积", "{#totalArea#}"); + addComponent(retList, "店铺公摊系数", "{#shopPublicRax#}"); + return retList; + } + + private void addComponent(List> retList, String name, String value) { Map calcuteRax = new HashMap(); - calcuteRax.put("name", "公摊系数"); - calcuteRax.put("value", "{#calcuteRax#}"); + calcuteRax.put("name", name); + calcuteRax.put("value", value); retList.add(calcuteRax); - - return retList; } - public static Map generateMeterComponent(WxEnergyMeter meter) { + public Map generateMeterComponent(WxEnergyMeter meter) { Map m = new HashMap(); m.put("name", meter.getName()); m.put("value", "{#meter_"+meter.getId()+"#}"); return m; } - public static String calcuteMoney(WxEnergyFeesTime time,WxEnergyMeter meter,WxEnergyFeesShop shopfee) { - return "0"; + private String replaceFormulaData(String formula,BigDecimal totalArea,WxShop shop,Map buildingAreaMap, + Map floorAreaMap,Map meterNumberMap) { + if (StringUtils.isBlank(formula)) { + return null; + } + List buildingAreaList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#buildingArea_", "#"); + List floorAreaList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#floorArea_", "#"); + List meterList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#meter_", "#"); + + formula = formula.replaceAll("\\{.*?\\}", ""); + if (null != buildingAreaMap && null != buildingAreaList && buildingAreaList.size() > 0 ) { + for (int i = 0 ; i < buildingAreaList.size(); i ++) { + String buildArea = buildingAreaList.get(i); + String[] bs = buildArea.split("_"); + if (null != bs && bs.length > 1) { + BigDecimal buildingArea = buildingAreaMap.get(Long.parseLong(bs[1])); + if (null != buildingArea) { + formula = formula.replaceAll("#buildingArea_"+Long.parseLong(bs[1])+"#", buildingArea.toPlainString()); + } + } + } + } + + 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) { + BigDecimal floorarea = floorAreaMap.get(Long.parseLong(bs[1])); + if (null != floorarea) { + formula = formula.replaceAll("#floorArea_"+Long.parseLong(bs[1])+"#", floorarea.toPlainString()); + } + } + + } + } + + if (null != meterNumberMap && null != meterList && meterList.size() > 0 ) { + for (int i = 0 ; i < meterList.size(); i ++) { + String meter = meterList.get(i); + String[] bs = meter.split("_"); + if (null != bs && bs.length > 1) { + BigDecimal mu = meterNumberMap.get(Long.parseLong(bs[1])); + if (null != mu ) { + formula = formula.replaceAll("#meter_"+Long.parseLong(bs[1])+"#", mu.toPlainString()); + } + } + } + } + formula = formula.replaceAll("#totalArea#", totalArea.toPlainString()); + formula = formula.replaceAll("#shopPublicRax#", shop.getBuildArea()); + return formula; + } + + public void testCalcute(String formula) { + if (StringUtils.isBlank(formula)) { + return ; + } + List buildingAreaList = PlaceholderExtractorWithPrefixAndSuffix.extractPlaceholders(formula, "#", "#"); + formula = formula.replaceAll("\\{.*?\\}", ""); + if (null != buildingAreaList && buildingAreaList.size() > 0 ) { + for (int i = 0 ; i < buildingAreaList.size(); i ++) { + String floorArea = buildingAreaList.get(i); + String relpaceFloorArea = floorArea.replaceAll("\\{.*?\\}", ""); + formula = formula.replaceAll(relpaceFloorArea, "1"); + } + } + FormulaParser.evaluate(formula); } + /** + * 计算金额 + * 1. 如果是用户表: + * 根据店铺所有表的总度数 * 科目单价计算费用 + * + * 2. 如果是公摊: + * 根据科目公式进行计算。 + * + * @param sb + * @param time + * @param meterList + * @param shopfee + * @return + */ + public String calcuteMoney(StringBuffer sb,BigDecimal totalArea,WxShop shop,WxEnergyFeesTime time,WxEnergyFees fees, WxEnergyFeesShop shopfee, + List userMeterList,Map> summaryMeterMap,Map buildingAreaMap,Map floorAreaMap) { + if (StringUtils.isBlank(shopfee.getPrice())) { + return "0"; + } + if (shopfee.getIsPublic() == EnumYesOrNo.YES.getCode()) { + //替代占位符为真实数据 + //公摊总表数据,根据公摊总表下的公共表来查询所有的读数 + Map meterNumberMap = null; + if (null != summaryMeterMap) { + meterNumberMap = new HashMap(); + for (Iterator it = summaryMeterMap.keySet().iterator(); it.hasNext();) { + Long sumaryMeterId = it.next(); + List 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 == userMeterList || userMeterList.size() <= 0 ) { + return "0"; + } + //根据表,区间的开始日期,结束日期来查询抄表数据。 + WxEnergyMeterReading mrq = new WxEnergyMeterReading(); + mrq.updateTenantInfo(shopfee); + 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"; + } + sb.append("表总度数"+totalNumber.toPlainString()+",单价:"+shopfee.getPrice()); + return totalNumber.multiply(new BigDecimal(shopfee.getPrice())).setScale(2,BigDecimal.ROUND_HALF_UP).toPlainString(); + + } + } } diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java index 92e35c41f..c03f3f25a 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java @@ -80,7 +80,7 @@ public class WxRentContractHelper { priceArr[i] = new BigDecimal(priceStr).multiply(new BigDecimal(rentArea)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); } - List priceList = computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getBussinessManagementFeeRatioWay(),priceArr,feeRatioField); + List priceList = computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getBussinessManagementFeeRatioWay(),priceArr,feeRatioField,wxRentContract.getRentArea()); if (null != priceList) { return calcuteRatioByPart(priceList, feeRatioField); }else { @@ -95,7 +95,7 @@ public class WxRentContractHelper { rentArea = "0"; } String ratioFirstYearPrice = new BigDecimal(fee).multiply(new BigDecimal(rentArea)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); - return calcuteRatioByJoin(Constant.default_long_decimal_size,ratioWay, ratio, ratioFirstYearPrice); + return calcuteRatioByJoin(Constant.default_long_decimal_size,ratioWay, ratio, ratioFirstYearPrice,wxRentContract.getRentArea()); } } return null; @@ -125,6 +125,10 @@ public class WxRentContractHelper { for (int i = 1; i < size; i++) { priceArr[i] = new BigDecimal(integers.get(i)).divide(new BigDecimal(100)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); } + }else if (wxPropertyContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ + for (int i = 1; i < size; i++) { + priceArr[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(wxPropertyContract.getRentArea())).divide(new BigDecimal(100)).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); + } }else { for (int i = 1; i < size; i++) { priceArr[i] = wxPropertyContract.getPrice(); @@ -175,7 +179,7 @@ public class WxRentContractHelper { } priceArr[i] = priceStr; } - return computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getAdjustRatioWay(),priceArr,"adjustRatio"); + return computeRatioByShop(Constant.default_long_decimal_size,rentInfoArray,wxRentContract.getAdjustRatioWay(),priceArr,"adjustRatio",wxRentContract.getRentArea()); } //计算每年租金基数值(合铺录入),具体计算在合同创建时,会根据合同的PriceUnit来根据此基数来计算 @@ -259,6 +263,16 @@ public class WxRentContractHelper { } } + }else if (adjustRatioWay.equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ + for (int i = 1; i < size; i++) { + String _update = ""; + if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + _update = new BigDecimal(revenueYears.get(i)).multiply(new BigDecimal(wxRentContract.getRentArea())).toPlainString(); + }else { + _update = new BigDecimal(integers.get(i)).multiply(new BigDecimal(wxRentContract.getRentArea())).toPlainString(); + } + priceArrs[i] = new BigDecimal(_update).setScale(Constant.default_long_decimal_size, RoundingMode.HALF_UP).toPlainString(); + } } if (isCalcuted) { //租金和联营取高 @@ -321,13 +335,17 @@ public class WxRentContractHelper { } revenuePriceArrs[i] = _p.toPlainString(); } + }else if (wxRentContract.getRevenueRatioWay().equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ + for (int i = 1; i < size; i++) { + revenuePriceArrs[i] = new BigDecimal(revenueYears.get(i)).multiply(new BigDecimal(wxRentContract.getRevenue())).toPlainString(); + } } } return revenuePriceArrs; } //合铺计算某项计费 - private static String[] calcuteRatioByJoin(Integer decimalSize,Integer ratioWay,String ratio,String ratioFirstYearPrice) { + private static String[] calcuteRatioByJoin(Integer decimalSize,Integer ratioWay,String ratio,String ratioFirstYearPrice,String rentArea) { List integers = JSONArray.parseArray(ratio, Integer.class); integers.add(0, 0); int size = integers.size(); @@ -355,6 +373,10 @@ public class WxRentContractHelper { BigDecimal _p = priceD.multiply(new BigDecimal(integers.get(i))).divide(new BigDecimal(100)); priceArrs[i] = _p.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } + }else if (ratioWay.equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())){ + for (int i = 1; i < size; i++) { + priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(rentArea)).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); + } } return priceArrs; } @@ -376,20 +398,20 @@ public class WxRentContractHelper { } //计算某项金额,每年-每个店铺金额 - public static List computeRatioByShop(Integer decimalSize,JSONArray rentInfoArray, Integer ratioWayType,String[] firstYearPrces,String ratioKey) { + public static List computeRatioByShop(Integer decimalSize,JSONArray rentInfoArray, Integer ratioWayType,String[] firstYearPrces,String ratioKey,String rentArea) { List priceList = new ArrayList<>(); priceList.add(firstYearPrces); //每个店铺每月租金 //大于一年 JSONObject rentInfoObject = rentInfoArray.getJSONObject(0); JSONArray adjustRatio = rentInfoObject.getJSONArray(ratioKey);//[100,200] if (null != adjustRatio) { - return computeRatioFromRentInfo(decimalSize,priceList, rentInfoArray, ratioWayType, adjustRatio.size(), ratioKey); + return computeRatioFromRentInfo(decimalSize,priceList, rentInfoArray, ratioWayType, adjustRatio.size(), ratioKey,rentArea); } return null; } //计算年调整后的某项计费 - private static List computeRatioFromRentInfo(Integer decimalSize,List priceList,JSONArray rentInfoArray, Integer ratioWayType,int ratioYears,String ratioKey ) { + private static List computeRatioFromRentInfo(Integer decimalSize,List priceList,JSONArray rentInfoArray, Integer ratioWayType,int ratioYears,String ratioKey,String rentArea ) { //循环多年的调整比例,如3年。[10,20,30] for (int i = 0; i < ratioYears; i++) { String[] priceArrs = new String[rentInfoArray.size()]; @@ -410,6 +432,9 @@ public class WxRentContractHelper { }else if (ratioWayType.equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())) { BigDecimal price = new BigDecimal(priceList.get(i)[j]).multiply(new BigDecimal(adjustRatio.getString(i)).divide(new BigDecimal(100))); priceArrs[j] = price.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); + }else if (ratioWayType.equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())) { + BigDecimal price = new BigDecimal(adjustRatio.getString(i)).multiply(new BigDecimal(100)); + priceArrs[j] = price.multiply(new BigDecimal(rentArea)).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } } priceList.add(priceArrs); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java index 2e00b1297..dad00c91e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java @@ -562,7 +562,7 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill for (int i = 0 ; i < brList.size() ; i ++ ) { WxAllBill brent = brList.get(i); WxBillAction action = new WxBillAction(); - boolean isUpdate = wxBillAllHelper.billEndCalcute(rentContract.getDecimalSize(),rentContract.getEndContractTime(), brent, action, false); + boolean isUpdate = wxBillAllHelper.billEndCalcute(rentContract.getDecimalSize(),rentContract.getEndContractTime(), brent, action); if (isUpdate) { realRentList.add(brent); actionList.add(action); @@ -603,7 +603,7 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill for (int i = 0 ; i < brList.size() ; i ++ ) { WxAllBill brent = brList.get(i); WxBillAction action = new WxBillAction(); - boolean isUpdate = wxBillAllHelper.billEndCalcute(propertyContract.getDecimalSize() ,propertyContract.getEndContractTime(), brent, action, false); + boolean isUpdate = wxBillAllHelper.billEndCalcute(propertyContract.getDecimalSize() ,propertyContract.getEndContractTime(), brent, action); if (isUpdate) { realRentList.add(brent); actionList.add(action); @@ -642,7 +642,7 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill for (int i = 0 ; i < brList.size() ; i ++ ) { WxAllBill brent = brList.get(i); WxBillAction action = new WxBillAction(); - boolean isUpdate = wxBillAllHelper.billEndCalcute(2,current, brent, action, false); + boolean isUpdate = wxBillAllHelper.billEndCalcute(2,current, brent, action); if (isUpdate) { realRentList.add(brent); actionList.add(action); @@ -802,7 +802,10 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill @Override public void exportBill(HttpServletRequest request, HttpServletResponse response, WxAllBill wxBillRent) { - String billName = wxBillRent.getRentShopType().equals(EnumRentShopType.SHOP.getCode()) ? "商铺租金账单" : "多经点位租金账单"; + String billName = "账单"; + if (null != wxBillRent.getRentShopType()) { + billName = wxBillRent.getRentShopType().equals(EnumRentShopType.SHOP.getCode()) ? "商铺租金账单" : "多经点位租金账单"; + } PageInfo billRentList = listAsPage(wxBillRent,1,10000); List datalist = new ArrayList(); if (null != billRentList && null != billRentList.getList()) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxEnergyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxEnergyServiceImpl.java index aaacadd3a..b66e546c9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxEnergyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxEnergyServiceImpl.java @@ -13,6 +13,7 @@ import com.iformall.common.ResultData; import com.iformall.domain.dto.FloorBuildingIdDTO; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.WxMerchantBillVo; import com.iformall.enums.EnumBillAllType; import com.iformall.enums.EnumEnergyMeterPhysicsType; import com.iformall.enums.EnumEnergyMeterShopFloorType; @@ -74,6 +75,8 @@ public class WxEnergyServiceImpl implements WxEnergyService { WxEnergyReadingCalcuteMapper wxEnergyReadingCalcuteMapper; @Autowired WxEnergyReadingCalcuteResultMapper wxEnergyReadingCalcuteResultMapper; + @Autowired + WxEnergyHelper wxEnergyHelper; @Lazy @Autowired @@ -231,8 +234,30 @@ public class WxEnergyServiceImpl implements WxEnergyService { } @Override - public void deleteChildMeterAlias(WxEnergyMeterChild record) { - wxEnergyMeterChildMapper.deleteByCondition(record); + public void deleteChildMeterAlias(WxEnergyMeter record) { + if (record.getTreeParentType().equals("building")) { + WxEnergyMeterShopFloor sf = new WxEnergyMeterShopFloor(); + sf.updateTenantInfo(record); + sf.setType(EnumEnergyMeterShopFloorType.BUILDING.getCode()); + sf.setAliseId(record.getTreeParentId()); + sf.setMeterId(record.getId()); + wxEnergyMeterShopFloorMapper.deleteByConditon(sf); + }if (record.getTreeParentType().equals("floor")) { + WxEnergyMeterShopFloor sf = new WxEnergyMeterShopFloor(); + sf.updateTenantInfo(record); + sf.setType(EnumEnergyMeterShopFloorType.FLOOR.getCode()); + sf.setAliseId(record.getTreeParentId()); + sf.setMeterId(record.getId()); + wxEnergyMeterShopFloorMapper.deleteByConditon(sf); + }if (record.getTreeParentType().equals("meter")) { + WxEnergyMeterChild sf = new WxEnergyMeterChild(); + sf.updateTenantInfo(record); + sf.setParentMeterId(record.getTreeParentId()); + sf.setChildMeterId(record.getId()); + wxEnergyMeterChildMapper.deleteByCondition(sf); + } + + } @Override @@ -507,20 +532,20 @@ public class WxEnergyServiceImpl implements WxEnergyService { } @Override - public List> getFeesCalcuteComponentList(WxEnergyFeesShop record) { - List> retList = WxEnergyHelper.generateCalcuteComponent(); + public List> getFeesShopComponentList(WxEnergyFeesShop record) { + List> retList = wxEnergyHelper.generateCalcuteComponent(record); //公共表,公摊总表,当前楼栋面积,当前楼层面积,总面积,店铺公摊系数 WxEnergyMeter mq = new WxEnergyMeter(); mq.updateTenantInfo(record); List ptylist = new ArrayList(); - ptylist.add(EnumEnergyMeterPhysicsType.PUBLIC.getCode()); + //ptylist.add(EnumEnergyMeterPhysicsType.PUBLIC.getCode()); ptylist.add(EnumEnergyMeterPhysicsType.SUMMARY.getCode()); mq.setPhysicsTypeList(ptylist); PageInfo page = this.meterListAsPage(mq,1,1000); if (null != page && null != page.getList() ) { for (int i = 0 ; i < page.getList().size() ; i ++) { WxEnergyMeter meter = page.getList().get(i); - retList.add(WxEnergyHelper.generateMeterComponent(meter)); + retList.add(wxEnergyHelper.generateMeterComponent(meter)); } } return retList; @@ -534,21 +559,29 @@ public class WxEnergyServiceImpl implements WxEnergyService { WxEnergyFees fees = this.getFeesById(record.getFeesId(),record.getTenantId()); for (int i = 0 ; i < record.getShopIds().size(); i ++) { Long shopId = record.getShopIds().get(i); - for (int j = 0 ; j < record.getCalcuteIds().size(); j ++) { - Long calcuteId = record.getCalcuteIds().get(j); - WxEnergyFeesShop msf = new WxEnergyFeesShop(); - msf.updateTenantInfo(record); - msf.setId(idWorker.nextId()); - msf.setCreateTime(date); - msf.setUpdateTime(date); - msf.setShopId(shopId); - msf.setIsPublic(fees.getIsPublic()); - msf.setFeesId(fees.getId()); - msf.setPrice(fees.getPrice()); - msf.setFormula(record.getFormula()); - msf.setFormulaContent(record.getFormulaContent()); - wxEnergyFeesShopMapper.insert(msf); - } + WxEnergyFeesShop msf = new WxEnergyFeesShop(); + msf.updateTenantInfo(record); + msf.setId(idWorker.nextId()); + msf.setCreateTime(date); + msf.setUpdateTime(date); + msf.setShopId(shopId); + msf.setIsPublic(fees.getIsPublic()); + msf.setFeesId(fees.getId()); + msf.setPrice(fees.getPrice()); + if (fees.getIsPublic() == EnumYesOrNo.YES.getCode()) { + if (null == record.getFormulaList() || record.getFormulaList().size() <= 0 || StringUtils.isBlank(record.getFormula())) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"请设置公式"); + } + } + if (null != record.getFormulaContentList() && record.getFormulaContentList().size() > 0 ) { + msf.setFormulaContent(JSON.toJSONString(record.getFormulaContentList())); + } + if (null != record.getFormulaList() && record.getFormulaList().size() > 0 ) { + msf.setFormulaListStr(JSON.toJSONString(record.getFormulaList())); + } + msf.setFormula(record.getFormula()); + wxEnergyHelper.testCalcute(record.getFormula()); + wxEnergyFeesShopMapper.insert(msf); } } @@ -558,23 +591,34 @@ public class WxEnergyServiceImpl implements WxEnergyService { } @Override - public WxEnergyFeesShop getShopFeesCalcute(Long id,String tenantId) { - return wxEnergyFeesShopMapper.selectById(id,tenantId); + public WxEnergyFeesShop getFeesShop(Long id,String tenantId) { + WxEnergyFeesShop fs = wxEnergyFeesShopMapper.selectById(id,tenantId); + if (StringUtils.isNotBlank(fs.getFormulaContent())) { + fs.setFormulaContentList(JSON.parseArray(fs.getFormulaContent(), String.class)); + } + if (StringUtils.isNotBlank(fs.getFormulaListStr())) { + fs.setFormulaList(JSON.parseArray(fs.getFormulaListStr(), String.class)); + } + return fs; } @Override - public void saveOrUpdateShopFeesCalcute(WxEnergyFeesShop record) { + public void updateFeesShop(WxEnergyFeesShop record) { Date date = new Date(); - final IdWorker idWorker = IdWorker.get(); - if (record.getId() == null) { - record.setId(idWorker.nextId()); - record.setCreateTime(date); - record.setUpdateTime(date); - wxEnergyFeesShopMapper.insert(record); - }else { - record.setUpdateTime(date); - wxEnergyFeesShopMapper.updateById(record); - } + record.setUpdateTime(date); + if (record.getIsPublic() == EnumYesOrNo.YES.getCode()) { + if (null == record.getFormulaList() || record.getFormulaList().size() <= 0 || StringUtils.isBlank(record.getFormula())) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"请设置公式"); + } + } + if (null != record.getFormulaContentList() && record.getFormulaContentList().size() > 0 ) { + record.setFormulaContent(JSON.toJSONString(record.getFormulaContentList())); + } + if (null != record.getFormulaList() && record.getFormulaList().size() > 0 ) { + record.setFormulaListStr(JSON.toJSONString(record.getFormulaList())); + } + wxEnergyHelper.testCalcute(record.getFormula()); + wxEnergyFeesShopMapper.updateById(record); } @Override @@ -835,7 +879,13 @@ public class WxEnergyServiceImpl implements WxEnergyService { } return page; } + + @Override + public List findCalcuteList(WxEnergyReadingCalcute record) { + return wxEnergyReadingCalcuteMapper.findList(record); + } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override public void saveOrUpdateReadingCalcute(WxEnergyReadingCalcute record, MallUserInfo userInfo) { Date date = new Date(); @@ -856,12 +906,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()); @@ -874,11 +919,72 @@ public class WxEnergyServiceImpl implements WxEnergyService { } } - public void generateCalcuteResult(WxEnergyFees fees,WxEnergyReadingCalcute record,List shopIds,EnumEnergyMeterPhysicsType type) { + public void generateCalcuteResult(WxEnergyFees fees,WxEnergyReadingCalcute record,List shopIds) { final IdWorker idWorker = IdWorker.get(); + WxShop shq = new WxShop(); + shq.updateTenantInfo(record); + shq.setIds(shopIds); + Map shopMap = wxShopService.findShopMap(shq); + // 总共面积 + BigDecimal totalArea = new BigDecimal(0); + // 楼栋的面积 + Map buildingAreaMap = null; + //楼层 + Map floorAreaMap = null; + WxMallFloor fq = new WxMallFloor(); + fq.updateTenantInfo(record); + List floorList = wxMallFloorService.getBudingFloorList(fq, null); + if (null != floorList && floorList.size() > 0 ) { + floorAreaMap = new HashMap(); + buildingAreaMap = new HashMap(); + 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 meterList = wxEnergyMeterMapper.findIdList(mq); + //查询公摊表 + Map> 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 sumeterList = wxEnergyMeterMapper.findList(mq); + if (null != sumeterList && sumeterList.size() > 0 ) { + summaryMeterMap = new HashMap>(); + 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 childMeterIds = wxEnergyMeterChildMapper.findChildMeterIdList(mcq); + if (null != childMeterIds && childMeterIds.size() > 0 ) { + summaryMeterMap.put(summaryMeter.getId(), childMeterIds); + } + } + } + } + List resultList = new ArrayList(); for (int i = 0 ; i < shopIds.size(); i ++) { Long shopId= shopIds.get(i); + WxShop shop = shopMap.get(shopId); //根据店铺,所属年月去查询时间区间.根据店铺,时间区间去查对应的抄表数据,根据表来计算总和 WxEnergyFeesTimeShop sq = new WxEnergyFeesTimeShop(); sq.updateTenantInfo(record); @@ -907,36 +1013,23 @@ public class WxEnergyServiceImpl implements WxEnergyService { return; } - //根据店铺去查询表 - WxEnergyMeter mq = new WxEnergyMeter(); - mq.updateTenantInfo(record); - mq.setType(fees.getType()); - mq.setPhysicsType(type.getCode()); - List meterList = wxEnergyMeterMapper.findList(mq); - if (null == meterList || meterList.size() <= 0 ) { - return; - } - //循环店铺科目, for (int j = 0 ; j < shopFeesList.size() ; j ++) { WxEnergyFeesShop shopfee = shopFeesList.get(j); - //查询每一个表的抄表数据,求和 - for (int k = 0 ; k < meterList.size() ; k++) { - WxEnergyReadingCalcuteResult cs = new WxEnergyReadingCalcuteResult(); - cs.updateTenantInfo(record); - cs.setId(idWorker.nextId()); - cs.setCalcuteId(record.getId()); - cs.setShopId(shopId); - cs.setCreateTime(new Date()); - cs.setUpdateTime(new Date()); - cs.setFeesId(shopfee.getFeesId()); - cs.setFeesShopId(shopfee.getId()); - WxEnergyMeter meter = meterList.get(k); - cs.setMeterId(meter.getId()); - cs.setMoney(WxEnergyHelper.calcuteMoney(time, meter, shopfee)); - cs.setPeriod(record.getPeriod()); - resultList.add(cs); - } + WxEnergyReadingCalcuteResult cs = new WxEnergyReadingCalcuteResult(); + cs.updateTenantInfo(record); + cs.setId(idWorker.nextId()); + cs.setCalcuteId(record.getId()); + cs.setShopId(shopId); + cs.setCreateTime(new Date()); + cs.setUpdateTime(new Date()); + cs.setFeesId(shopfee.getFeesId()); + cs.setFeesShopId(shopfee.getId()); + StringBuffer sb = new StringBuffer(); + 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); } } if (resultList.size() > 0 ) { @@ -954,7 +1047,6 @@ public class WxEnergyServiceImpl implements WxEnergyService { Map fessMap = this.getFeesMap(fq); Map floorMap = wxMallFloorService.getFloorMap(record); Map buildingMap = wxMallBuildingService.getBuildingMap(record); - List meterIdList = new ArrayList(); List shopIdList = new ArrayList(); for (int i = 0 ; i < page.getList().size(); i++) { WxEnergyReadingCalcuteResult c = page.getList().get(i); @@ -964,19 +1056,8 @@ public class WxEnergyServiceImpl implements WxEnergyService { c.setFeesName(fees.getName()); } } - if (null != c.getMeterId()) { - meterIdList.add(c.getMeterId()); - } shopIdList.add(c.getShopId()); } - Map meterMap = null; - if (meterIdList.size() > 0 ) { - WxEnergyMeter mq = new WxEnergyMeter(); - mq.updateTenantInfo(record); - mq.setIds(meterIdList); - meterMap = this.getMeterMap(mq); - } - Map shopMap = null; if (shopIdList.size() > 0 ) { WxShop sq = new WxShop(); @@ -986,12 +1067,6 @@ public class WxEnergyServiceImpl implements WxEnergyService { } for (int i = 0 ; i < page.getList().size(); i++) { WxEnergyReadingCalcuteResult c = page.getList().get(i); - if (null != meterMap && null != c.getMeterId()) { - WxEnergyMeter m = meterMap.get(c.getMeterId()); - if (null != m) { - c.setMeterName(m.getName()); - } - } if (null != shopMap && null != c.getShopId()) { WxShop s = shopMap.get(c.getShopId()); if (null != s) { @@ -1011,38 +1086,9 @@ public class WxEnergyServiceImpl implements WxEnergyService { @Override - public void exportReadingCalcute(WxEnergyReadingCalcute record, HttpServletRequest request, HttpServletResponse response) { -// WxEnergyFeesTime tq = new WxEnergyFeesTime(); -// tq.updateTenantInfo(record); -// tq.setId(record.getTimeId()); -// WxEnergyFeesTime time = this.getFeesTimeById(tq); -// if (null == time) { -// return; -// } -// -// WxEnergyFees fq = new WxEnergyFees(); -// fq.updateTenantInfo(record); -// fq.setId(record.getFeesId()); -// WxEnergyFees fees = this.getFeesById(fq); -// if (null == fees) { -// return; -// } -// -// Map buildingMap = wxMallBuildingService.getBuildingMap(record); -// Map floorMap = wxMallFloorService.getFloorMap(record); -// -// List> execlList = new ArrayList>(); -// WxEnergyMeterReading rq = new WxEnergyMeterReading(); -// rq.updateTenantInfo(record); -// //rq.setTimeId(tq.getId()); -// PageInfo page = this.readingListAsPage(rq, 1, 10000); -// if (null != page && null != page.getList()) { -// for (int i = 0 ; i < page.getList().size(); i++) { -// WxEnergyMeterReading r = page.getList().get(i); -// execlList.add(r.generateExcelData(buildingMap, floorMap, time, fees, record)); -// } -// } -// excelService.exportExcel(WxEnergyMeterReading.generateExcelTitle(),execlList, "科目抄表_"+time.getName()+"_"+fees.getName()+".xlsx","sheet1", response); + public void exportReadingCalcuteResult(WxEnergyReadingCalcuteResult record, HttpServletRequest request, HttpServletResponse response) { + PageInfo page = readingCalcuteResultListAsPage(record, 1, 10000); + excelService.exportExcel(page.getList(), null, "能源计算结果", WxEnergyReadingCalcuteResult.class, "能源计算结果.xlsx", response, false); } private File handlerImportFile(MultipartFile mFile,String fileNamePre) { @@ -1134,229 +1180,62 @@ public class WxEnergyServiceImpl implements WxEnergyService { } - private Map getFloorBuildingMoney(WxEnergyMeterReading reading,boolean isFloor) { -// List list = null; -// if (isFloor) { -// list = wxEnergyMeterReadingMapper.findFloorSumMoney(reading); -// }else { -// wxEnergyMeterReadingMapper.findBuildingSumMoney(reading); -// } -// -// if (null != list && list.size() > 0 ) { -// Map buildinMap = new HashMap(); -// for (int i = 0 ; i < list.size() ; i++) { -// Map bup = list.get(i); -// BigDecimal are = (BigDecimal)bup.get("money"); -// if (null != are) { -// buildinMap.put((Long)bup.get("building_id"), are.toPlainString()); -// }else { -// buildinMap.put((Long)bup.get("building_id"), "0"); -// } -// -// } -// return buildinMap; -// } - return null; - } - @Override - public Integer calcuteReading(WxEnergyReadingCalcute record, MallUserInfo user) { -// //根据科目,区间,计算生成账单。 -// WxEnergyMeterReading reading = new WxEnergyMeterReading(); -// reading.updateTenantInfo(record); -// reading.setTimeId(record.getTimeId()); -// reading.setIsDel(EnumYesOrNo.NO.getCode()); -// reading.setIsPublic(EnumYesOrNo.NO.getCode()); -// -// WxEnergyFees fq = new WxEnergyFees(); -// fq.updateTenantInfo(record); -// fq.setIsDel(EnumYesOrNo.NO.getCode()); -// fq.setId(record.getFeesId()); -// WxEnergyFees fees = this.getFeesById(fq); -// if (null == fees) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"科目未查询到。"); -// } -// -// WxEnergyFeesTime tq = new WxEnergyFeesTime(); -// tq.updateTenantInfo(record); -// tq.setId(record.getTimeId()); -// WxEnergyFeesTime time = this.getFeesTimeById(tq); -// if (null == time) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"区间未查询到。"); -// } -// -// if (fees.getType().intValue() != time.getType().intValue()) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"科目和区间的表类型不匹配。"); -// } -// -// reading.setMeterType(time.getType()); -// -// //用户表列表 -// List readingList = wxEnergyMeterReadingMapper.findList(reading); -// if (null != readingList && readingList.size() > 0 ) { -// -// WxShop sq = new WxShop(); -// sq.updateTenantInfo(record); -// Map shopMerchantMap = wxMerchantService.getShopMerchantMap(sq); -// Map shopMap = wxShopService.findShopMap(sq); -// -// WxEnergyMeter mq = new WxEnergyMeter(); -// mq.updateTenantInfo(record); -// mq.setIsDel(EnumYesOrNo.NO.getCode()); -// Map meterMap = this.getMeterMap(mq); -// if (null == meterMap) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"能源表未查询到。"); -// } -// -// String publicTotalArea = "0"; -// BigDecimal publicTotalMoney = new BigDecimal(0); -// BigDecimal b0 = new BigDecimal(0); -// Map buildingFloorMoney = null; -// Map buildingFloorArea = null; -// if (fees.getPublicCalcute().intValue() == EnumEnergyPublicCalcuteRule.ALL.getCode().intValue()) { -// //全部就查询所有公共表的费用 -// reading.setIsPublic(EnumYesOrNo.YES.getCode()); -// String publicMoney = wxEnergyMeterReadingMapper.findAllSumMoney(reading); -// if (StringUtils.isNotBlank(publicMoney)) { -// publicTotalMoney = new BigDecimal(publicMoney); -// } -// //公摊总面积 -// WxMallFloor mf = new WxMallFloor(); -// mf.updateTenantInfo(record); -// publicTotalArea = wxMallFloorService.getAllPublicAreaSum(mf); -// if (StringUtils.isBlank(publicTotalArea)) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层可用面积未配置。"); -// } -// BigDecimal areaDecimal = new BigDecimal(publicTotalArea); -// if (areaDecimal.compareTo(new BigDecimal(0)) <= 0 ) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层可用面积未配置。"); -// } -// }else if (fees.getPublicCalcute().intValue() == EnumEnergyPublicCalcuteRule.BUILDING.getCode().intValue()) { -// //如果是按楼栋计算,则要把每个楼栋的金额都要算出来 -// reading.setIsPublic(EnumYesOrNo.YES.getCode()); -// buildingFloorMoney = getFloorBuildingMoney(reading,false); -// //各楼座总面积 -// WxMallFloor mf = new WxMallFloor(); -// mf.updateTenantInfo(record); -// buildingFloorArea = wxMallFloorService.getBuildingPublicAreaSum(mf); -// if (null == buildingFloorArea) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层可用面积未配置。"); -// } -// }else if (fees.getPublicCalcute().intValue() == EnumEnergyPublicCalcuteRule.FLOOR.getCode().intValue()) { -// //查询各楼层的费用 -// reading.setIsPublic(EnumYesOrNo.YES.getCode()); -// buildingFloorMoney = getFloorBuildingMoney(reading,true); -// //各楼层面积 -// //各楼座总面积 -// WxMallFloor mf = new WxMallFloor(); -// mf.updateTenantInfo(record); -// buildingFloorArea = wxMallFloorService.getFloorPublicAreaSum(mf); -// if (null == buildingFloorArea) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层可用面积未配置。"); -// } -// } -// -// List billList = new ArrayList(); -// for (int i = 0 ; i< readingList.size() ; i ++) { -// WxEnergyMeterReading mr = readingList.get(i); -// //用户表账单 -// WxMerchant merchant = shopMerchantMap.get(mr.getShopId()); -// if (null == merchant) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"铺位["+mr.getShopNumber()+"]未找到出租商户"); -// } -// WxEnergyMeter meter = meterMap.get(mr.getMeterId()); -// if (null == meter) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"表["+mr.getMeterName()+"]不存在"); -// } -// WxShop shop = shopMap.get(mr.getShopId()); -// WxAllBill userBill = mr.generateUserBill(record, merchant, user, meter); -// userBill.setEnergyFeesId(fees.getId()); -// if (null != userBill) { -// billList.add(userBill); -// } -// /* -// * 总表(分摊账单) -// * 如果科目是根据总面积公摊,则根据总面积计算 -// * 如果科目是根据楼栋公摊,则根据当前记录的楼栋面积计算 -// * 如果科目是根据楼层公摊,则根据当前记录的楼层面积计算 -// */ -// WxAllBill publicBill = null; -// if (fees.getPublicCalcute().intValue() == EnumEnergyPublicCalcuteRule.ALL.getCode().intValue()) { -// if (publicTotalMoney.compareTo(b0) > 0 ) { -// String needPay = publicTotalMoney.multiply(new BigDecimal(shop.getRentArea())).divide(new BigDecimal(publicTotalArea)).setScale(2,RoundingMode.HALF_UP).toPlainString(); -// publicBill = mr.generatePublicBill(record, merchant, user, needPay); -// } -// }else if (fees.getPublicCalcute().intValue() == EnumEnergyPublicCalcuteRule.BUILDING.getCode().intValue()) { -// String buildingArea = buildingFloorArea.get(mr.getBuildingId()); -// if (StringUtils.isBlank(buildingArea) || new BigDecimal(buildingArea).compareTo(new BigDecimal(0)) <= 0 ) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层可用面积未配置完全。"); -// } -// BigDecimal buildingMoney = new BigDecimal(0); -// if (null != buildingFloorMoney ) { -// String bMoney = buildingFloorMoney.get(mr.getBuildingId()); -// if (StringUtils.isNotBlank(bMoney)) { -// buildingMoney = new BigDecimal(bMoney); -// } -// } -// if (buildingMoney.compareTo(b0) > 0 ) { -// String needPay = buildingMoney.multiply(new BigDecimal(shop.getRentArea())).divide(new BigDecimal(buildingArea)).setScale(2,RoundingMode.HALF_UP).toPlainString(); -// publicBill = mr.generatePublicBill(record, merchant, user, needPay); -// } -// }else if (fees.getPublicCalcute().intValue() == EnumEnergyPublicCalcuteRule.FLOOR.getCode().intValue()) { -// String floorArea = buildingFloorArea.get(mr.getFloorId()); -// if (StringUtils.isBlank(floorArea) || new BigDecimal(floorArea).compareTo(new BigDecimal(0)) <= 0 ) { -// throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"楼层可用面积未配置完全。"); -// } -// -// BigDecimal floorMoney = new BigDecimal(0); -// if (null != buildingFloorMoney ) { -// String fMoney = buildingFloorMoney.get(mr.getFloorId()); -// if (StringUtils.isNotBlank(fMoney)) { -// floorMoney = new BigDecimal(fMoney); -// } -// } -// if (floorMoney.compareTo(b0) > 0 ) { -// String needPay = floorMoney.multiply(new BigDecimal(shop.getRentArea())).divide(new BigDecimal(floorArea)).setScale(2,RoundingMode.HALF_UP).toPlainString(); -// publicBill = mr.generatePublicBill(record, merchant, user, needPay); -// } -// } -// -// if (null != publicBill) { -// publicBill.setEnergyFeesId(fees.getId()); -// billList.add(publicBill); -// } -// } -// boolean allSuccess = true; -// if (billList.size() > 0 ) { -// try { -// //先把之前的未付的账单全部删除掉,已支付的账单先不处理 -// WxAllBill delDaily = new WxAllBill(); -// delDaily.updateTenantInfo(record); -// delDaily.setEnergyReadingCalcuteId(record.getId()); -// wxAllBillService.deleteEnergyReadingBills(delDaily); -// wxAllBillService.insertBills(record.getTenantId(), billList); -// }catch(Exception e) { -// logger.error("insert bills error.",e); -// allSuccess = false; -// } -// WxEnergyReadingCalcute c = new WxEnergyReadingCalcute(); -// c.updateTenantInfo(record); -// c.setId(record.getId()); -// c.setIsCalcuted(EnumYesOrNo.YES.getCode()); -// c.setUpdateTime(new Date()); -// c.setUpdateBy(user.getId()); -// c.setUpdateByName(user.getName()); -// c.setRemark(record.getRemark()); -// if (allSuccess) { -// c.setCalcuteSuccess(EnumYesOrNo.YES.getCode()); -// }else { -// c.setCalcuteSuccess(EnumYesOrNo.NO.getCode()); -// } -// wxEnergyReadingCalcuteMapper.updateById(c); -// return billList.size(); -// } -// } - return 0; + public void createBill(WxEnergyReadingCalcute record, MallUserInfo user) { + + WxEnergyReadingCalcute calcute = wxEnergyReadingCalcuteMapper.selectById(record.getId(), record.getTenantId()); + + WxEnergyReadingCalcuteResult crq = new WxEnergyReadingCalcuteResult(); + crq.updateTenantInfo(record); + crq.setCalcuteId(calcute.getId()); + List shopIdList = wxEnergyReadingCalcuteResultMapper.findShopIdList(crq); + Map shopMap = null; + Map merchantMap = null; + if (shopIdList.size() > 0 ) { + WxShop sq = new WxShop(); + sq.updateTenantInfo(record); + sq.setIds(shopIdList); + shopMap = wxShopService.findShopMap(sq); + merchantMap = wxMerchantService.getShopMerchantMap(sq); + } + + + List resultList = wxEnergyReadingCalcuteResultMapper.findList(crq); + if (null != resultList && resultList.size() > 0 ) { + List billList = new ArrayList(); + for (int i = 0 ; i < resultList.size(); i++) { + WxEnergyReadingCalcuteResult result = resultList.get(i); + WxShop shop = null; + if (null != shopMap) { + shop = shopMap.get(result.getShopId()); + } + WxMerchant merchant = null; + if (null != merchantMap) { + merchant = merchantMap.get(result.getShopId()); + } + WxAllBill bill = result.generateBill(calcute, merchant, shop, user, result.getMoney(), result.getMoneyDeail(), "能源计算自动生成"); + billList.add(bill); + } + try { + //先把之前的未付的账单全部删除掉,已支付的账单先不处理 + WxAllBill delDaily = new WxAllBill(); + delDaily.updateTenantInfo(record); + delDaily.setEnergyReadingCalcuteId(record.getId()); + wxAllBillService.deleteEnergyReadingBills(delDaily); + wxAllBillService.insertBills(record.getTenantId(), billList); + }catch(Exception e) { + logger.error("insert bills error.",e); + } + WxEnergyReadingCalcute c = new WxEnergyReadingCalcute(); + c.updateTenantInfo(record); + c.setId(record.getId()); + c.setIsCalcuted(EnumYesOrNo.YES.getCode()); + c.setUpdateTime(new Date()); + c.setUpdateBy(user.getId()); + c.setUpdateByName(user.getName()); + c.setRemark(record.getRemark()); + wxEnergyReadingCalcuteMapper.updateById(c); + } } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java index cadfe0239..637c1d439 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java @@ -113,10 +113,15 @@ public class WxMallBuildingServiceImpl implements WxMallBuildingService { @Override public ResultData getBuildingList(TenantEntity tenantEntity) { + return new ResultData(getBuildingList1(tenantEntity)); + } + + @Override + public List getBuildingList1(TenantEntity tenantEntity) { WxMallBuilding wxMallBuilding = new WxMallBuilding(); wxMallBuilding.updateTenantInfo(tenantEntity); List list = wxMallBuildingMapper.findList(wxMallBuilding); - return new ResultData(list); + return list; } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallFloorServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallFloorServiceImpl.java index ea351486c..36a7b4838 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallFloorServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallFloorServiceImpl.java @@ -70,6 +70,15 @@ public class WxMallFloorServiceImpl implements WxMallFloorService { return new ResultData(list); } + @Override + public List getBudingFloorList(TenantEntity tenantEntity, Long buildingId) { + WxMallFloor wxMallFloor = new WxMallFloor(); + wxMallFloor.updateTenantInfo(tenantEntity); + wxMallFloor.setBuildingId(buildingId); + List list = wxMallFloorMapper.findList(wxMallFloor); + return list; + } + @Override public List getFloorIdList(WxMallFloor record) { return wxMallFloorMapper.getFloorIds(record); diff --git a/mallinkService/src/main/java/com/iformall/utils/FormulaParser.java b/mallinkService/src/main/java/com/iformall/utils/FormulaParser.java new file mode 100644 index 000000000..519603913 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/FormulaParser.java @@ -0,0 +1,76 @@ +package com.iformall.utils; + +import java.util.Stack; + +public class FormulaParser { + + public static double evaluate(String formula) { + Stack values = new Stack<>(); + Stack operators = new Stack<>(); + + for (int i = 0; i < formula.length(); i++) { + char c = formula.charAt(i); + + if (Character.isDigit(c) || c == '.') { + StringBuilder numBuilder = new StringBuilder(); + while (i < formula.length() && (Character.isDigit(formula.charAt(i)) || formula.charAt(i) == '.')) { + numBuilder.append(formula.charAt(i)); + i++; + } + i--; + values.push(Double.parseDouble(numBuilder.toString())); + } else if (c == '(') { + operators.push(c); + } else if (c == ')') { + while (operators.peek()!= '(') { + performOperation(values, operators); + } + operators.pop(); + } else if (c == '+' || c == '-') { + while (!operators.isEmpty() && (operators.peek() == '*' || operators.peek() == '/')) { + performOperation(values, operators); + } + operators.push(c); + } else if (c == '*' || c == '/') { + operators.push(c); + } + } + + while (!operators.isEmpty()) { + performOperation(values, operators); + } + + return values.pop(); + } + + public static void performOperation(Stack values, Stack operators) { + double num2 = values.pop(); + double num1 = values.pop(); + char op = operators.pop(); + + switch (op) { + case '+': + values.push(num1 + num2); + break; + case '-': + values.push(num1 - num2); + break; + case '*': + values.push(num1 * num2); + break; + case '/': + if (num2!= 0) { + values.push(num1 / num2); + } else { + throw new ArithmeticException("除数不能为 0"); + } + break; + } + } + + public static void main(String[] args) { + String formula = "((2 + 3.2) * 4.1 / 3 - 5.6/2) / 2"; + double result = evaluate(formula); + System.out.println("结果: " + result); + } +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/utils/PlaceholderExtractorWithPrefixAndSuffix.java b/mallinkService/src/main/java/com/iformall/utils/PlaceholderExtractorWithPrefixAndSuffix.java new file mode 100644 index 000000000..06c8d01cd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/PlaceholderExtractorWithPrefixAndSuffix.java @@ -0,0 +1,32 @@ +package com.iformall.utils; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PlaceholderExtractorWithPrefixAndSuffix { + + public static List extractPlaceholders(String text, String prefix, String suffix) { + List placeholders = new ArrayList<>(); + String pattern = "\\{" + prefix + "[^}]*" + suffix + "\\}"; + Pattern regex = Pattern.compile(pattern); + Matcher matcher = regex.matcher(text); + + while (matcher.find()) { + placeholders.add(matcher.group()); + } + + return placeholders; + } + + public static void main(String[] args) { + String text = "This is a {prefix_value_suffix} and another {prefix_another_suffix}."; + String prefix = "prefix"; + String suffix = "_suffix"; + + List extractedPlaceholders = extractPlaceholders(text, prefix, suffix); + for (String placeholder : extractedPlaceholders) { + System.out.println(placeholder); + } + } +} \ No newline at end of file diff --git a/mallinkService/src/main/resources/mapper/WxEnergyFeesShopMapper.xml b/mallinkService/src/main/resources/mapper/WxEnergyFeesShopMapper.xml index e4b097e81..c30a2cabb 100644 --- a/mallinkService/src/main/resources/mapper/WxEnergyFeesShopMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxEnergyFeesShopMapper.xml @@ -10,13 +10,14 @@ + - `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`price`,`is_public`,`formula`,`formula_content`,`shop_id`,`fees_id` + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`price`,`is_public`,`formula`,`formula_list_str`,`formula_content`,`shop_id`,`fees_id` diff --git a/mallinkService/src/main/resources/mapper/WxEnergyMeterMapper.xml b/mallinkService/src/main/resources/mapper/WxEnergyMeterMapper.xml index 525f1ef8a..d13d1a1c6 100644 --- a/mallinkService/src/main/resources/mapper/WxEnergyMeterMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxEnergyMeterMapper.xml @@ -33,6 +33,7 @@ and `physics_type` = #{physicsType} and `shop_type` = #{shopType} and name like concat('%', #{name},'%') + and `physics_type` in (1,2) and physics_type in @@ -55,6 +56,12 @@ + + + select sum(CAST(ifnull(cur_number,'0') AS DECIMAL(20,4)) - CAST(ifnull(pre_number,'0') AS DECIMAL(20,4))) total_number + from wx_energy_meter_reading + + diff --git a/mallinkService/src/main/resources/mapper/WxEnergyMeterShopFloorMapper.xml b/mallinkService/src/main/resources/mapper/WxEnergyMeterShopFloorMapper.xml index 78a11d049..92de0fdf4 100644 --- a/mallinkService/src/main/resources/mapper/WxEnergyMeterShopFloorMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxEnergyMeterShopFloorMapper.xml @@ -28,6 +28,12 @@ and `type` = #{type} and `meter_id` = #{meterId} and `alise_id` = #{aliseId} + + and alise_id in + + #{aidItem} + + and type in diff --git a/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteMapper.xml b/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteMapper.xml index dae00949d..39b3f730c 100644 --- a/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteMapper.xml @@ -15,7 +15,6 @@ - @@ -23,7 +22,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`create_by`,`create_by_name`, - `update_by`,`update_by_name`,`remark`,`period`,`fees_id`,`is_calcuted`,`calcute_success`,`is_del`,`shop_size`,`shop` + `update_by`,`update_by_name`,`remark`,`period`,`fees_id`,`is_calcuted`,`is_del`,`shop_size`,`shop` @@ -41,7 +40,6 @@ and `create_by` = #{createBy} and `fees_id` = #{feesId} and `is_calcuted` = #{isCalcuted} - and `calcute_success` = #{calcuteSuccess} and `is_del` = #{isDel} and fees_id in diff --git a/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteResultMapper.xml b/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteResultMapper.xml index 105ed0776..5c9bac628 100644 --- a/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteResultMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxEnergyReadingCalcuteResultMapper.xml @@ -11,13 +11,13 @@ - + - `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`calcute_id`,`shop_id`,`fees_id`,`fees_shop_id`,`meter_id`,`money`,`period` + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`calcute_id`,`shop_id`,`fees_id`,`fees_shop_id`,`money`,`period`,`money_deail` @@ -36,7 +36,6 @@ and `shop_id` = #{shopId} and `fees_id` = #{feesId} and `fees_shop_id` = #{feesShopId} - and `meter_id` = #{meterId} and id in @@ -73,7 +72,7 @@ ( #{item.id},#{item.tenantId},#{item.parentTenantId},#{item.createTime},#{item.updateTime},#{item.calcuteId}, - #{item.shopId},#{item.feesId},#{item.feesShopId},#{item.meterId},#{item.money},#{item.period} + #{item.shopId},#{item.feesId},#{item.feesShopId},#{item.money},#{item.period},#{item.moneyDeail} )