package com.java110.acct.cmd.account;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.java110.acct.bmo.account.IOwnerPrestoreAccountBMO;
|
import com.java110.core.annotation.Java110Cmd;
|
import com.java110.core.context.ICmdDataFlowContext;
|
import com.java110.core.event.cmd.Cmd;
|
import com.java110.core.event.cmd.CmdEvent;
|
import com.java110.core.factory.GenerateCodeFactory;
|
import com.java110.dto.account.AccountDetailDto;
|
import com.java110.dto.account.AccountDto;
|
import com.java110.dto.owner.OwnerDto;
|
import com.java110.dto.room.RoomDto;
|
import com.java110.intf.acct.IAccountDetailInnerServiceSMO;
|
import com.java110.intf.acct.IAccountInnerServiceSMO;
|
import com.java110.intf.community.IRoomInnerServiceSMO;
|
import com.java110.intf.fee.IAccountReceiptV1InnerServiceSMO;
|
import com.java110.intf.user.IOwnerInnerServiceSMO;
|
import com.java110.po.account.AccountDetailPo;
|
import com.java110.po.account.AccountPo;
|
import com.java110.po.account.AccountReceiptPo;
|
import com.java110.utils.exception.CmdException;
|
import com.java110.utils.util.Assert;
|
import com.java110.utils.util.BeanConvertUtil;
|
import com.java110.utils.util.ListUtil;
|
import com.java110.utils.util.StringUtil;
|
import com.java110.vo.ResultVo;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.ResponseEntity;
|
|
import java.text.ParseException;
|
import java.util.List;
|
|
/**
|
* 业主预存
|
*/
|
@Java110Cmd(serviceCode = "account.ownerPrestoreAccount")
|
public class OwnerPrestoreAccountCmd extends Cmd {
|
|
@Autowired
|
private IOwnerPrestoreAccountBMO ownerPrestoreAccountBMOImpl;
|
|
@Autowired
|
private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
|
|
@Autowired
|
private IAccountDetailInnerServiceSMO accountDetailInnerServiceSMOImpl;
|
|
@Autowired
|
private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
|
|
@Autowired
|
private IAccountReceiptV1InnerServiceSMO accountReceiptV1InnerServiceSMOImpl;
|
|
@Autowired
|
private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
|
|
@Override
|
public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
|
Assert.hasKeyAndValue(reqJson, "communityId", "小区ID不能为空");
|
Assert.hasKeyAndValue(reqJson, "ownerId", "业主不能为空");
|
Assert.hasKeyAndValue(reqJson, "amount", "金额不能为空");
|
Assert.hasKeyAndValue(reqJson, "acctType", "账户类型不能为空");
|
Assert.hasKeyAndValue(reqJson, "primeRate", "未包含支付方式");
|
String acctType = reqJson.getString("acctType");
|
if (AccountDto.ACCT_TYPE_PROPERTY_FEE.equals(acctType) || AccountDto.ACCT_TYPE_METER.equals(acctType)) {
|
Assert.hasKeyAndValue(reqJson, "roomId", "未包含扣款房屋");
|
}
|
|
}
|
|
@Override
|
public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
|
AccountDetailPo accountDetailPo = new AccountDetailPo();
|
accountDetailPo.setRemark(reqJson.getString("remark"));
|
accountDetailPo.setObjId(reqJson.getString("ownerId"));
|
accountDetailPo.setAmount(reqJson.getString("amount"));
|
|
|
//查询 业主是否有账户
|
AccountDto accountDto = new AccountDto();
|
accountDto.setObjId(accountDetailPo.getObjId());
|
accountDto.setObjType(AccountDto.OBJ_TYPE_PERSON);
|
accountDto.setPartId(reqJson.getString("communityId"));
|
accountDto.setAcctType(reqJson.getString("acctType"));
|
List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
|
if (ListUtil.isNull(accountDtos)) {
|
accountDto = addAccountDto(reqJson);
|
//保存交易明细
|
AccountDetailPo accountDetail = BeanConvertUtil.covertBean(accountDetailPo, AccountDetailPo.class);
|
accountDetail.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
|
accountDetail.setAcctId(accountDto.getAcctId());
|
accountDetail.setObjType(AccountDetailDto.ORDER_TYPE_USER);
|
accountDetail.setDetailType(AccountDetailDto.DETAIL_TYPE_IN);
|
if (StringUtil.isEmpty(accountDetail.getDetailId())) {
|
accountDetail.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
|
}
|
if (StringUtil.isEmpty(accountDetail.getRelAcctId())) {
|
accountDetail.setRelAcctId("-1");
|
}
|
accountDetailInnerServiceSMOImpl.saveAccountDetails(accountDetail);
|
} else {
|
accountDto = accountDtos.get(0);
|
accountDetailPo.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
|
accountDetailPo.setAcctId(accountDto.getAcctId());
|
accountDetailPo.setObjType(AccountDetailDto.ORDER_TYPE_USER);
|
int flag = accountInnerServiceSMOImpl.prestoreAccount(accountDetailPo);
|
if (flag < 1) {
|
throw new CmdException("预存失败");
|
}
|
}
|
// todo 记录账户收款单
|
OwnerDto ownerDto = new OwnerDto();
|
ownerDto.setMemberId(reqJson.getString("ownerId"));
|
ownerDto.setCommunityId(reqJson.getString("communityId"));
|
List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
|
Assert.listOnlyOne(ownerDtos, "业主不存在");
|
|
AccountReceiptPo accountReceiptPo = new AccountReceiptPo();
|
accountReceiptPo.setOwnerId(reqJson.getString("ownerId"));
|
accountReceiptPo.setOwnerName(ownerDtos.get(0).getName());
|
accountReceiptPo.setLink(ownerDtos.get(0).getLink());
|
accountReceiptPo.setArId(GenerateCodeFactory.getGeneratorId("11"));
|
accountReceiptPo.setAcctId(accountDto.getAcctId());
|
accountReceiptPo.setPrimeRate(reqJson.getString("primeRate"));
|
accountReceiptPo.setReceivableAmount(reqJson.getString("amount"));
|
accountReceiptPo.setReceivedAmount(reqJson.getString("amount"));
|
accountReceiptPo.setRemark(reqJson.getString("remark"));
|
accountReceiptPo.setCommunityId(reqJson.getString("communityId"));
|
accountReceiptV1InnerServiceSMOImpl.saveAccountReceipt(accountReceiptPo);
|
|
context.setResponseEntity(ResultVo.success());
|
}
|
|
/**
|
* 添加账户
|
* @param reqJson
|
* @return
|
*/
|
private AccountDto addAccountDto(JSONObject reqJson) {
|
|
RoomDto roomDto = new RoomDto();
|
roomDto.setRoomId(reqJson.getString("roomId"));
|
List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
|
Assert.listOnlyOne(roomDtos,"房屋不存在");
|
|
OwnerDto ownerDto = new OwnerDto();
|
ownerDto.setMemberId(reqJson.getString("ownerId"));
|
ownerDto.setCommunityId(reqJson.getString("communityId"));
|
List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
|
Assert.listOnlyOne(ownerDtos, "业主不存在");
|
|
AccountPo accountPo = new AccountPo();
|
accountPo.setAmount(reqJson.getString("amount"));
|
accountPo.setAcctId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_acctId));
|
accountPo.setObjId(reqJson.getString("ownerId"));
|
accountPo.setObjType(AccountDto.OBJ_TYPE_PERSON);
|
accountPo.setAcctType(reqJson.getString("acctType"));
|
accountPo.setAcctName(ownerDtos.get(0).getName());
|
accountPo.setPartId(reqJson.getString("communityId"));
|
accountPo.setLink(ownerDtos.get(0).getLink());
|
accountPo.setRoomId(roomDtos.get(0).getRoomId());
|
accountPo.setRoomName(roomDtos.get(0).getRoomName());
|
accountInnerServiceSMOImpl.saveAccount(accountPo);
|
return BeanConvertUtil.covertBean(accountPo, AccountDto.class);
|
}
|
|
}
|