Commit ad4aaee9 by yao.xiao

增加-H5商机列表查询

parent 409b2a18
......@@ -5,6 +5,8 @@ import com.yd.api.practitioner.vo.login.PractitionerLoginRequestVO;
import com.yd.api.practitioner.vo.login.PractitionerLoginResponseVO;
import com.yd.api.practitioner.vo.media.MediaGetReqVO;
import com.yd.api.practitioner.vo.media.MediaGetRespVO;
import com.yd.api.practitioner.vo.opportunity.OwnOpportunityQueryRequestVO;
import com.yd.api.practitioner.vo.opportunity.OwnOpportunityQueryResponseVO;
import com.yd.api.practitioner.vo.rank.PractitionerRankRequestVO;
import com.yd.api.practitioner.vo.rank.PractitionerRankResponseVO;
import com.yd.api.practitioner.vo.setting.*;
......@@ -99,4 +101,18 @@ public class PractitionerController {
result.setData(responseVO);
return result;
}
/***
* 经纪人查询自己的商机
* @param requestVO
* @return
*/
@RequestMapping("/ownOpportunityQuery")
public Object ownOpportunityQuery(@RequestBody OwnOpportunityQueryRequestVO requestVO){
JsonResult result = new JsonResult();
OwnOpportunityQueryResponseVO responseVO = practitionerService.ownOpportunityQuery(requestVO);
result.addResult(responseVO);
result.setData(responseVO);
return result;
}
}
......@@ -4,6 +4,8 @@ import com.yd.api.practitioner.vo.login.PractitionerLoginRequestVO;
import com.yd.api.practitioner.vo.login.PractitionerLoginResponseVO;
import com.yd.api.practitioner.vo.media.MediaGetReqVO;
import com.yd.api.practitioner.vo.media.MediaGetRespVO;
import com.yd.api.practitioner.vo.opportunity.OwnOpportunityQueryRequestVO;
import com.yd.api.practitioner.vo.opportunity.OwnOpportunityQueryResponseVO;
import com.yd.api.practitioner.vo.rank.PractitionerRankRequestVO;
import com.yd.api.practitioner.vo.rank.PractitionerRankResponseVO;
import com.yd.api.practitioner.vo.setting.*;
......@@ -53,4 +55,11 @@ public interface PractitionerService {
* @return
*/
MediaGetRespVO mediaGet(MediaGetReqVO requestVO);
/**
* 经纪人查询自己的商机
* @param requestVO
* @return
*/
OwnOpportunityQueryResponseVO ownOpportunityQuery(OwnOpportunityQueryRequestVO requestVO);
}
......@@ -4,6 +4,8 @@ import com.yd.api.practitioner.vo.login.PractitionerLoginRequestVO;
import com.yd.api.practitioner.vo.login.PractitionerLoginResponseVO;
import com.yd.api.practitioner.vo.media.MediaGetReqVO;
import com.yd.api.practitioner.vo.media.MediaGetRespVO;
import com.yd.api.practitioner.vo.opportunity.OwnOpportunityQueryRequestVO;
import com.yd.api.practitioner.vo.opportunity.OwnOpportunityQueryResponseVO;
import com.yd.api.practitioner.vo.rank.AclCustomerFortuneStatistics;
import com.yd.api.practitioner.vo.rank.PractitionerRankRequestVO;
import com.yd.api.practitioner.vo.rank.PractitionerRankResponseVO;
......@@ -11,18 +13,22 @@ import com.yd.api.practitioner.vo.rank.PractitionerInfoForAchievement;
import com.yd.api.practitioner.vo.setting.*;
import com.yd.api.result.CommonResult;
import com.yd.dal.entity.customer.AclCustomerLog;
import com.yd.dal.entity.customer.AclCustomerShare;
import com.yd.dal.entity.customer.AclFileUpload;
import com.yd.dal.entity.customer.CustomerFileUpload;
import com.yd.dal.entity.opportunity.OwnOpportunityInfo;
import com.yd.dal.entity.order.PoOrder;
import com.yd.dal.entity.practitioner.*;
import com.yd.dal.entity.tencent.TenInterfRecord;
import com.yd.dal.service.customer.AclCustomerLogDALService;
import com.yd.dal.service.customer.AclCustomerShareDALService;
import com.yd.dal.service.customer.AclFileUploadDALService;
import com.yd.dal.service.meta.MdCodeDALService;
import com.yd.dal.service.opportunity.OpportunityDALService;
import com.yd.dal.service.order.PoOrderDALService;
import com.yd.dal.service.practitioner.PractitionerDALService;
import com.yd.dal.service.practitioner.PractitionerSubordinateDALService;
import com.yd.dal.service.tencent.TenInterfRecordDALService;
import com.yd.dal.service.transaction.TranLogDALService;
import com.yd.rmi.ali.oss.service.OssService;
import com.yd.rmi.cache.SystemConfigService;
import com.yd.rmi.tencent.wechat.service.WechatService;
import com.yd.rmi.tencent.wechatinterf.pojo.ticket.TicketRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.token.TokenRequest;
......@@ -65,6 +71,10 @@ public class PractitionerServiceImpl implements com.yd.api.practitioner.service.
private OssService ossService;
@Autowired
private WechatService wechatService;
@Autowired
private AclCustomerShareDALService aclCustomerShareDALService;
@Autowired
private PoOrderDALService poOrderDALService;
@Override
public PractitionerLoginResponseVO practitionerLogin(PractitionerLoginRequestVO requestVO) {
......@@ -395,6 +405,45 @@ public class PractitionerServiceImpl implements com.yd.api.practitioner.service.
return mediaGetRespVO;
}
@Autowired
private OpportunityDALService opportunityDALService;
@Override
public OwnOpportunityQueryResponseVO ownOpportunityQuery(OwnOpportunityQueryRequestVO requestVO) {
//查询自己的商机列表
OwnOpportunityQueryResponseVO responseVO = new OwnOpportunityQueryResponseVO();
Long practitionerId = requestVO.getPractitionerId();
//经纪人查询通过自己分享成为自己商机的客户
AclPractitionerInfo practitioner = practitionerDALService.findPractitionerById(practitionerId);
Long customerId = practitioner.getCustomerId();
//查询自己的分享码,仅银盾服务产品
List<AclCustomerShare> aclCustomerShareList = aclCustomerShareDALService.findByCustomerIdAndInsurerId(customerId,888L);
List<String> customerShareCodes = new ArrayList<>();
for ( AclCustomerShare aclCustomerShare:aclCustomerShareList ) {
customerShareCodes.add(aclCustomerShare.getShareCode());
}
//此map存放customerId及订单id
Map<Long,Long> opportunityDateMap = new HashMap<>();
if (!customerShareCodes.isEmpty()){
//通过shareCodeId查询成交的订单
List<PoOrder> poOrderList = poOrderDALService.findByStatusAndShareCodeInGroupByCustomerId(3,customerShareCodes);
//便利order,查询商机客户,及服务订单id
for (PoOrder poOrder:poOrderList) {
if (poOrder.getCustomerId().longValue() == customerId.longValue()){
continue;
}
opportunityDateMap.put(poOrder.getCustomerId(), poOrder.getId());
}
}
List<OwnOpportunityInfo> ownOpportunityInfos = opportunityDALService.ownOpportunityQuery(practitionerId);
for (OwnOpportunityInfo info : ownOpportunityInfos){
info.setOrderId(opportunityDateMap.get(info.getOpportunityId()));
}
responseVO.setOwnOpportunityInfos(ownOpportunityInfos);
responseVO.setCommonResult(new CommonResult(true, ZHBErrorConfig.getErrorInfo("800000")));
return responseVO;
}
private CommonResult paramCheck(SettingSaveRequestVO requestVO) {
//检查入参判断
Long practitionerId = requestVO.getPractitionerId();
......
package com.yd.api.practitioner.vo.opportunity;
import lombok.Data;
@Data
public class OwnOpportunityQueryRequestVO {
private Long practitionerId;//经纪人id
private Long customerId;//经纪人的customerId
}
package com.yd.api.practitioner.vo.opportunity;
import com.yd.api.result.CommonResult;
import com.yd.dal.entity.opportunity.OwnOpportunityInfo;
import lombok.Data;
import java.util.List;
@Data
public class OwnOpportunityQueryResponseVO {
private List<OwnOpportunityInfo> ownOpportunityInfos;
private CommonResult commonResult;
}
package com.yd.dal.entity.customer;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* ag_acl_customer_share
* @author
*/
@Data
public class AclCustomerShare implements Serializable {
/**
* serial id
*/
private Long id;
/**
* 规则层级 1-insurer 2-product 3-plan
*/
private Integer configLevel;
/**
* 产品ID, FK ag_product.id
*/
private Long productId;
/**
* 方案ID
*/
private Long planId;
/**
* 猛哥方案订单ID
*/
private Long orderId;
/**
* 分享码
*/
private String shareCode;
/**
* FK ag_acl_customer.id
*/
private Long customerId;
/**
* assigned account id
*/
private String accountId;
/**
* 目的地类型
*/
private Integer destinationType;
/**
* 目的地ID
*/
private Long destinationId;
/**
* 1. list 2. confirm 3. order 4.non-product
*/
private Integer shareType;
/**
* 1. ios, 2.android 3.windows 4. mac os 5. Linux 6. other
*/
private Integer os;
/**
* 1. wechat 2. wechat friend 3.QQ 4. QZone 5.weibo
*/
private Integer channel;
/**
* entire url of shared link
*/
private String url;
/**
* 参数过多直接存参数的JSON字符串
*/
private String jsonParams;
/**
* 存试算结果的JSON字符串tableRateDetails
*/
private String jsonParamsCoverageInfo;
/**
* 0=No, 1=Yes
*/
private Long isOrder;
/**
* 起保日期
*/
private Date effectiveStartDate;
/**
* 终保日期
*/
private Date effectiveEndDate;
/**
* 成年人数目
*/
private Integer adultCount;
/**
* 未成年人数目
*/
private Integer childCount;
/**
* 老年人数目
*/
private Integer eldCount;
/**
* 天数
*/
private Integer dayCount;
/**
* 创建时间
*/
private Date createdAt;
/**
* 创建人
*/
private Long createdBy;
/**
* 修改时间
*/
private Date updatedAt;
/**
* 修改人
*/
private Long updatedBy;
/**
* 名宿无忧房间数量
*/
private String levelCodeForBuilding;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.dal.entity.opportunity;
import lombok.Data;
@Data
public class OwnOpportunityInfo {
private Long opportunityId;
private Long orderId;
private String name;
private String mobileNo;
private String opportunityFrom;//商机来源
private String opportunityDate;//商机时间
private Long mdDropOptionId;
private Long leadsAssignedId;
}
\ No newline at end of file
package com.yd.dal.entity.order;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
* ag_po_order
* @author
*/
@Data
public class PoOrder implements Serializable {
/**
* serial id
*/
private Long id;
/**
* 规则层级 1-insurer 2-product 3-plan
*/
private Integer configLevel;
/**
* 产品ID, FK ag_product.id
*/
private Long productId;
/**
* 方案ID
*/
private Long planId;
/**
* order#
*/
private String orderNo;
/**
* order datetime 0000-00-00 00:00:00
*/
private Date orderDate;
/**
* order price
*/
private BigDecimal orderPrice;
/**
* 报价单ag_po_quotation.id
*/
private Long quotationId;
/**
* 报价单ag_po_quotation.quote_no
*/
private Long quoteNo;
/**
* ag_product_category.id,id = 3车险
*/
private Long productCategoryId;
/**
* 目的地
*/
private String destination;
/**
* FK ag_md_continent.id
*/
private Long destinationContinentId;
/**
* FK ag_md_region.id
*/
private Long destinationRegionId;
/**
* FK ag_md_country.id
*/
private Long destinationCountryId;
/**
* 起保日期
*/
private Date effectiveStartDate;
/**
* 终保日期
*/
private Date effectiveEndDate;
/**
* 1-365 days
*/
private Integer coverLength;
private Integer coverAdultQty;
private Integer coverUnderageQty;
/**
* 1.Wechat 2.AliPay 3.Bank
*/
private Long paymentMethodId;
/**
* pay url
*/
private String payUrl;
/**
* 统一支付落地页1:H5,2:group
*/
private Integer payFrom;
private String insurerPdfUrl;
/**
* 0=No, 1=Yes
*/
private Integer isMsgSent;
/**
* 0=无车船税, 1=有车船税
*/
private Integer isCarTax;
/**
* 银盾企业增值税缺省为0,小数
*/
private BigDecimal ydValueAddedTax;
/**
* FK ag_product_plan_commission,ag_product_life_plan_commission银盾来佣佣金率
*/
private BigDecimal commissionRate;
/**
* 银盾来佣佣金
*/
private BigDecimal commissionAmount;
/**
* FK ag_product_plan_commission,ag_product_life_plan_commission公告佣金率
*/
private BigDecimal announcementCommissionRate;
/**
* 公告佣金
*/
private BigDecimal announcementCommissionAmount;
/**
* FK ag_acl_channel_referral_rate个人职级佣金率
*/
private BigDecimal gradeCommissionRate;
/**
* 最终个人佣金率 = 银盾来佣率 * (1 + yd_value_added_tax) * 银盾公告佣金率 * 个人职级佣金率
*/
private BigDecimal referralRate;
/**
* 最终个人佣金 = order_price / (1 + yd_value_added_tax) * 银盾来佣率 * 银盾公告佣金率 * 个人职级佣金率
*/
private BigDecimal referralAmount;
/**
* FK ag_order_policy.id
*/
private Long policyId;
private String policyNo;
/**
* 市场活动
*/
private String mktCampaign;
/**
* 市场活动任务
*/
private String mktTask;
/**
* 0=No, 1=Yes
*/
private Integer isConverted;
/**
* 1=open 2=confirm 3=completed 4=cancelled 5=overdue 9=error
*/
private Integer status;
/**
* 1=pending 2=paid 3=received 9=error
*/
private Integer paymentStatus;
/**
* flag
*/
private String flag;
private Long customerId;
/**
* 分享人customer_id
*/
private Long referralCustomerId;
/**
* 分享码
*/
private String shareCode;
private Long insurerId;
/**
* 数据来源
*/
private String dataSource;
/**
* 有无社保(1-有;0-无)
*/
private Integer isSocialInsured;
/**
* 保障计划 1=终身 2=保障至70岁 3=保障至80岁
*/
private Integer coverTerm;
/**
* 缴费期限
*/
private Integer paymentTerm;
/**
* Y=年, M=月, D=日, A=岁
*/
private String paymentTermUnit;
/**
* 缴费间隔; -1-不定期交、0-一次交清、1-月交、3-季交、6-半年交、12-年交
*/
private Integer payInterval;
/**
* ERP系统是否可见 1-可见 2-不可见
*/
private String viewFlag;
/**
* 动态字段A
*/
private String dynamicFieldA;
/**
* 动态字段B
*/
private String dynamicFieldB;
private String dynamicFieldC;
/**
* 动态字段D
*/
private String dynamicFieldD;
/**
* 驾乘险车牌号码
*/
private String plateNo;
/**
* group团单添加订单说明
*/
private String memo;
/**
* 试算参数报文
*/
private String productTableRequestJson;
/**
* 核定座位数
*/
private Integer verifiedSeats;
/**
* 驾乘险车架号
*/
private String frameNo;
/**
* 保障标的物所在省份, FK ag_md_province.id
*/
private Long subjectProvinceId;
/**
* 保障标的物所在城市, FK ag_md_city.id
*/
private Long subjectCityId;
/**
* 保障标的物所在详细地址
*/
private String subjectAddress;
/**
* 民宿房间数
*/
private String roomQty;
/**
* 创建时间
*/
private Date createdAt;
/**
* 创建人
*/
private Long createdBy;
/**
* 修改时间
*/
private Date updatedAt;
/**
* 修改人
*/
private Long updatedBy;
/**
* 营销投放渠道来源 hmsr
*/
private String sourceChannel;
/**
* 营销投放产品名 hmpl
*/
private String sourcePlanName;
/**
* 营销投放推送日期 hmkw
*/
private String sourcePublishdate;
/**
* 营销投放推送文章或其他 hmci
*/
private String sourceArticle;
/**
* 访问IP
*/
private String ipAddress;
/**
* 访问IP所属的地域
*/
private String ipRegion;
/**
* 续保去年的order id
*/
private Long renewOrderId;
/**
* 0=No, 1=Yes 是否已续保完成? 会针对去年订单做异动
*/
private Integer isRenewComplete;
/**
* 是否银盾收保费 0=No, 1=Yes
*/
private Integer isPayToYd;
/**
* 保险费过期未付选择 保险单借款垫缴:Y中止合同:N
*/
private String autoPayFlag;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.dal.mapper.customer;
import com.yd.dal.entity.customer.AclCustomerShare;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface AclCustomerShareMapper {
int deleteByPrimaryKey(Long id);
int insert(AclCustomerShare record);
int insertSelective(AclCustomerShare record);
AclCustomerShare selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(AclCustomerShare record);
int updateByPrimaryKey(AclCustomerShare record);
List<AclCustomerShare> findByCustomerIdAndInsurerId(@Param("customerId") Long customerId,@Param("insurerId") long insurerId);
}
\ No newline at end of file
package com.yd.dal.mapper.opportunity;
import com.yd.dal.entity.opportunity.OwnOpportunityInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface OpportunityMapper {
List<OwnOpportunityInfo> ownOpportunityQuery(@Param("practitionerId") Long practitionerId);
}
package com.yd.dal.mapper.order;
import com.yd.dal.entity.order.PoOrder;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface PoOrderMapper {
int deleteByPrimaryKey(Long id);
int insert(PoOrder record);
int insertSelective(PoOrder record);
PoOrder selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(PoOrder record);
int updateByPrimaryKey(PoOrder record);
List<PoOrder> findByStatusAndShareCodeInGroupByCustomerId(@Param("status") int status, @Param("customerShareCodes") List<String> customerShareCodes);
}
\ No newline at end of file
package com.yd.dal.service.customer;
import com.yd.dal.entity.customer.AclCustomerShare;
import java.util.List;
public interface AclCustomerShareDALService {
List<AclCustomerShare> findByCustomerIdAndInsurerId(Long customerId, long insurerId);
}
package com.yd.dal.service.customer.impl;
import com.yd.dal.entity.customer.AclCustomerShare;
import com.yd.dal.mapper.customer.AclCustomerShareMapper;
import com.yd.dal.service.customer.AclCustomerShareDALService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("aclCustomerShareDALService")
public class AclCustomerShareDALServiceImpl implements AclCustomerShareDALService {
@Resource
private AclCustomerShareMapper aclCustomerShareMapper;
@Override
public List<AclCustomerShare> findByCustomerIdAndInsurerId(Long customerId, long insurerId) {
return aclCustomerShareMapper.findByCustomerIdAndInsurerId(customerId, insurerId);
}
}
package com.yd.dal.service.opportunity.Impl;
import com.yd.dal.entity.opportunity.OwnOpportunityInfo;
import com.yd.dal.mapper.opportunity.OpportunityMapper;
import com.yd.dal.service.opportunity.OpportunityDALService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("opportunityDALService")
public class OpportunityDALServiceImpl implements OpportunityDALService {
@Resource
private OpportunityMapper opportunityMapper;
@Override
public List<OwnOpportunityInfo> ownOpportunityQuery(Long practitionerId) {
return opportunityMapper.ownOpportunityQuery(practitionerId);
}
}
package com.yd.dal.service.opportunity;
import com.yd.dal.entity.opportunity.OwnOpportunityInfo;
import java.util.List;
public interface OpportunityDALService {
List<OwnOpportunityInfo> ownOpportunityQuery(Long practitionerId);
}
package com.yd.dal.service.order.Impl;
import com.yd.dal.entity.order.PoOrder;
import com.yd.dal.mapper.order.PoOrderMapper;
import com.yd.dal.service.order.PoOrderDALService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("poOrderDALService")
public class PoOrderDALServiceImpl implements PoOrderDALService {
@Resource
private PoOrderMapper poOrderMapper;
@Override
public List<PoOrder> findByStatusAndShareCodeInGroupByCustomerId(int status, List<String> customerShareCodes) {
return poOrderMapper.findByStatusAndShareCodeInGroupByCustomerId(status , customerShareCodes);
}
}
package com.yd.dal.service.order;
import com.yd.dal.entity.order.PoOrder;
import java.util.List;
public interface PoOrderDALService {
List<PoOrder> findByStatusAndShareCodeInGroupByCustomerId(int status, List<String> customerShareCodes);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yd.dal.mapper.opportunity.OpportunityMapper">
<resultMap id="opportunityQuery" type="com.yd.dal.entity.opportunity.OwnOpportunityInfo">
<result column="opportunityId" property="opportunityId"/>
<result column="name" property="name"/>
<result column="mobileNo" property="mobileNo" typeHandler="com.yd.util.deshandler.DESTypeHandler"/>
<result column="opportunityFrom" property="opportunityFrom"/>
<result column="opportunityDate" property="opportunityDate"/>
<result column="mdDropOptionId" property="mdDropOptionId"/>
<result column="leadsAssignedId" property="leadsAssignedId"/>
</resultMap>
<select id="ownOpportunityQuery" resultMap="opportunityQuery">
SELECT
a.customer_id opportunityId,
c.NAME name,
c.mobile_no mobileNo,
p.mkt_campaign opportunityFrom,
date_format(a.created_at, '%Y-%m-%d %H:%i:%s') opportunityDate,
if (p.mkt_campaign is null ,'',(SELECT cam.name from ag_md_mk_campaign cam where cam.id = p.mkt_campaign )) mdDropOptionId,
a.id leadsAssignedId
FROM
ag_mkt_leads_assigneds a
LEFT JOIN ag_mkt_leads_pool p ON p.customer_id = a.customer_id
LEFT JOIN ag_acl_customer c ON c.id = a.customer_id
where a.is_active=1
<if test="practitionerId != null">
and a.assigned_practitioner_id = #{practitionerId}
</if>
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment