jialh
1 天以前 dd6687b118561100e1677e88a9c2f5842a54c531
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package com.java110.fee.cmd.fee;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.annotation.Java110Transactional;
import com.java110.core.context.CmdContextUtils;
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.core.smo.IComputeFeeSMO;
import com.java110.dto.account.AccountDto;
import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.user.UserDto;
import com.java110.fee.dao.IPayFeeDetailNewV1ServiceDao;
import com.java110.intf.acct.IAccountInnerServiceSMO;
import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
import com.java110.intf.fee.IPayFeeDetailV1InnerServiceSMO;
import com.java110.intf.user.IUserV1InnerServiceSMO;
import com.java110.po.account.AccountDetailPo;
import com.java110.po.account.AccountPo;
import com.java110.po.fee.PayFeeDetailPo;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import org.springframework.beans.factory.annotation.Autowired;
 
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
 
/**
 * 押金退费
 */
@Java110Cmd(serviceCode = "fee.refundFeeDeposit")
public class RefundFeeDepositCmd extends Cmd {
 
    @Autowired
    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
 
    @Autowired
    private IPayFeeDetailV1InnerServiceSMO payFeeDetailV1InnerServiceSMOImpl;
 
    @Autowired
    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
 
    @Autowired
    private IComputeFeeSMO computeFeeSMOImpl;
 
    @Autowired
    private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
 
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
 
        Assert.hasKeyAndValue(reqJson, "detailId", "未包含缴费ID");
        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID");
 
 
    }
 
    @Override
    @Java110Transactional
    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
 
        String userId = CmdContextUtils.getUserId(context);
 
        UserDto userDto = new UserDto();
        userDto.setUserId(userId);
        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
 
        Assert.listOnlyOne(userDtos, "用户不存在");
 
        FeeDetailDto feeDetailDto = new FeeDetailDto();
        feeDetailDto.setCommunityId(reqJson.getString("communityId"));
        feeDetailDto.setDetailId(reqJson.getString("detailId"));
        feeDetailDto.setFeeId(reqJson.getString("feeId"));
        List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
 
        Assert.listOnlyOne(feeDetailDtos, "不存在该缴费记录");
 
        //todo 根据查询 账户信息
        OwnerDto ownerDto = computeFeeSMOImpl.getFeeOwnerDto(feeDetailDtos.get(0).getFeeId());
        if (ownerDto == null) {
            throw new CmdException("费用未查到业主");
        }
 
 
        AccountDto accountDto = new AccountDto();
        accountDto.setObjId(ownerDto.getMemberId());
        accountDto.setAcctType(AccountDto.ACCT_TYPE_CASH); //2003  现金账户
        List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
 
        if (ListUtil.isNull(accountDtos)) {
            throw new CmdException("账户不存在,请到账户页面预存0元,生成账户");
        }
 
 
        PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
        payFeeDetailPo.setDetailId(reqJson.getString("detailId"));
        payFeeDetailPo.setState(FeeDetailDto.STATE_RETURNED);
 
        int flag = payFeeDetailV1InnerServiceSMOImpl.updatePayFeeDetailNew(payFeeDetailPo);
        if (flag < 1) {
            throw new CmdException("保存数据失败");
        }
 
 
        PayFeeDetailPo refundPayFeeDetailPo = BeanConvertUtil.covertBean(feeDetailDtos.get(0), PayFeeDetailPo.class);
        refundPayFeeDetailPo.setRemark("押金转存");
        refundPayFeeDetailPo.setbId("-1");
        refundPayFeeDetailPo.setState(FeeDetailDto.STATE_RETURN_ORDER);
        refundPayFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId("11"));
        refundPayFeeDetailPo.setCashierId(userDtos.get(0).getUserId());
        refundPayFeeDetailPo.setCashierName(userDtos.get(0).getName());
        refundPayFeeDetailPo.setReceivableAmount(unum(refundPayFeeDetailPo.getReceivableAmount()) + "");
        refundPayFeeDetailPo.setReceivedAmount(unum(refundPayFeeDetailPo.getReceivedAmount()) + "");
        refundPayFeeDetailPo.setLateAmount("0");
        refundPayFeeDetailPo.setDiscountAmount("0");
        refundPayFeeDetailPo.setGiftAmount("0");
        refundPayFeeDetailPo.setDeductionAmount("0");
        refundPayFeeDetailPo.setAcctAmount("0");
        refundPayFeeDetailPo.setCycles(unum(refundPayFeeDetailPo.getCycles()) + "");
        refundPayFeeDetailPo.setPrimeRate(FeeDetailDto.PRIME_REATE_REFUND_ACCT);
        refundPayFeeDetailPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        payFeeDetailV1InnerServiceSMOImpl.savePayFeeDetailNew(refundPayFeeDetailPo);
 
 
        AccountDetailPo accountDetailPo = new AccountDetailPo();
        accountDetailPo.setAcctId(accountDtos.get(0).getAcctId());
        accountDetailPo.setAmount(feeDetailDtos.get(0).getReceivedAmount());
        accountDetailPo.setObjId(accountDtos.get(0).getObjId());
        accountDetailPo.setObjType(accountDtos.get(0).getObjType());
        accountDetailPo.setRemark("押金退款预存账户");
        accountInnerServiceSMOImpl.prestoreAccount(accountDetailPo);
 
 
    }
 
 
    private double unum(String value) {
        double dValue = Double.parseDouble(value);
        return dValue * -1;
    }
}