已有的业务代码codeReview

在看诚保代码的过程中发现一些service的方法有些问题。记录在此:

模型代码

AccountDO增加isCanceled(),isFreezed(),isOpened(),isUnApplied(),isIn(...)方法,太多的地方需要判断这些。

levit应用service代码

AcFreezeService

1. public

 DataList<AcFreezeDO> queryBySearchParam(AcFreezeSearchParam acFreezeSearchParam, int

 pageSize, int

 pageNo);
业务查询,被FreezeDetailAction依赖。
2.  public

 boolean

 hasFinishedAlipayTrade(String

 sellerMemberId);
判断是否有14天内完成的支付宝交易。这个是退出诚保的前置判断,不应该放在冻结服务类。

3.  public

 DataList<AcFreezeDO> findByTradeNo(String

 tradeNo, TradeType tradeType);
提供搞一个查询服务类

4.    public

 DataList<AcFreezeDO> fetchFreezedAndFreezeForeverRecords(String

 memberId, int

 size);
提供一个查询服务类

5.    public

 DataList<AcFreezeDO> findForAutoUnfreeze(int

 pageNo, int

 pageSize, Date nowDate, Long

 lastId);
AutoUnfreezeTradeJob依赖,提供一个查询服务。

6.  public

 DataList<AcFreezeDO> fetchFreezeRecordsByMemberIdAndStatus(String

 memberId, String

[] fundStatus, int

 pageNo,
                                                                      int

 pageSize);
CreditDataService.fetchAcFeezeRecordsByMemberIdAndStatus依赖,提供一个查询服务。


7.  public

 boolean

 isMoneyFreezed(String

 tradeNo, TradeType tradeType, String

 buyerMemberId);

只有GuaranteeCommonService.isValidGuarantee一个方法依赖,是否有必要提供如此灵活的参数?

8. public

 int

 update(AcFreezeDO acFreezeDO);
只是对dao的简单包装。需要重构。

9.   public

 int

 updateAgreedUnfreezeDateAndState(String

 tradeNo, TradeType tradeType, Date newAgreedUnfreezeDate,
                                                AcFreezeState state);
没有地方用到,删。

10. public

 int

 updateAgreedUnfreezeDate(String

 tradeNo, TradeType tradeType, Date date);
只是对dao的简单包装。ContractDelayAction.delayFreezeDatetime依赖,这个Action做的事情太多。

11.   public

 int

 updateAgreedUnfreezeDate(String

 tradeNo, TradeType tradeType, Date date);
只是对dao的简单包装,永久冻结不可能只是这么简单吧。InComplaintNotifyService依赖。

12.  public

 String

 freezeMoneyByContract(ContractDO contractDO, String

 vAccountId, String

 operatorId);
买家确认合同调用此方法。ContractService.confirmContractByBuyer。

13.  public

 Integer

 countFreezeRecordsByMemberIdAndStatus(String

 memberId, String

[] fundStatus);
提供给CreditDataService用于统计,提供一个查询服务。

14.  public

 boolean

 freezeMoneyByOrderHasComplain(Money freezeMoney, String

 tradeNo, TradeType tradeType,
                                                 String

 operatorId);
提供给InComplaintNotifyService使用。

15. public

 void freezeMoneyByOrder(String

 buyerMemberId, String

 sellerMemberId, Long

 orderId, String

 tradeType);
提供给支付宝交易确认收货后冻结保障金。

AccountService

1.   public

 int

 updateOrderId(String

 orderId, Long

 id);
无业务,简单的dao封装,OrderIdServiceImpl依赖
2.   public

 DataList<AccountDO> queryOrderId(Date startTime);
提供查询服务
3.   public

 Long

 insertAccountDO(AccountDO accountDO);
只有单元测试永达,删。
4.  public

 int

 updateAccountDOByConditionOfId(AccountDO account);
提供给InterCreditLifecycleServiceImpl,InterCreditLifecycleServiceImpl的用意不是很清楚。
5. public

 AccountDO queryAccountDOByVid(String

 vid);
应该有服务类提供了,需要阿炳确认。
6. public

 AccountDO getAccountDOByMemberId(String

 memberId);
同上
7. public

 List<AccountDO> queryAccountDOListByMemberIds(String

[] memberIds);
同上
8. public

 List<AccountDO> queryListByMemberIdsAndCreditStatus(List<String

> memberIds, String

 creditStatus);
提供给AutoSyncCleanUpStatusJob,对已经被清退的用户做账户状态检查,提供一个非核心查询。
9.  public

 DataList<AccountDO> queryForAutoExitCredit(Date gmtClaimsRem, Date gmtIpRem, int

 pageSize, Long

 lastId);
提供给AutoExitCreditServiceJob,自动关闭诚信保障。提供一个非核心查询,lastId没有用。
10.  public

 boolean

 isCreditOpened(String

 memberId);
这个阿炳应该新提供了封装。
11.  public

 int

 updateAcountAllowNullProperty(AccountDO accountDO);
依赖很多:
a. CreditNotifyService.claimCompleteNotify 很复杂的一个类。
b. ClaimNotifyByMailService.paymentNotifySeller.发送赔付通知。发送邮件就好好发吧,干嘛来修改account表啊?
c. TpDisableServiceImpl.recover
d. AccountMoneyChange.remoteAccountChange

12. public

 AccountDO find(Long

 accountId);
应该有服务类提供了,需要阿炳确认。
13.   public

 int

 updateShouldDownMoney(AccountDO accountDO);
只是对dao的简单封装。
依赖:CreditAdjustmentProccessService,AccountMoneyChangeImp
14. public

 int

 updateCommonCreditMoney(AccountDO accountDO);
只是对dao的简单封装。依赖:CreditAdjustmentProccessServiceImpl
15. public

 boolean

 checkTimeBeforeExitCreditService(String

 memberId);
退出诚保服务的前置条件,封装成一个规则业务类。
16.  public

 AccountDO findNewestAccount();
简单的dao封装,AutoCheckAccountItemAndMoneyJob的内部实现,直接访问DAO吧。
17.   public

 boolean

 hasClaimOrder(String

 memberId);
简单的dao封装,提供给CRM外部接口。
18.   public

 int

 updateById(AccountDO accountDO, Long

 id);
简单的dao封装,只有SyncVidServiceImpl依赖。

RemindService
贸易通提醒业务service,不用重构

GroupRecruitService
团招募业务service,不用重构

CreditDataService
提供给诚信档案服务使用的业务service,不用重构

ClaimNotifyByMailService(优先级低)
三个方法均被PayForComplaintService依赖,处理赔付的逻辑。职责太多,不只是单纯的发送邮件

CleanUpService
清退Service,比较独立,不用重构

ContractAttachService
提供给ContractService的业务service,不用重构

CreditDataAnalysisService
诚信档案访问量分析业务service,不用重构

SyncVidService

AutoSyncVidJob的业务service,不用重构,但是可以移到daemon里面。
public

 void setUdbPersonService(final

 UDBPersonService udbPersonService);
此注入方法应该可以删掉

TempContractService
非核心业务,重构优先级低,ContractAction太复杂。

TpDisableService
GuaranteeTpDisableObserver的业务service,不用重构,但是可以移到daemon里面。

UploadService
合同上传业务service,不用重构

ContractService

1. public

 ContractDO getContractSafely(long

 id, String

 loginId);
此方法可以删掉,可以在ContractDO提供这个方法。

2. public

 ContractDO getContract(long

 id);
提供一个查询服务类。

3. public

 ContractDO getBuyerContractById(long

 id, String

 buyerMemberId);
此方法可以删掉,可以在ContractDO提供这个方法。
4. public

 ContractDO getSellerContract(ContractDO contractDO, String

 sellerMemberId);
提供一个查询服务类。
5.  public

 DataList<ContractDO> queryContractByKw(QueryParam<ContractParam> queryParam);
提供一个查询服务类。
6.  public

 int

 updateContractBySeller(ContractDO dataObject, String

 loginId);
只有单元测试用到
7. public

 int

 updateContractStatusByBuyer(long

 id, String

 loginId, int

 contractVersion, String

 contractStatus);
只有单元测试用到
8.   public

 int

 extendContractUnfreezeTime(long

 id, int

 day, String

 loginId);
只有单元测试用到
9.  public

 long

 createContractAndSendWW(ContractDO contractDO);
被ContractConfirmAction.confirmTempContract依赖到,业务方法。
10.  public

 long

 createElecContract(ContractDO contractDO, List<GoodsDO> goodsList);
被InitContractAction依赖到,业务方法
11. public

 ContractWithDetailVO getContractDetail(ContractDO contractDO, String

 loginId, boolean

 isBuyer);
业务查询,提供查询业务类.
12. public

 String

 updateContractAndGoods(ContractWithDetailVO contractWithDetailVO, String

 loginId);
业务操作更新合同,不用重构
13. public

 String

 updateContractAndAttach(ContractWithDetailVO contractWithDetailVO, String

 attachUrl, String

 loginId);
业务操作更新合同,不用重构
14. public

 ReceiveAddressDO initContract(String

 buyerId, String

 loginId);
只有单元测试用到
15.   public

 boolean

 confirmContractByBuyer(long

 contractId, String

 buyerMemberId, int

 contractVersion);
买家确认合同业务类,可以把确认合同部分代码抽取到合同服务类。
16.    public

 int

 autoCloseContract(ContractDO contractDO);
只有单元测试用到。
17. public

 int

 updateContract(ContractDO contractDO);
只被 ContractDelayAction.delayFreezeDatetime用到,可以考虑合并或者重构。
18. public

 String

 getBusinessRole(String

 contactNo, String

 memberId);
提供一个查询服务类。
19. public

 boolean

 isContractNoValid(String

 contractNo);
提供一个查询服务类。
20. public

 boolean

 isHasGuarantee(String

 contractNo);
只有单元测试用到。
21.  public

 boolean

 updateComplaintStatus(ContractDO contract);
只是简单的dao封装,InterContractServiceImpl依赖,可以直接访问dao.
22.  public

 String

 getContractSellerId(String

 contractNo);
只有单元测试用到。
23.  public

 int

 closeContractByContractNoArray(String

[] contractNoArray);
业务方法。
24. public

 int

 closeContractByContractNoList(List<String

> contractNoList);
被任务AutoUnfreezeTradeJob依赖,可以移到任务。
25.   public

 int

 closeContractByContractNo(String

 contractNo);
被PayForComplaintServiceImpl依赖。
26.  public

 ContractDO getContractByNO(String

 contractNo);
提供一个查询服务类。
27. public

 GoodsDO getPreGoods(long

 offerId);
只有单元测试用到
28.    public

 ExternalMiddleOfferModel getOffer(long

 offerId);
被ContractUtil依赖,用于页面显示。
29. public

 ContractDO getInitContract(String

 sellerMemberId, String

 buyerMemberId);
被InitContractAction依赖,用于页面显示。
30.   public

 boolean

 closeContract(ContractDO contractDO, String

 buyerMemberId);
可以抽取到合同核心服务。
31.  boolean

 updateVersion(long

 contractId, int

 version);
只是对dao的简单封装,直接使用dao
32.  public

 Map<String

, Integer

> getValidContract(String

[] memberList);
只有单元测试用到。
33. public

 int

 updateGoodsIdById(long

 tempContractId, long

 contractId);
只是简单的dao封装,无业务。
34.  public

 List<GoodsDO> getGoodsListByContractId(long

 contractId);
提供一个查询服务类。最好ContractDO里面可以包含List<GoodsDO>。
35. public

 boolean

 createAttachContract(ContractDO contractDO, String

 attachURL);
提供一个附件业务service.
36.  public

 String

 congfigExpireDate();
这个是一个util方法。
37.   public

 boolean

 hasNotClosedContract(String

 memberId);
提供给CRM的接口实现。
38. public

 int

 sendWWAfterDestoryContract(ContractDO contractDO, String

 memberType);
业务方法,取消合同发送旺旺消息。

CreditStatusService

这个类直接废弃掉吧,阿炳应该有封装。

AcLogService(credit也有同样的service)

1. public

 void insertAcLogDO(AcLogDO acLogDO);
只有addAcLog用到,但是addAcLog只被test用到。
2. public

 boolean

 addAcLog(String

 memberId, Money overallBalance, int

 actionType);
addAcLog只被test用到。

AcSyncService(credit也有同样的service)

1.  public

 DataList<AcSyncDO> queryAcSyncDOListByConditions(AcSyncDO acSyncDO);
只被CreditNotifyServiceImpl依赖 *CreditNotifyServiceImpl是提供给CRM的接口*
2. public

 Long

 insertAcSync(AcSyncDO acSyncDO);
只是简单的对dao的封装,被BaseAcFreezeService.saveAcSync依赖,可以直接使用acSyncDAO.create

3.   public

 int

 updateClaimsStatusByGuid(AcSyncDO acSyncDO);
只是简单的对dao的封装,被CreditNotifyServiceImpl依赖,可以直接使用acSyncDAO.updateClaimsStatusByGuid

4.    public

 AcSyncDO findAcSyncById(String

 vid, String

 guid);
TransferMoneyAction依赖到,提供一个查询服务,注释是错误的!guid不是主键!

5.   public

 AcSyncDO findNewestSyncTradeInfo();
AutoCheckAccountItemAndMoneyJob的内部实现,直接访问dao吧。

PayForComplaintService

InterCreditLifecycleService(优先级低)

close方法有一些解冻的逻辑。

credit应用service代码

AcFreezeService

1. public

 DataList<AcFreezeDO> queryAcFreezeByKW(Map<String

, Object

> map);
重构成一个find服务类。
2.  public

 AcFreezeDO find(Long

 id);
重构成一个find服务类。
3. public

 int

 updateAgreedUnfreezeDate(String

 tradeNo, TradeType tradeType, Date date);
直接放在合同服务类。合同才会延长冻结时间。
4.  public

 int

 updateAgreedUnfreezeDate(List<String

> tradeNoList, TradeType tradeType, Date date);
重载方法,删。
5. public

 int

 updateBatchByTradeNo(Map<String

, Object

> map);
重载方法,删。
6.  public

 int

 updateStateToUnFreeze(String

 tradeNo, TradeType tradeType);
没有用到,删。
7.   public

 int

 updateStateToUnFreeze(List<String

> tradeNoList, TradeType tradeType);
没有用到,删。
8.  public

 int

 updateState(List<String

> tradeNoList, TradeType tradeType, AcFreezeState state);
没有用到,删。
9.   public

 int

 updateForAutoUnfreeze(List<String

> idList);
没有用到,删。
10. public

 boolean

 unFreezeMoney(List<AcFreezeDO> acFreezeDoList, String

 operatorId)
可以删掉,直接调用AcUnfreezeService.unfreezeMoney()
11.  public

 DataList<AcFreezeDO> findRepeatAcfreeze();
这个应该可以用formbuilder实现吧。

AcLogService

1.  public

 void insertAcLogDO(AcLogDO acLogDO);
不必要暴漏出来的代码,删。
2. public

 boolean

 addAcLog(String

 memberId, Money overallBalance, int

 actionType);
只被单元测试用到,删。

AcPayService

1.  public

 DataList<AcPayDO> queryAcPayBySellMemberId(String

 memberId);
提供一个赔付查询类。

AcSyncService

1.  public

 DataList<AcSyncDO> queryAcSyncDOListByConditions(AcSyncDO acSyncDO);
只被单元测试用到,删。
2.  public

 Long

 insertAcSync(AcSyncDO acSyncDO);
被CreditAdjustmentProccessService和BuildClaimOrderAction依赖。感觉有点问题,不应该在Action直接调用资金同步,应该是资金变化会触发资金同步吧。搞个资金变化服务类?

AliCreditService,BatOpService

后台批量授信不用改了,自成体系。

BlackListService

batchOperation方法职责不清楚,拆成add,remove两个方法要好些。不过外部关联不大,重构优先级低

ContractAttachService

public

 String

 getAttachFullPathById(long

 id);
类名不好,重构优先级低

CreditAdjustmentProccessService

public

 boolean

 processAdjustment(CreditAdjustmentDO creditAdjustmentDO);
只被任务用到,职责还不是很明白,和索赔订单有对应关系吗?

ContractService

1.   public

 int

 update(ContractDO contractDO);
只是简单的DAO封装,可以把ContractDelayAction.delayFreezeDatetime的部分拿过来。

2. ContractDO find(Long

 id);
提供成一个合同的查询服务。

3. DataList<GoodsDO> queryGoodsRecordsByContractId(Long

 contractId);
提供成一个合同的查询服务。

4. public

 ContractDO getContractByNO(String

 contractNo);
提供成一个合同的查询服务。

5. public

 boolean

 closeContract(ContractDO contractDO,  String

 operatorId);
和levit的关闭合同一样,可以合并成一个合同服务。

CreditAdjustmentService(授信记录)

1.   public

 AdjustEndTimeReslutVO adjustEndDate(AdjustEndTimeVO adjustEndTimeVO);
调整授信有效期,非核心业务,creditOperationAction.adjustTime方法依赖。

2.  public

 Integer

 invalidCreditById(Long

 id);
设置授信无效,只是对dao的封装,CreditAdjustmentProccessService.processAdjustment依赖,回收授信。

3.   public

 Integer

 invalidCreditByMemberId(String

 memberId);
只被单元测试用到,删。

4.   public

 Long

 createAdjustment(CreditAdjustmentDO creditAdjustmentDO);
创建授信记录,CommonCreditAdjustOperator依赖。这个方法和核心的CreditAndAdjustService有啥关系?
这种破事儿不因该CreditAndAdjustService.create做吗?需要阿炳确认。
5.  public

 List<CreditAdjustmentDO> fetchCreditAdjustmentsByCondition(CreditAdjustmentParam params);
提供一个查询服务。

DrIncomeCreditService
业务会调整,没有递延的概念。暂不处理。

GuaranteeInfoService
提供给CRM工单返回信息接口。不知道还有其他没有给外部提供服务?可以整合在一起。

JoinCreditService

public

 CreditResultVO batJoinCredit(CreditAndAdjVO creditAndAdjVO);
没啥问题,类名和方法名还不够简单,类名不是主谓词。优先级低。

OracleMemberService

没太看的明白用意,需要阿炳确认。

猜你喜欢

转载自san-yun.iteye.com/blog/1056767