diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java index 0b9cc44a1..524449900 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java @@ -218,6 +218,7 @@ public class WxBillAllController extends BaseController { wxBillAll.setEndtime(wxBillAll.getEndtime() + " 23:59:59"); } wxBillAll.updateTenantInfo(getTenantInfo()); + wxBillAllService.exportOweBill(wxBillAll, request, response); } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2022012000001__optimize.sql b/mallinkAdmin/src/main/resources/db/migration/V2022012000001__optimize.sql index 00b4e5815..cd8493078 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2022012000001__optimize.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2022012000001__optimize.sql @@ -1009,3 +1009,25 @@ UPDATE wx_batch_order_97 bo, wx_order_97 o SET bo.order_type=o.compose_order_ty UPDATE wx_batch_order_98 bo, wx_order_98 o SET bo.order_type=o.compose_order_type WHERE bo.id = o.compose_order_id; UPDATE wx_batch_order_99 bo, wx_order_99 o SET bo.order_type=o.compose_order_type WHERE bo.id = o.compose_order_id; +ALTER TABLE `wx_bill_settle` ADD COLUMN `has_recorded` int(1) NOT NULL DEFAULT 0 COMMENT '是否已经被统计 1:已经被统计' ; + +CREATE TABLE `wx_bill_settle_schedule` ( + `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', + `settle_number` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结算单号', + `merchant_id` bigint(20) DEFAULT NULL COMMENT '商户ID', + `status` smallint(1) DEFAULT '0' COMMENT '7待清算3结算完成', + `apply_status` smallint(1) DEFAULT '0' COMMENT '审核状态0未审核1审核中2审核完成3驳回4异常终止5撤回', + `receive_money` bigint(12) DEFAULT '0' COMMENT '收款', + `pay_money` bigint(12) DEFAULT '0' COMMENT '承付', + `settletime` datetime DEFAULT NULL COMMENT '结算时间', + `createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updatetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `settle_receive_pay` bigint(12) NOT NULL DEFAULT '0' COMMENT '结算收款,定时统计', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='结算单'; + +ALTER TABLE `wx_pay_bill` ADD COLUMN `bill_type_value` int(1) NOT NULL DEFAULT 0 COMMENT '账单类型' ; + + diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java index d7d3cab62..67b205b0e 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java @@ -38,26 +38,26 @@ public class WxBillController extends BaseController { @Autowired WxBillSettleService wxBillSettleService; - @ApiOperation("所有欠缴和待缴的数据") - @PostMapping("listBillOweAndWaitPay") - public ResultData listBillOweAndWaitPay(@RequestBody WxBillAll wxBillAll) { - - if(StringUtils.isEmpty(wxBillAll.getTenantId())){ - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"tenantId不能为空"); - } - if(wxBillAll.getMerchantId()==null){ - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"merchantId不能为空"); - } - WxMerchant wxMerchant = wxMerchantService.getById(wxBillAll.getMerchantId()); - if(wxMerchant==null){ - return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); - } - if(wxMerchant.getStatus().equals(EnumMerchantStatus.NOT_VALID.getCode())){ - return new ResultData(ErrorCode.MERCHANT_INFO_NOT_VALID); - } - List> result=wxBillAllService.listBillOweAndWaitPay(wxBillAll); - return new ResultData(result); - } +// @ApiOperation("所有欠缴和待缴的数据") +// @PostMapping("listBillOweAndWaitPay") +// public ResultData listBillOweAndWaitPay(@RequestBody WxBillAll wxBillAll) { +// +// if(StringUtils.isEmpty(wxBillAll.getTenantId())){ +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"tenantId不能为空"); +// } +// if(wxBillAll.getMerchantId()==null){ +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"merchantId不能为空"); +// } +// WxMerchant wxMerchant = wxMerchantService.getById(wxBillAll.getMerchantId()); +// if(wxMerchant==null){ +// return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); +// } +// if(wxMerchant.getStatus().equals(EnumMerchantStatus.NOT_VALID.getCode())){ +// return new ResultData(ErrorCode.MERCHANT_INFO_NOT_VALID); +// } +// List> result=wxBillAllService.listBillOweAndWaitPay(wxBillAll); +// return new ResultData(result); +// } @ApiOperation("账单") @PostMapping("listBill") @@ -69,6 +69,9 @@ public class WxBillController extends BaseController { if(wxBillAll.getMerchantId()==null){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"merchantId不能为空"); } + if(wxBillAll.getBillTypeValue()==null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"billTypeValue不能为空"); + } WxMerchant wxMerchant = wxMerchantService.getById(wxBillAll.getMerchantId()); if(wxMerchant==null){ return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); @@ -84,7 +87,7 @@ public class WxBillController extends BaseController { logger.info("开始时间和结束时间要同时存在或不存在"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"starttime和endtime要同时存在或不存在"); } - return wxBillAllService.listBill(wxBillAll); + return wxBillAllService.pageListBill(wxBillAll,wxMerchant,true,true,true); } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxPayBillController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxPayBillController.java index 873bf5e86..c6d306f05 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxPayBillController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxPayBillController.java @@ -4,10 +4,12 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxPayBill; import com.iformall.enums.EnumPayStatus; import com.iformall.enums.EnumPayWay; import com.iformall.exception.MallinkException; +import com.iformall.service.WxMerchantService; import com.iformall.service.WxPayBillService; import com.iformall.utils.IPUtil; import io.swagger.annotations.Api; @@ -32,8 +34,11 @@ public class WxPayBillController extends BaseController { @Autowired private WxPayBillService wxPayBillService; + + @Autowired + WxMerchantService wxMerchantService; - @ApiOperation(value = "发起微信小程序支付订单", notes = "{\"billId\":\"string\",\"appId\":\"string\",\"openId\":\"string\",\"bUserId\":\"string\"}") + @ApiOperation(value = "发起微信小程序支付订单", notes = "{\"billTypeValue\":\"string\",\"billId\":\"string\",\"appId\":\"string\",\"openId\":\"string\",\"bUserId\":\"string\",\"merchantId\":\"string\"}") @RequestMapping(value = "/create", method = RequestMethod.POST) public ResultData _create(@RequestBody Map paramMap, HttpServletRequest request) throws Exception { logger.info("/api/pay/create" + paramMap.toString()); @@ -50,11 +55,39 @@ public class WxPayBillController extends BaseController { } catch (NumberFormatException e) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "billId参数不正确"); } + + String billTypeValueStr = paramMap.get("billTypeValue"); + if (StringUtils.isEmpty(billTypeValueStr)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "billTypeValue不能为空"); + } + + Integer billTypeValue = null; + try { + billTypeValue = Integer.parseInt(billTypeValueStr); + } catch (NumberFormatException e) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "billTypeValue参数不正确"); + } + + String merchantIdStr = paramMap.get("merchantId"); + if (StringUtils.isEmpty(merchantIdStr)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "merchantId不能为空"); + } + + Long merchantId = null; + try { + merchantId = Long.parseLong(merchantIdStr); + } catch (NumberFormatException e) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "merchantId参数不正确"); + } + + WxMerchant wxMerchant = wxMerchantService.getById(merchantId); + if(wxMerchant==null){ + return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); + } //b_user_id String bUserIdStr = paramMap.get("bUserId"); if (StringUtils.isEmpty(bUserIdStr)) { - logger.info("bUserId不能为空: " + paramMap.toString()); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "bUserId不能为空"); } @@ -79,7 +112,7 @@ public class WxPayBillController extends BaseController { record.updateTenantInfo(getTenantInfo()); try { record.setIp(IPUtil.getIpAddr(request)); - return wxPayBillService.createPayBill(appInfo, record, EnumPayWay.PAY_WAY_WECHAT); + return wxPayBillService.createPayBill(wxMerchant,billTypeValue,appInfo, record, EnumPayWay.PAY_WAY_WECHAT); } catch (MallinkException e) { logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/BillSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/BillSchedule.java new file mode 100644 index 000000000..973023a11 --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/BillSchedule.java @@ -0,0 +1,51 @@ +package com.iformall.schedule; + +import com.iformall.domain.vo.WxBillAll; +import com.iformall.mapper.WxBillAllMapper; +import com.iformall.mapper.WxBillSettleScheduleMapper; +import com.iformall.service.WxBillAllService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import java.util.List; + +@Component +public class BillSchedule { + + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxBillAllService wxBillAllService; + + @Autowired + WxBillSettleScheduleMapper wxBillSettleScheduleMapper; + + /** + * 每天1点执行 + * 结算账单 + */ + @Async + @Scheduled(cron = "0 0 1 * * ?") + public void settleBill() { + WxBillAll wxBillAll = new WxBillAll(); + //wxBillAll.updateTenantInfo(wxBillAll); + List settleBillIdList = wxBillSettleScheduleMapper.listToSettleBillIdList(wxBillAll); + if (null != settleBillIdList && settleBillIdList.size() > 0 ) { + for (int i = 0 ; i < settleBillIdList.size(); i ++) { + Long settleId = settleBillIdList.get(i); + try { + Double pay = wxBillAllService.calcuteSettleBillReceivePay(settleId); + wxBillAllService.createBillSettleSchedule(settleId, pay); + }catch(Exception e) { + logger.error("settleBill error.",e); + } + } + } + + } + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java index 4d185f1d6..d8f716d96 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java @@ -22,7 +22,13 @@ import java.util.Map; @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class WxBillDaily extends TenantEntity { - protected Long id; + /** + * + */ + private static final long serialVersionUID = 5004263718907992977L; + + + protected Long id; @TableField(exist = false) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java index 0af0b5520..daddddd8c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java @@ -23,7 +23,12 @@ import java.util.Map; @EqualsAndHashCode(callSuper = true) public class WxBillOther extends TenantEntity { - protected Long id; + /** + * + */ + private static final long serialVersionUID = -5919107280859407195L; + + protected Long id; @Excel(name = "商户名称", width = 20, orderNum = "2") @TableField(exist = false) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java index 4cd359f94..75ff9b01b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java @@ -21,7 +21,12 @@ import java.util.Date; @EqualsAndHashCode(callSuper = true) public class WxBillProperty extends TenantEntity { - protected Long id; + /** + * + */ + private static final long serialVersionUID = -4019665043805504986L; + + protected Long id; @Excel(name = "商户名称", width = 20, orderNum = "2") @TableField(exist = false) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java index 6643e2b7f..1b57de98c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java @@ -20,7 +20,12 @@ import java.util.Map; @EqualsAndHashCode(callSuper = true) public class WxBillSettle extends TenantEntity { - protected Long id; + /** + * + */ + private static final long serialVersionUID = 4737561313157612702L; + + protected Long id; @io.swagger.annotations.ApiModelProperty(value="结算单号",name="settleNumber") @Excel(name="结算单号",width = 20,orderNum = "1") @@ -51,6 +56,9 @@ public class WxBillSettle extends TenantEntity { private Date createtime; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updatetime") private Date updatetime; + + @io.swagger.annotations.ApiModelProperty(value="是否已经统计,EnumHasRecorded.class",name="hasRecorded") + private Integer hasRecorded; @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value = "审批流参数", name = "flowParams") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleSchedule.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleSchedule.java new file mode 100644 index 000000000..ba4b092be --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleSchedule.java @@ -0,0 +1,66 @@ +package com.iformall.domain.po; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.common.SortColumn; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author gongbiao + */ +@TableName(value = "wx_bill_settle_schedule") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxBillSettleSchedule extends TenantEntity { + + /** + * + */ + private static final long serialVersionUID = -5919107280859407195L; + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="结算单号",name="settleNumber") + @Excel(name="结算单号",width = 20,orderNum = "1") + private String settleNumber; + @TableField(exist = false) + @Excel(name="结算商户",width = 20,orderNum = "2") + private String merchantName; + @io.swagger.annotations.ApiModelProperty(value="商户id",name="merchantId") + private Long merchantId; + @io.swagger.annotations.ApiModelProperty(value="0待确认1未清算结余金额2结算完成",name="status") + @Excel(name="结算状态",width = 20,orderNum = "8") + private Integer status; + @io.swagger.annotations.ApiModelProperty(value="审核状态0未审核1审核中2审核完成3驳回4异常终止5撤回",name="applyStatus") + @Excel(name="审批状态",width = 20,orderNum = "9") + private Integer applyStatus; + @Excel(name="收款(元)",width = 20,orderNum = "4") + @io.swagger.annotations.ApiModelProperty(value="收款",name="receiveMoney") + private Long receiveMoney; + @io.swagger.annotations.ApiModelProperty(value="承付",name="payMoney") + @Excel(name="承付(元)",width = 20,orderNum = "5") + private Long payMoney; + @io.swagger.annotations.ApiModelProperty(value="结算时间",name="settletime") + @Excel(name="结算时间",width = 20,orderNum = "7") + private Date settletime; + + @Excel(name="创建时间",width = 20,orderNum = "3") + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime") + private Date createtime; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updatetime") + private Date updatetime; + + @io.swagger.annotations.ApiModelProperty(value="结算收款,定时统计",name="settleReceivePay") + private Long settleReceivePay; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java index d189637ff..955187786 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java @@ -19,7 +19,12 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) public class WxMerchantSubsidy extends TenantEntity { - protected Long id; + /** + * + */ + private static final long serialVersionUID = -2906255307445909293L; + + protected Long id; @TableField(exist = false) protected String idStr; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayBill.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayBill.java index b806f9e6e..a1edde52c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayBill.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayBill.java @@ -26,6 +26,7 @@ public class WxPayBill extends TenantEntity { private Long billId; @io.swagger.annotations.ApiModelProperty(value="用户ID",name="bUserId") private Long bUserId; + @io.swagger.annotations.ApiModelProperty(value="ip地址",name="ip") private String ip; @io.swagger.annotations.ApiModelProperty(value="支付金额(分)",name="payAmount") @@ -53,6 +54,9 @@ public class WxPayBill extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="openId",name="openId") private String openId; + + @io.swagger.annotations.ApiModelProperty(value="billTypeValue",name="billTypeValue") + private Integer billTypeValue; public Long getbUserId() { diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java index 6440a7720..b1e7989cc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java @@ -82,7 +82,7 @@ public class WxBillAll extends TenantEntity { private Integer totalOwe; private List billTypeList; - + private List merchantIdList; @TableField(exist = false) @SortColumn(column = "rentReceivePay") diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillQueryType.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillQueryType.java new file mode 100644 index 000000000..c78cf2a03 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillQueryType.java @@ -0,0 +1,52 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumBillQueryType { + + RENT(1,"租金"), + RENT_DEPOSIT(2,"租赁押金"), + PROPERTY(3,"物业"), + PROPERTY_DEPOSIT(4, "物业押金"), + WATER_POWER_AIR(5, "水电空调费"), + OTHER(7, "其他"), + OTHER_DEPOSIT(8, "其他押金"), + SETTLE(10, "结算单") + ; + + public static Integer getRealType(Integer type) { + //查询的列表数据中 5:水费 6:电费 9:空调费 + if (type == 5 || type == 6 || type == 9) { + return WATER_POWER_AIR.getCode(); + } + return type; + } + + public static EnumBillQueryType getEnum(Integer code) { + for (EnumBillQueryType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBillQueryType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumHasRecorded.java b/mallinkService/src/main/java/com/iformall/enums/EnumHasRecorded.java new file mode 100644 index 000000000..bd3004526 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumHasRecorded.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumHasRecorded { + YES(1, "已经被统计"), + NO(0, "未被统计"); + + public static EnumHasRecorded getEnum(Integer code) { + for (EnumHasRecorded value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumHasRecorded(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java index 4b445c124..5c754e716 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java @@ -1,25 +1,46 @@ package com.iformall.mapper; +import com.iformall.domain.po.WxBillDaily; +import com.iformall.domain.po.WxBillOther; +import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxBillRent; +import com.iformall.domain.po.WxMerchantSubsidy; import com.iformall.domain.vo.WxBillAll; import com.iformall.domain.vo.WxBillAllVo; import java.util.List; import java.util.Map; +import org.apache.ibatis.annotations.Param; + /** * @author gongbiao */ public interface WxBillAllMapper { - List list(WxBillAll record); + List listRentBill(WxBillAll record); + List listRentDepositBill(WxBillAll record); + List listPropertyBill(WxBillAll record); + List listPropertyDepositBill(WxBillAll record); + List listDailyBill(WxBillAll record); + List listOtherBill(WxBillAll record); + List listOtherDepositBill(WxBillAll record); + Map queryOweInfo(WxBillAll record); Map queryPaidInfo(WxBillAll record); - List> listData(WxBillAll wxBillAll); - + List> listRentBillData(WxBillAll wxBillAll); + List> listRentDepositBillData(WxBillAll wxBillAll); + List> listPropertyBillData(WxBillAll wxBillAll); + List> listPropertyDepositBillData(WxBillAll wxBillAll); + List> listDailyBillData(WxBillAll wxBillAll); + List> listOtherBillData(WxBillAll wxBillAll); + List> listOtherDepositBillData(WxBillAll wxBillAll); + List> listSettleBillData(WxBillAll wxBillAll); + List> getWaitPayBill(); List> getOweBill(); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java index 8e3148041..64ae17d8c 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java @@ -4,6 +4,8 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxBillSettle; import java.util.List; +import org.apache.ibatis.annotations.Param; + /** * @author luozukai */ @@ -13,6 +15,8 @@ public interface WxBillSettleMapper extends CommonMapper { void update(WxBillSettle record); + + void updateRecorded(@Param("id")Long id); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleScheduleMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleScheduleMapper.java new file mode 100644 index 000000000..507ad615f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleScheduleMapper.java @@ -0,0 +1,35 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxBillDaily; +import com.iformall.domain.po.WxBillOther; +import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxBillRent; +import com.iformall.domain.po.WxBillSettleSchedule; +import com.iformall.domain.po.WxMerchantSubsidy; +import com.iformall.domain.vo.WxBillAll; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +/** + * @author luozukai + */ +public interface WxBillSettleScheduleMapper extends CommonMapper { + + void createScheduleFromBillSettle(@Param("id") Long id,@Param("settleReceivePay") Double settleReceivePay); + + List listToSettleBillIdList(WxBillAll wxBillAll); + List listBillSettleBillBillId(@Param("settleId")Long settleId, @Param("type")Integer type); + Double calculteRentRecivePay(WxBillRent billRent); + Double calculteRentDepositRecivePay(WxBillRent billRent); + Double calcultePropertyRecivePay(WxBillProperty billProperty); + Double calcultePropertyDepositRecivePay(WxBillProperty billProperty); + Double calculteDailyRecivePay(WxBillDaily billDaily); + Double calculteOtherRecivePay0(WxBillOther billOther); + Double calculteOtherRecivePay1(WxBillOther billOther); + Double calculteOtherDepositRecivePay0(WxBillOther billOther); + Double calculteMerchantSubsidyRecivePay1(WxMerchantSubsidy merchantSubsidy); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index bcd11e730..3692ccbc1 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -3,6 +3,7 @@ package com.iformall.service; import com.iformall.common.ResultData; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillSettle; +import com.iformall.domain.po.WxMerchant; import com.iformall.domain.vo.WxBillAll; import com.iformall.domain.vo.WxBillAllVo; import com.iformall.domain.vo.WxBillExcelTemplate; @@ -23,9 +24,10 @@ public interface WxBillAllService { Map listAsPage(WxBillAll wxBillAll, Integer pageNum, Integer pageSize); - List> listBillOweAndWaitPay(WxBillAll wxBillAll); + //List> listBillOweAndWaitPay(WxBillAll wxBillAll); - ResultData listBill(WxBillAll wxBillAll); + ResultData pageListBill(WxBillAll wxBillAll,WxMerchant wxMerchant,boolean hasShop,boolean hasPayBill,boolean hasReceivePay); + List> listBill(WxBillAll wxBillAll,WxMerchant wxMerchant,boolean hasSet,boolean hasShop,boolean hasPayBill,boolean hasReceivePay); void updateBill(Map bill); @@ -81,5 +83,9 @@ public interface WxBillAllService { void importBill(String importKey, WxBillExcelTemplate bill, MallUserInfo user); void importBillOther(String importKey, WxBillExcelTemplateOther bill, MallUserInfo user); + + Double calcuteSettleBillReceivePay(Long settleId); + + void createBillSettleSchedule(Long settleId,Double settleReceivePay); } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayBillService.java b/mallinkService/src/main/java/com/iformall/service/WxPayBillService.java index b69dbc22c..a2d7e13a4 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayBillService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayBillService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxPayBill; import com.iformall.enums.EnumPayWay; @@ -19,7 +20,7 @@ public interface WxPayBillService { * @param payWay * @return */ - ResultData createPayBill(WxAppinfo appInfo, WxPayBill record, EnumPayWay payWay); + ResultData createPayBill(WxMerchant merchant,Integer billTypeValue,WxAppinfo appInfo, WxPayBill record, EnumPayWay payWay); /** * 微信支付订单查询 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java index 8769ec6bc..ce094998e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -31,6 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -147,6 +149,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Lazy @Autowired WxPayAccountBillService wxPayAccountBillService; + + @Autowired + WxBillSettleScheduleMapper wxBillSettleScheduleMapper; + + @Autowired + WxShopMapper wxShopMapper; + + @Autowired + WxPayBillMapper wxPayBillMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; @Override public Map listAsPage(WxBillAll record, Integer pageIndex, Integer pageSize) { @@ -156,7 +170,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { List typeList = JSONArray.parseArray(record.getTypeStr(), Integer.class); record.setTypeList(typeList); } - PageInfo pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBillAllMapper.list(record)); + PageHelper.startPage(pageIndex, pageSize); + PageInfo pageInfo = new PageInfo<>(list(record)); //手续费 = 合同应收+手续费+滞纳金 pageInfo.getList().stream().forEach(e -> { @@ -168,6 +183,67 @@ public class WxBillAllServiceImpl implements WxBillAllService { result.put("pageInfo", pageInfo); return result; } + + private List list(WxBillAll wxBillAll) { + List retList = null; + wxBillAll.setBillTypeValue(EnumBillQueryType.getRealType(wxBillAll.getBillTypeValue())); + if (!StringUtils.isBlank(wxBillAll.getMerchantName())) { + WxMerchant wxMerchantQ = new WxMerchant(); + wxMerchantQ.setName(StringUtils.trimToNull(wxBillAll.getMerchantName())); + List mids = wxMerchantMapper.findIdList(wxMerchantQ); + if (null != mids && mids.size() > 0 ) { + wxBillAll.setMerchantIdList(mids); + } + } + if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.RENT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.RENT.getCode()); + retList = wxBillAllMapper.listRentBill(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.RENT_DEPOSIT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.RENT_DEPOSIT.getCode()); + retList = wxBillAllMapper.listRentDepositBill(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.PROPERTY.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.PROPERTY.getCode()); + retList = wxBillAllMapper.listPropertyBill(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.PROPERTY_DEPOSIT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.PROPERTY_DEPOSIT.getCode()); + retList = wxBillAllMapper.listPropertyDepositBill(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.WATER_POWER_AIR.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.WATER_POWER_AIR.getCode()); + retList = wxBillAllMapper.listDailyBill(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.OTHER.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.OTHER.getCode()); + retList = wxBillAllMapper.listOtherBill(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.OTHER_DEPOSIT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.OTHER_DEPOSIT.getCode()); + retList = wxBillAllMapper.listOtherDepositBill(wxBillAll); + } else { + logger.info("账单不存在"); + } + if (null != retList && retList.size() > 0 ){ + for (int i = 0 ; i < retList.size(); i ++) { + WxBillAllVo vo = retList.get(i); + if( null!= vo.getMerchantId() ) { + WxMerchant wxMerchantQ = new WxMerchant(); + wxMerchantQ.setId(vo.getMerchantId()); + List mlist = wxMerchantMapper.findIdNameList(wxMerchantQ); + if (null != mlist && mlist.size() > 0 ) { + vo.setMerchantName(mlist.get(0).getName()); + } + } + if (null != vo.getShopId()) { + Map param = new HashMap(); + param.put("id", vo.getShopId()); + Map shop = wxShopMapper.getMerchantShopByShopId(param); + if ( null != shop) { + vo.setShopNumber((String)shop.get("shopNumber")); + vo.setManager((String)shop.get("manager")); + vo.setManagerPhone((String)shop.get("managerPhone")); + } + } + } + } + return retList; + } public void cmputeTotalMoney(WxPayAccountBill wxPayAccountBill, WxBillAllVo e) { if (e.getReceivePay() != null) { @@ -192,78 +268,102 @@ public class WxBillAllServiceImpl implements WxBillAllService { } } +// @Override +// public List> listBillOweAndWaitPay(WxBillAll wxBillAll) { +// //更新各账单状态 +// //updateBillStatus(wxBillAll); +// ArrayList statusList = new ArrayList<>(); +// statusList.add(EnumBillRentStatus.NOT_PAID.getCode()); +// statusList.add(EnumBillRentStatus.WAIT_PAY.getCode()); +// wxBillAll.setStatusList(statusList); +// return wxBillAllMapper.listData(wxBillAll); +// } + @Override - public List> listBillOweAndWaitPay(WxBillAll wxBillAll) { + public ResultData pageListBill(WxBillAll wxBillAll,WxMerchant wxMerchant,boolean hasShop,boolean hasPayBill,boolean hasReceivePay) { //更新各账单状态 //updateBillStatus(wxBillAll); - ArrayList statusList = new ArrayList<>(); - statusList.add(EnumBillRentStatus.NOT_PAID.getCode()); - statusList.add(EnumBillRentStatus.WAIT_PAY.getCode()); - wxBillAll.setStatusList(statusList); - return wxBillAllMapper.listData(wxBillAll); + PageHelper.startPage(wxBillAll.getPageIndex(), wxBillAll.getPageSize()); + PageInfo> pageInfo = new PageInfo<>(listBill(wxBillAll, wxMerchant,true, hasShop, hasPayBill, hasReceivePay)); + return new ResultData(pageInfo); } - + @Override - public ResultData listBill(WxBillAll wxBillAll) { - //更新各账单状态 - //updateBillStatus(wxBillAll); + public List> listBill(WxBillAll wxBillAll,WxMerchant wxMerchant,boolean hasSet,boolean hasShop,boolean hasPayBill,boolean hasReceivePay){ + List> maps = null; //账单类型 - if (wxBillAll.getBillTypeValue() != null) { - if (wxBillAll.getBillTypeValue().equals(EnumBillType.RENT.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.RENT.getCode()); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.DEPOSIT.getCode())) { - wxBillAll.setBillTypeValue(null); - ArrayList typeList = new ArrayList(); - typeList.add(EnumBillTypeParam.RENT_DEPOSIT.getCode()); - typeList.add(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode()); - typeList.add(EnumBillTypeParam.ATHER_DEPOSIT.getCode()); - wxBillAll.setTypeList(typeList); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.PROPERTY.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.PROPERTY.getCode()); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.WATER.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.WATER.getCode()); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.POWER.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.POWER.getCode()); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.ROUTINE.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.ROUTINE.getCode()); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.AIR_CONDITIONING.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.AIR_CONDITIONING.getCode()); - } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.SETTLE.getCode())) { - wxBillAll.setBillTypeValue(EnumBillTypeParam.SETTLE.getCode()); - } else { - logger.info("账单不存在"); - return new ResultData(ErrorCode.BILL_ROUTINE_IS_NOT_FOUND); - } - } - if (wxBillAll.getPageIndex() != null && wxBillAll.getPageIndex() != null) { - PageHelper.startPage(wxBillAll.getPageIndex(), wxBillAll.getPageSize()); - List> maps = wxBillAllMapper.listData(wxBillAll); - for (Map map : maps) { - Integer billType = ((Long) map.get("billTypeValue")).intValue(); - if (EnumBillType.SETTLE.getCode().equals(billType)) { - Long id = (Long) map.get("id"); - WxBillSettle settle = wxBillSettleService.getById(id, EnumFilterSettle.YES.getCode()); - map.put("owe", settle.getBalance()); - settle = wxBillSettleService.getById(id, EnumFilterSettle.NO.getCode()); - map.put("receivePay", settle.getBalance()); - } - } - PageInfo> pageInfo = new PageInfo<>(maps); - return new ResultData(pageInfo); + wxBillAll.setBillTypeValue(EnumBillQueryType.getRealType(wxBillAll.getBillTypeValue())); + wxBillAll.setMerchantId(wxMerchant.getId()); + if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.RENT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.RENT.getCode()); + maps = wxBillAllMapper.listRentBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.RENT_DEPOSIT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.RENT_DEPOSIT.getCode()); + maps = wxBillAllMapper.listRentDepositBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.PROPERTY.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.PROPERTY.getCode()); + maps = wxBillAllMapper.listPropertyBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.PROPERTY_DEPOSIT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.PROPERTY_DEPOSIT.getCode()); + maps = wxBillAllMapper.listPropertyDepositBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.WATER_POWER_AIR.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.WATER_POWER_AIR.getCode()); + maps = wxBillAllMapper.listDailyBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.OTHER.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.OTHER.getCode()); + maps = wxBillAllMapper.listOtherBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.OTHER_DEPOSIT.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.OTHER_DEPOSIT.getCode()); + maps = wxBillAllMapper.listOtherDepositBillData(wxBillAll); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillQueryType.SETTLE.getCode())) { + wxBillAll.setBillTypeValue(EnumBillQueryType.SETTLE.getCode()); + maps = wxBillAllMapper.listSettleBillData(wxBillAll); + } else { + logger.info("账单不存在"); } - List> maps = wxBillAllMapper.listData(wxBillAll); - for (Map map : maps) { - Integer billType = ((Long) map.get("billTypeValue")).intValue(); - if (EnumBillType.SETTLE.getCode().equals(billType)) { - Long id = (Long) map.get("id"); - WxBillSettle settle = wxBillSettleService.getById(id, EnumFilterSettle.YES.getCode()); - map.put("owe", settle.getBalance()); - settle = wxBillSettleService.getById(id, EnumFilterSettle.NO.getCode()); - map.put("receivePay", settle.getBalance()); - } + if (null != maps && hasSet) { + for (Map map : maps) { + Integer billType = ((Long) map.get("billTypeValue")).intValue(); + if (EnumBillType.SETTLE.getCode().equals(billType)) { + Long id = (Long) map.get("id"); + WxBillSettle settle = wxBillSettleService.getById(id, EnumFilterSettle.YES.getCode()); + map.put("owe", settle.getBalance()); + if (hasReceivePay) { + settle = wxBillSettleService.getById(id, EnumFilterSettle.NO.getCode()); + map.put("receivePay", settle.getBalance()); + } + } + map.put("merchantName", wxMerchant.getName()); + if (hasShop) { + Long shopId = (Long) map.get("shopId"); + if (null != shopId) { + Map param = new HashMap(); + param.put("id", shopId); + Map shopResult = wxShopMapper.getMerchantShopByShopId(param); + if (null != shopResult) { + map.put("shopNumber", shopResult.get("shopNumber")); + } + } + } + if (hasPayBill) { + Long billId = (Long) map.get("id"); + WxPayBill wxPayBill = new WxPayBill(); + wxPayBill.updateTenantInfo(wxMerchant); + wxPayBill.setBillId(billId); + List payBillList = wxPayBillMapper.findList(wxPayBill); + if (null != payBillList && payBillList.size() > 0 ) { + WxPayBill pb = payBillList.get(0); + map.put("payBillStatus", pb.getPayBillStatus()); + map.put("tradeTime", pb.getPayTimeEnd()); + map.put("transactionId", pb.getTransactionId()); + map.put("payAmount", pb.getPayAmount()); + } + } + } } - return new ResultData(maps); + return maps; } + @Override public void updateBill(Map bill) { @@ -357,8 +457,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillAll wxBillAll) { - - Map> collect = wxBillAllMapper.list(wxBillAll) + Map> collect = list(wxBillAll) .stream().filter(b -> null != b.getMerchantId()) .collect(Collectors.groupingBy(WxBillAllVo::getMerchantId)); Set>> entries = collect.entrySet(); @@ -789,7 +888,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { result.put("endtime", " "); } Integer filterHasPay = wxBillAll.getFilterHasPay(); - List list = wxBillAllMapper.list(wxBillAll); + List list = list(wxBillAll); if (!list.isEmpty()) { //租金总额 Long rentSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT.getCode())) @@ -1906,4 +2005,68 @@ public class WxBillAllServiceImpl implements WxBillAllService { }); return wxBillAllVos; } + + @Override + public Double calcuteSettleBillReceivePay(Long settleId) { + List billIds0 = wxBillSettleScheduleMapper.listBillSettleBillBillId(settleId, 0); + Double pay0 = 0D; + if (null != billIds0 && billIds0.size() > 0 ) { + WxBillRent billRent = new WxBillRent(); + billRent.setIds(billIds0); + Double billRent0 = wxBillSettleScheduleMapper.calculteRentRecivePay(billRent);//租金 + Double billRentDeposit0 = wxBillSettleScheduleMapper.calculteRentDepositRecivePay(billRent);//租金押金 + + WxBillProperty billProperty = new WxBillProperty(); + billProperty.setIds(billIds0); + Double billProperty0 = wxBillSettleScheduleMapper.calcultePropertyRecivePay(billProperty);//物业 + Double billPropertyDeposit0 = wxBillSettleScheduleMapper.calcultePropertyDepositRecivePay(billProperty);//物业押金 + + WxBillDaily billDaily = new WxBillDaily(); + billDaily.setIds(billIds0); + Double billDaily0 = wxBillSettleScheduleMapper.calculteDailyRecivePay(billDaily); + + WxBillOther billOther = new WxBillOther(); + billOther.setIds(billIds0); + Double billOther0 = wxBillSettleScheduleMapper.calculteOtherRecivePay0(billOther); + Double billOtherDeposit0 = wxBillSettleScheduleMapper.calculteOtherDepositRecivePay0(billOther); + pay0 = billRent0+billRentDeposit0+billProperty0+billPropertyDeposit0+billDaily0+billOther0+billOtherDeposit0; + } + + List billIds1 = wxBillSettleScheduleMapper.listBillSettleBillBillId(settleId, 1); + Double pay1 = 0D; + if (null != billIds1 && billIds1.size() > 0 ) { + WxBillRent billRent = new WxBillRent(); + billRent.setIds(billIds1); + Double billRent1 = wxBillSettleScheduleMapper.calculteRentRecivePay(billRent);//租金 + Double billRentDeposit1 = wxBillSettleScheduleMapper.calculteRentDepositRecivePay(billRent);//租金押金 + + WxBillProperty billProperty = new WxBillProperty(); + billProperty.setIds(billIds1); + Double billProperty1 = wxBillSettleScheduleMapper.calcultePropertyRecivePay(billProperty);//物业 + Double billPropertyDeposit1 = wxBillSettleScheduleMapper.calcultePropertyDepositRecivePay(billProperty);//物业押金 + + WxBillDaily billDaily = new WxBillDaily(); + billDaily.setIds(billIds1); + Double billDaily1 = wxBillSettleScheduleMapper.calculteDailyRecivePay(billDaily); + + WxBillOther billOther = new WxBillOther(); + billOther.setIds(billIds1); + Double billOther1 = wxBillSettleScheduleMapper.calculteOtherRecivePay1(billOther); + Double billOtherDeposit1 = wxBillSettleScheduleMapper.calculteOtherDepositRecivePay0(billOther); + + WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); + merchantSubsidy.setIds(billIds1); + Double billMerchantSubsidy1 = wxBillSettleScheduleMapper.calculteMerchantSubsidyRecivePay1(merchantSubsidy); + + pay1 = billRent1+billRentDeposit1+billProperty1+billPropertyDeposit1+billDaily1+billOther1+billOtherDeposit1+billMerchantSubsidy1; + } + return pay0-pay1; + } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public void createBillSettleSchedule(Long settleId, Double settleReceivePay) { + wxBillSettleScheduleMapper.createScheduleFromBillSettle(settleId, settleReceivePay); + wxBillSettleMapper.updateRecorded(settleId); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java index 1f97492e2..b66823e59 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java @@ -166,7 +166,7 @@ public class WxBillSettleServiceImpl implements WxBillSettleService { public void updateFreezeOrStatus(List billList,Integer freezeStatus,Integer status){ //1租金2押金3物业4日常费用6其他8补贴 for (WxBillSettleBill bill:billList) { - if(EnumBillType.RENT.getCode().equals(bill.getBillType())) { + if(EnumBillQueryType.RENT.getCode().equals(bill.getBillType())) { WxBillRent wxBillRent = new WxBillRent(); wxBillRent.setId(bill.getBillId()); if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java index d4a3eb984..634e5987d 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java @@ -24,6 +24,7 @@ import com.iformall.utils.RedisLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -48,6 +49,7 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { @Autowired WxOrderMapper wxOrderMapper; + @Lazy @Autowired WxOrderService wxOrderService; @@ -66,6 +68,7 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { @Autowired WxAppinfoMapper wxAppinfoMapper; + @Lazy @Autowired WxRefundOrderService wxRefundOrderService; @@ -279,6 +282,16 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { return new ResultData(Result.SUCCESS, "查询成功", group); } Map result = wxOrderGroupMapper.queryRemainOne(group); + if (null != result) { + Long cUserId = (Long) result.get("cUserId"); + if (null != cUserId) { + WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectById(cUserId, wxOrderGroup.getFinalTenantId()); + if (null != user) { + result.put("nickName", user.getNickName()); + result.put("avatarUrl", user.getAvatarUrl()); + } + } + } return new ResultData(Result.SUCCESS, "查询成功", result); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java index ebbfff2c2..a5303be6a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java @@ -9,6 +9,8 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxBillSettle; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.po.WxPayAccountBill; import com.iformall.domain.po.WxPayBill; import com.iformall.domain.vo.WxBillAll; @@ -18,12 +20,15 @@ import com.iformall.mapper.*; import com.iformall.pay.*; import com.iformall.service.WxBillAllService; import com.iformall.service.WxBillSettleService; +import com.iformall.service.WxMerchantBUserService; +import com.iformall.service.WxMerchantService; import com.iformall.service.WxPayBillService; import com.iformall.utils.*; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -50,14 +55,24 @@ public class WxPayBillServiceImpl implements WxPayBillService { @Autowired WxBillAllMapper wxBillAllMapper; + @Lazy @Autowired WxBillAllService wxBillAllService; @Autowired WxMerchantBUserMapper wxMerchantBUserMapper; + @Lazy @Autowired private WxBillSettleService wxBillSettleService; + + @Lazy + @Autowired + WxMerchantBUserService wxMerchantBUserService; + + @Lazy + @Autowired + WxMerchantService wxMerchantService; JSONObject errorMap = JSON.parseObject("{" + "\"NOAUTH\":{\"detail\":\"商户无此接口权限\",\"reason\":\"商户未开通此接口权限\",\"resolution\":\"请商户前往申请此接口权限\"}," + @@ -89,7 +104,7 @@ public class WxPayBillServiceImpl implements WxPayBillService { "\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}"); @Override - public ResultData createPayBill(WxAppinfo appInfo, WxPayBill record, EnumPayWay payWay) { + public ResultData createPayBill(WxMerchant merchant,Integer billTypeValue,WxAppinfo appInfo, WxPayBill record, EnumPayWay payWay) { final IdWorker idworker = IdWorker.get(); EnumPayShare isShare = EnumPayShare.NO; @@ -98,7 +113,8 @@ public class WxPayBillServiceImpl implements WxPayBillService { WxBillAll wxBillAll = new WxBillAll(); wxBillAll.updateTenantInfo(record); wxBillAll.setId(record.getBillId()); - List> bills = wxBillAllMapper.listData(wxBillAll); + wxBillAll.setBillTypeValue(billTypeValue); + List> bills = wxBillAllService.listBill(wxBillAll,merchant,true,false,false,false); if (bills.size()==0) { logger.error("pay bill, bill not allow, repaymentReq: " + JSONObject.toJSONString(record) + ", payWay: " + payWay.toString()); throw new MallinkException(ErrorCode.BILL_ROUTINE_IS_NOT_FOUND); @@ -106,14 +122,7 @@ public class WxPayBillServiceImpl implements WxPayBillService { //获取账单数据 Map bill = bills.get(0); Long owe = (Long) bill.get("owe"); - Integer billTypeValue = ((Long) bill.get("billTypeValue")).intValue(); - if(EnumBillType.SETTLE.getCode().equals(billTypeValue)){ - WxBillSettle wxBillSettle = wxBillSettleService.getById(record.getBillId(), EnumFilterSettle.YES.getCode()); - owe = wxBillSettle.getBalance(); - bill.put("owe",owe); - logger.info("wxBillSettle.balance:{}",owe); - } if (owe.longValue() <= 0) { logger.info("账单欠缴为0"); return new ResultData(ErrorCode.BILL_OWE_ZERO); @@ -144,7 +153,7 @@ public class WxPayBillServiceImpl implements WxPayBillService { record.setPayVendor(payWay.getCode()); record.setPayBillStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); record.setShare(isShare.getCode()); - + record.setBillTypeValue(billTypeValue); int sqlRow = wxPayBillMapper.insert(record); if (sqlRow != 1) { logger.error("pay bill insert error: " + JSONObject.toJSONString(record)); @@ -711,7 +720,10 @@ public class WxPayBillServiceImpl implements WxPayBillService { wxPayBillMapper.updateById(record); WxBillAll wxBillAll = new WxBillAll(); wxBillAll.setId(record.getBillId()); - List> bills = wxBillAllMapper.listData(wxBillAll); + wxBillAll.setBillTypeValue(record.getBillTypeValue()); + WxMerchantBUser buser = wxMerchantBUserService.getById(record.getbUserId()); + WxMerchant wxMerchant = wxMerchantService.getById(buser.getMerchantId()); + List> bills = wxBillAllService.listBill(wxBillAll, wxMerchant,false, false, false, false); if (bills.size() > 0) { Map bill = bills.get(0); bill.put("userId", record.getbUserId()); @@ -726,7 +738,7 @@ public class WxPayBillServiceImpl implements WxPayBillService { WxBillAll wxBillAll = new WxBillAll(); wxBillAll.setId(record.getBillId()); wxBillAll.updateTenantInfo(record); - List> bills = wxBillAllMapper.listData(wxBillAll); + List> bills = wxBillAllService.listBill(wxBillAll, null,false, false, false, false); if (bills.size()==0) { logger.error("pay success handle, bill " + record.getBillId() + " not found , payBillNo : " + record.getPayBillNo()); throw new MallinkException(ErrorCode.BILL_ROUTINE_IS_NOT_FOUND); @@ -769,7 +781,10 @@ public class WxPayBillServiceImpl implements WxPayBillService { } WxBillAll wxBillAll = new WxBillAll(); wxBillAll.setId(record.getBillId()); - List> bills = wxBillAllMapper.listData(wxBillAll); + wxBillAll.setBillTypeValue(record.getBillTypeValue()); + WxMerchantBUser buser = wxMerchantBUserService.getById(record.getbUserId()); + WxMerchant wxMerchant = wxMerchantService.getById(buser.getMerchantId()); + List> bills = wxBillAllService.listBill(wxBillAll, wxMerchant,false, false, false, false); if (bills.size()==0) { logger.error("pay handle, bill " + record.getBillId() + " not found , payBillNo : " + record.getPayBillNo()); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); diff --git a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml index a794feb14..6727a5138 100644 --- a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml @@ -46,112 +46,8 @@ - - - + select id,merchant_id merchantId,shop_id shopId,tenant_id tenantId,parent_tenant_id parentTenantId,'租金' name,1 billTypeValue,'租金' billType, + need_pay needPay,receive_pay receivePay,pay,owe,receive_date receiveDate,pay_date payDate,expired_day expiredDay,status,starttime, + endtime,rent_shop_type rentShopType, + case when shop_info is null then '[]' else shop_info end shopInfo, + comments,'' price_detail,updatetime,freeze,ifnull(late_pay_price,0) late_pay_price,service_charge_pay + from wx_bill_rent bill + where is_preview = 0 + + + + + + + + + + + + + - - + select '' settle_number,id,merchant_id merchantId,shop_id shopId,tenant_id tenantId,parent_tenant_id parentTenantId,'租金' name,1 billTypeValue,'租金' billType, + need_pay needPay,receive_pay receivePay,pay,(receive_pay+service_charge_pay+ifnull(late_pay_price,0)-pay) owe, + receive_date receiveDate,pay_date payDate,DATEDIFF(now(),receive_date) expiredDay,status,starttime,endtime,rent_shop_type rentShopType,'' priceDetail, + freeze,ifnull(late_pay_price,0) latePayPrice,service_charge_pay serviceChargePay + + from wx_bill_rent bill + where bill.is_preview = 0 + and rent_contract_id in (select id from wx_rent_contract where status in (2,3,4)) + + + + + + + + + + + + + + + - + + update wx_bill_settle set has_recorded = 1 where id = #{id} + diff --git a/mallinkService/src/main/resources/mapper/WxBillSettleScheduleMapper.xml b/mallinkService/src/main/resources/mapper/WxBillSettleScheduleMapper.xml new file mode 100644 index 000000000..aee7748ca --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxBillSettleScheduleMapper.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`,`settle_number`,`merchant_id`,`status`,`apply_status`, + `receive_money`,`pay_money`,`settletime`,`createtime`,`updatetime`,`settle_receive_pay` + + + + insert into wx_bill_settle_schedule(`id`,`tenant_id`,`parent_tenant_id`,`settle_number`,`merchant_id`,`status`,`apply_status`,`receive_money`,`pay_money`,`settletime`,`createtime`, + `updatetime`,`settle_receive_pay`) + select `id`,`tenant_id`,`parent_tenant_id`,`settle_number`,`merchant_id`,`status`,`apply_status`,`receive_money`,`pay_money`,`settletime`,`createtime`,`updatetime`,#{settleReceivePay} + from wx_bill_settle where id = #{id} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml index 139ae351f..6a9015bef 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml @@ -57,11 +57,8 @@ select - s.id,s.build_area buildArea,s.operation_area operationArea,s.shop_number shopNumber + s.id,s.build_area buildArea,s.operation_area operationArea,s.shop_number shopNumber, s.manager, s.manager_phone managerPhone from wx_shop s where s.id = #{id} and s.is_del=0