diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java index baf7617b3..c91bddc35 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; +import com.iformall.domain.dto.FinanceSetOffDTO; import com.iformall.domain.po.WxBillPayWay; import com.iformall.domain.po.WxEnergyFees; import com.iformall.domain.po.WxFinanceAdvance; @@ -207,6 +208,21 @@ public class WxFinanceController extends BaseController { return new ResultData(retMap); } + @ApiOperation("查询冲抵列表") + @GetMapping("setoffList") + public ResultData setoffList(@ModelAttribute FinanceSetOffDTO dto) { + dto.updateTenantInfo(getTenantInfo()); + return new ResultData(wxFinanceService.getSetOffList(dto)); + } + + @ApiOperation("冲抵") + @PostMapping("setoff") + public ResultData setoff(@RequestBody FinanceSetOffDTO dto) { + dto.updateTenantInfo(getTenantInfo()); + wxFinanceService.setOff(dto); + return new ResultData(); + } + @ApiOperation("新增收款单") @PostMapping("createReceive") public ResultData createReceive(@RequestBody WxFinanceAdvanceType record) { diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/FinanceSetOffDTO.java b/mallinkService/src/main/java/com/iformall/domain/dto/FinanceSetOffDTO.java new file mode 100644 index 000000000..ddf55b86c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/dto/FinanceSetOffDTO.java @@ -0,0 +1,15 @@ +package com.iformall.domain.dto; + +import com.iformall.domain.po.base.TenantEntity; + +import lombok.Data; + +/** + */ +@Data +public class FinanceSetOffDTO extends TenantEntity{ + private static final long serialVersionUID = 3024690696283760441L; + private Long billId; + private Integer billType; + private Long financeAdvanceId; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxFinanceAdvance.java b/mallinkService/src/main/java/com/iformall/domain/po/WxFinanceAdvance.java index afdea4b3a..21bac5969 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxFinanceAdvance.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxFinanceAdvance.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import java.util.Date; +import java.util.List; /** */ @@ -38,6 +39,8 @@ public class WxFinanceAdvance extends TenantEntity { private Long advanceTypeId; @TableField(exist = false) private String advanceTypeName; + @TableField(exist = false) + private List advanceTypeIdList; @io.swagger.annotations.ApiModelProperty(value="advanceTypeId",name="advanceTypeId") private Long merchantId; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/base/WxBillBaseEntity.java b/mallinkService/src/main/java/com/iformall/domain/po/base/WxBillBaseEntity.java index c84ec4b2f..c64ba2e04 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/base/WxBillBaseEntity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/base/WxBillBaseEntity.java @@ -90,8 +90,11 @@ public class WxBillBaseEntity extends TenantEntity { public String owe; public String getOwe() { + if (StringUtils.isBlank(setOff)) { + setOff = "0"; + } if (StringUtils.isNotBlank(receivePay) && StringUtils.isNotBlank(pay)) { - return new BigDecimal(receivePay).subtract(new BigDecimal(pay)).toPlainString(); + return new BigDecimal(receivePay).subtract(new BigDecimal(pay)).subtract(new BigDecimal(setOff)).toPlainString(); } return "0"; } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxFinanceAdvanceTypeFeesMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxFinanceAdvanceTypeFeesMapper.java index 0fa2083f0..0eeaa9652 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxFinanceAdvanceTypeFeesMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxFinanceAdvanceTypeFeesMapper.java @@ -13,6 +13,8 @@ public interface WxFinanceAdvanceTypeFeesMapper extends CommonMapper findList(WxFinanceAdvanceTypeFees wxBillRent); List findFeesIdList(WxFinanceAdvanceTypeFees wxBillRent); + + List findadvanceTypeIdList(WxFinanceAdvanceTypeFees wxBillRent); WxFinanceAdvanceTypeFees selectById(@Param("id")Long id,@Param("tenantId")String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java b/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java index 688761a24..91261531b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java @@ -3,6 +3,7 @@ package com.iformall.service; import java.util.List; import java.util.Map; import com.github.pagehelper.PageInfo; +import com.iformall.domain.dto.FinanceSetOffDTO; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillPayWay; import com.iformall.domain.po.WxFinanceAdvance; @@ -34,6 +35,9 @@ public interface WxFinanceService { void saveOrUpdateAdvance(WxFinanceAdvance record,MallUserInfo user); void updateAdvanceIsDel(WxFinanceAdvance record); List getMerchantAdvanceGroupSumList(WxFinanceAdvance record); + List getSetOffList(FinanceSetOffDTO dto); + void setOff(FinanceSetOffDTO dto); + //收款 PageInfo receiveListAsPage(WxFinanceReceive record, Integer pageIndex, Integer pageSize); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java index 779362446..1b914a9fb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java @@ -4,12 +4,16 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; +import com.iformall.domain.dto.FinanceSetOffDTO; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.po.base.WxBillBaseEntity; +import com.iformall.enums.EnumBillAllType; import com.iformall.enums.EnumYesOrNo; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; +import com.iformall.service.helper.WxBillAllHelper; import com.iformall.utils.Constant; import org.slf4j.Logger; @@ -17,6 +21,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; + +import java.math.BigDecimal; import java.util.*; /** @@ -48,6 +54,10 @@ public class WxFinanceServiceImpl implements WxFinanceService { @Lazy @Autowired WxShopService wxShopService; + @Lazy + @Autowired + WxBillAllHelper wxBillAllHelper; + @Override @@ -278,6 +288,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { record.setCreateByName(user.getName()); record.setUpdateBy(user.getId()); record.setUpdateByName(user.getName()); + record.setRemainMoney(record.getMoney()); try { wxFinanceAdvanceMapper.insert(record); } catch (Exception e) { @@ -303,6 +314,67 @@ public class WxFinanceServiceImpl implements WxFinanceService { return wxFinanceAdvanceMapper.getMerchantAdvanceGroupSumList(record); } + private List getAdvanceListByFeesId(TenantEntity tenantEntity,Long feesId) { + WxFinanceAdvanceTypeFees tf = new WxFinanceAdvanceTypeFees(); + tf.updateTenantInfo(tenantEntity); + tf.setFeesId(feesId); + List advanceTypeIdList = wxFinanceAdvanceTypeFeesMapper.findadvanceTypeIdList(tf); + if (null != advanceTypeIdList && advanceTypeIdList.size() > 0 ) { + WxFinanceAdvance faq = new WxFinanceAdvance(); + faq.updateTenantInfo(tenantEntity); + faq.setAdvanceTypeIdList(advanceTypeIdList); + return wxFinanceAdvanceMapper.findList(faq); + }else { + return null; + } + } + + @Override + public List getSetOffList(FinanceSetOffDTO dto) { + //根据账单的科目查询可抵扣的预充值 + WxMerchant merchant = new WxMerchant(); + merchant.updateTenantInfo(dto); + WxBillBaseEntity be = wxBillAllHelper.getBillDetail(EnumBillAllType.getEnum(dto.getBillType()), merchant, dto.getBillId()); + if (null == be) { + return null; + } + //通过科目去查询可以抵扣的预充费用 + List advanceList = getAdvanceListByFeesId(dto, be.getEnergyFeesId()); + + if (null != advanceList && advanceList.size() > 0 ) { + WxFinanceAdvanceType atq = new WxFinanceAdvanceType(); + atq.updateTenantInfo(dto); + Map typeMap = this.getAdvanceTypeMap(atq); + List retList = new ArrayList(); + for (int i = 0 ; i < advanceList.size() ; i ++) { + WxFinanceAdvance a = advanceList.get(i); + Map m = new HashMap(); + m.put("id", a.getId()); + if (null != typeMap) { + WxFinanceAdvanceType fat = typeMap.get(a.getAdvanceTypeId()); + if (null != fat) { + m.put("name", fat.getName()); + m.put("rate", fat.getRate()); + m.put("money", calcuteSetOffMoney(fat.getRate(),be.getOwe())); + } + } + retList.add(m); + } + return retList; + } + return null; + } + + private String calcuteSetOffMoney(String rate,String money) { + return new BigDecimal(money).multiply(new BigDecimal(rate)).divide(new BigDecimal(100)).toPlainString(); + } + + @Override + public void setOff(FinanceSetOffDTO dto) { + //根据预充规则计算冲抵费用 + //设置账单冲抵金额 + //新增收款记录,冲抵,关联冲抵账单 + } @Override public PageInfo receiveListAsPage(WxFinanceReceive record, Integer pageIndex, Integer pageSize) { @@ -314,4 +386,8 @@ public class WxFinanceServiceImpl implements WxFinanceService { + + + + } diff --git a/mallinkService/src/main/resources/mapper/WxFinanceAdvanceMapper.xml b/mallinkService/src/main/resources/mapper/WxFinanceAdvanceMapper.xml index 5b9cb242a..020fcdfe0 100644 --- a/mallinkService/src/main/resources/mapper/WxFinanceAdvanceMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxFinanceAdvanceMapper.xml @@ -38,6 +38,12 @@ and create_by_name like concat('%', #{createByName},'%') and `create_time` >= #{createBegin} and `create_time` <= #{createEnd} + + and advance_type_id in + + #{atidItem} + + and id in diff --git a/mallinkService/src/main/resources/mapper/WxFinanceAdvanceTypeFeesMapper.xml b/mallinkService/src/main/resources/mapper/WxFinanceAdvanceTypeFeesMapper.xml index 811cae43d..9f338c0a3 100644 --- a/mallinkService/src/main/resources/mapper/WxFinanceAdvanceTypeFeesMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxFinanceAdvanceTypeFeesMapper.xml @@ -48,6 +48,12 @@ + +