|  | @ -0,0 +1,218 @@
 | 
	
		
			
				|  |  | package com.yihu.wlyy.web.doctor.express;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.wlyy.aop.ObserverRequired;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.entity.dict.DmExpressagePriceEntity;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.entity.patient.prescription.Prescription;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.entity.patient.prescription.PrescriptionExpressage;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.entity.patient.prescription.PrescriptionExpressageLog;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.entity.patient.prescription.VO.PrescriptionExpressLogVO;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.service.app.express.SFExpressService;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.service.app.prescription.PrescriptionExpressageLogService;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.service.app.prescription.PrescriptionExpressageService;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.service.app.prescription.PrescriptionService;
 | 
	
		
			
				|  |  | import com.yihu.wlyy.web.BaseController;
 | 
	
		
			
				|  |  | import io.swagger.annotations.Api;
 | 
	
		
			
				|  |  | import io.swagger.annotations.ApiOperation;
 | 
	
		
			
				|  |  | import io.swagger.annotations.ApiParam;
 | 
	
		
			
				|  |  | import org.apache.commons.lang.StringUtils;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Controller;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RequestMapping;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RequestMethod;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.RequestParam;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.ResponseBody;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * 医生端顺丰速运相关接口
 | 
	
		
			
				|  |  |  * Created by huangwenjie on 2017/8/16.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | @Controller
 | 
	
		
			
				|  |  | @RequestMapping(value = "/doctor/sfexpress")
 | 
	
		
			
				|  |  | @Api(description = "顺丰速运相关接口")
 | 
	
		
			
				|  |  | public class SFExpressController extends BaseController {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private SFExpressService sfexpressService;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionExpressageService prescriptionExpressageService;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionService prescriptionService;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionExpressageLogService prescriptionExpressageLogService;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/sforderfilterservice", method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     @ApiOperation("查询派送地址是否属于顺丰的派送范围")
 | 
	
		
			
				|  |  |     public String SFOrderFilterService(
 | 
	
		
			
				|  |  |             @ApiParam(name = "d_address", value = "派送地址", defaultValue = "福建省厦门市思明区软件园二期望海路55号")
 | 
	
		
			
				|  |  |             @RequestParam(value = "d_address", required = true) String d_address){
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             boolean result = sfexpressService.getSFOrderFilterService(d_address);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             if(result){
 | 
	
		
			
				|  |  |                 return write(200, "请求成功,地址可派送!");
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 return write(-1, "请求失败,地址不可派送!");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             //日志文件中记录异常信息
 | 
	
		
			
				|  |  |             error(e);
 | 
	
		
			
				|  |  |             //返回接口异常信息处理结果
 | 
	
		
			
				|  |  |             return error(-1, "请求失败,地址不可派送!");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value="/sforderservice",method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     @ApiOperation("向顺丰快递下订单")
 | 
	
		
			
				|  |  |     @ObserverRequired
 | 
	
		
			
				|  |  |     public String SFOrderService(
 | 
	
		
			
				|  |  |             @ApiParam(name="prescriptionCode", value="处方编号") @RequestParam(value = "prescriptionCode",required = true) String prescriptionCode){
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             PrescriptionExpressage sfexpress_obj = prescriptionExpressageService.findByPrescriptionCode(prescriptionCode);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             if(sfexpress_obj == null){
 | 
	
		
			
				|  |  |                 return write(-1, "顺丰快递下单失败,未找到该处方的派送地址!");
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 //如果该处方的快递单号已生成,则说明已经下单成功,不需要重复下单,直接返回成功
 | 
	
		
			
				|  |  |                 if(StringUtils.isNotBlank(sfexpress_obj.getMailno())){
 | 
	
		
			
				|  |  |                     return write(200, "顺丰快递下单成功!");
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                 //如果该处方的快递单号未生成,则继续下单
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //由于下单前已经判断过是否派送,这里不再重复判断----huangwenjie-2017.08.04
 | 
	
		
			
				|  |  |                     //先判断地址是否可派送boolean delivery = sfexpressService.getSFOrderFilterService(sfexpress_obj.getProvinceName()+sfexpress_obj.getCityName()+sfexpress_obj.getTownName()+sfexpress_obj.getAddress());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //根据业务订单号判断是否已经下单成功
 | 
	
		
			
				|  |  |                     boolean go_on = sfexpressService.sfOrderSearchService(sfexpress_obj);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //如果该业务订单号未下单成功过,则重新下单
 | 
	
		
			
				|  |  |                     if(go_on){
 | 
	
		
			
				|  |  |                         //请求顺丰接口下单,成功下单后,返回快递单号
 | 
	
		
			
				|  |  |                         sfexpress_obj = sfexpressService.postSFOrderService(sfexpress_obj);
 | 
	
		
			
				|  |  |                         //保存快递单号和增加处方物流记录为配送
 | 
	
		
			
				|  |  |                         prescriptionExpressageService.updatePrescriptionExpressage(sfexpress_obj);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     return write(200, "顺丰快递下单成功!");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             //日志文件中记录异常信息
 | 
	
		
			
				|  |  |             error(e);
 | 
	
		
			
				|  |  |             //返回接口异常信息处理结果
 | 
	
		
			
				|  |  |             return error(-1, e.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value="/sfrouteservice",method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     @ApiOperation("通过处方编码查询顺丰物流派送记录")
 | 
	
		
			
				|  |  |     @ObserverRequired
 | 
	
		
			
				|  |  |     public String SFRouteService(
 | 
	
		
			
				|  |  |             @ApiParam(name="prescriptionCode", value="处方编号") @RequestParam(value = "prescriptionCode",required = true) String prescriptionCode){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             Prescription prescription = prescriptionService.findByCode(prescriptionCode);
 | 
	
		
			
				|  |  |             List<PrescriptionExpressageLog> sfexpresslogList = prescriptionExpressageLogService.findByPrescriptionCode(prescriptionCode);
 | 
	
		
			
				|  |  |             PrescriptionExpressage sfexpress_obj = prescriptionExpressageService.findByPrescriptionCode(prescriptionCode);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //先判断该处方是否已完成配送,如果配送完成,则直接取本地的物流记录
 | 
	
		
			
				|  |  |             if(100 != prescription.getStatus()){
 | 
	
		
			
				|  |  |                 //如果配送未完成,则调用顺丰接口获取物流路由日志,与本地匹配,进行增量修改
 | 
	
		
			
				|  |  |                 sfexpresslogList = sfexpressService.getRoutInfos(prescription,sfexpress_obj,sfexpresslogList);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return write(200, "查询成功","data",sfexpresslogList);
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             //日志文件中记录异常信息
 | 
	
		
			
				|  |  |             error(e);
 | 
	
		
			
				|  |  |             //返回接口异常信息处理结果
 | 
	
		
			
				|  |  |             return error(-1, "查询失败,"+e.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/getsfexpressprice", method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     @ApiOperation("根据收寄地址获取快递费用")
 | 
	
		
			
				|  |  |     public String SFExpressPrice(
 | 
	
		
			
				|  |  | //            @ApiParam(name = "j_city", value = "寄方地址(城市),默认为厦门", defaultValue = "厦门")
 | 
	
		
			
				|  |  | //            @RequestParam(value = "j_city", required = false) String j_city,
 | 
	
		
			
				|  |  |             @ApiParam(name = "d_province", value = "收方地址(省份)")
 | 
	
		
			
				|  |  |             @RequestParam(value = "d_province", required = false) String d_province,
 | 
	
		
			
				|  |  |             @ApiParam(name = "d_city", value = "收方地址(城市)")
 | 
	
		
			
				|  |  |             @RequestParam(value = "d_city", required = false) String d_city){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             DmExpressagePriceEntity expreprice = sfexpressService.getSFExpressPrice(d_province,d_city);
 | 
	
		
			
				|  |  |             return write(200, "查询成功","data",expreprice);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             //日志文件中记录异常信息
 | 
	
		
			
				|  |  |             error(e);
 | 
	
		
			
				|  |  |             //返回接口异常信息处理结果
 | 
	
		
			
				|  |  |             return error(-1, "查询失败,"+e.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value="/sfordersearchservice",method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     @ApiOperation("通过处方编码查询顺丰快递是否下单成功")
 | 
	
		
			
				|  |  |     public String SFOrderSearchService(
 | 
	
		
			
				|  |  |             @ApiParam(name="prescriptionCode", value="处方编号") @RequestParam(value = "prescriptionCode",required = true) String prescriptionCode){
 | 
	
		
			
				|  |  |         PrescriptionExpressage sfexpress_obj = prescriptionExpressageService.findByPrescriptionCode(prescriptionCode);
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             boolean go_on = sfexpressService.sfOrderSearchServiceJustSearch(sfexpress_obj);
 | 
	
		
			
				|  |  |             return write(200, "查询成功","data",go_on);
 | 
	
		
			
				|  |  |         }catch (Exception e) {
 | 
	
		
			
				|  |  |             //日志文件中记录异常信息
 | 
	
		
			
				|  |  |             error(e);
 | 
	
		
			
				|  |  |             //返回接口异常信息处理结果
 | 
	
		
			
				|  |  |             return error(-1, "查询失败," + e.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value="/sfgetorderinfoservice",method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     @ApiOperation("通过处方编码查询顺丰快递单信息(不包含物流记录)")
 | 
	
		
			
				|  |  |     public String SFGetOrderInfo(
 | 
	
		
			
				|  |  |             @ApiParam(name="prescriptionCode", value="处方编号") @RequestParam(value = "prescriptionCode",required = true) String prescriptionCode){
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             PrescriptionExpressage sfexpress_obj = prescriptionExpressageService.findByPrescriptionCode(prescriptionCode);
 | 
	
		
			
				|  |  |             Prescription prescription = prescriptionService.findByCode(prescriptionCode);
 | 
	
		
			
				|  |  |             PrescriptionExpressLogVO vo = new PrescriptionExpressLogVO();
 | 
	
		
			
				|  |  |             vo.setExpressMailNo(sfexpress_obj.getMailno());
 | 
	
		
			
				|  |  |             vo.setExpressName("顺丰速递");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             if(100 == prescription.getStatus()){
 | 
	
		
			
				|  |  |                 vo.setExpressStatus("已收件");
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 if(StringUtils.isBlank(sfexpress_obj.getMailno())){
 | 
	
		
			
				|  |  |                     vo.setExpressStatus("待发货");
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                     vo.setExpressStatus("运输中");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             vo.setExpressPhone("95338");
 | 
	
		
			
				|  |  |             return write(200, "查询成功","data",vo);
 | 
	
		
			
				|  |  |         }catch (Exception e) {
 | 
	
		
			
				|  |  |             //日志文件中记录异常信息
 | 
	
		
			
				|  |  |             error(e);
 | 
	
		
			
				|  |  |             //返回接口异常信息处理结果
 | 
	
		
			
				|  |  |             return error(-1, "查询失败," + e.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |