| | |
| | | import com.stylefeng.guns.modular.system.dao.OrderCancelMapper; |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.*; |
| | | import com.stylefeng.guns.modular.system.util.HttpRequestUtil; |
| | | import com.stylefeng.guns.modular.system.util.PushURL; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | | import com.stylefeng.guns.modular.system.util.*; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | /** |
| | |
| | | |
| | | @Autowired |
| | | private ITPubTransactionDetailsService itPubTransactionDetailsService; |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | /** |
| | | * 操作跨城改派管理 |
| | | * optType 1=拒绝 2=取消 |
| | | */ |
| | | @RequestMapping(value = "/optCross") |
| | | @ResponseBody |
| | | public Object optCross(@RequestParam Integer tReassignId,@RequestParam Integer optType) { |
| | | try { |
| | | TReassign tReassign = tReassignService.selectById(tReassignId); |
| | | if(tReassign.getState() == 3){//已改派 |
| | | return "不能重复操作"; |
| | | } |
| | | if(tReassign.getState() == 4){//已改派 |
| | | return "不能重复操作"; |
| | | } |
| | | if(tReassign.getState() == 5){//已改派 |
| | | return "不能重复操作"; |
| | | } |
| | | Integer state = tReassign.getState(); |
| | | ShiroUser user = ShiroKit.getUser(); |
| | | if (1 == optType){ |
| | | tReassign.setState(5); |
| | | tReassign.setReviewer(user.getId()); |
| | | tReassign.setReviewerType(2); |
| | | tReassignService.updateById(tReassign); |
| | | TOrderCrossCity orderCrossCity = itOrderCrossCityService.selectById(tReassign.getOrderId()); |
| | | orderCrossCity.setState(orderCrossCity.getOldState()); |
| | | itOrderCrossCityService.updateById(orderCrossCity); |
| | | }else if (2 == optType){ |
| | | tReassign.setState(4); |
| | | tReassign.setReviewer(user.getId()); |
| | | tReassign.setReviewerType(2); |
| | | tReassignService.updateById(tReassign); |
| | | |
| | | TOrderCrossCity orderCrossCity = itOrderCrossCityService.selectById(tReassign.getOrderId()); |
| | | if(orderCrossCity.getState() > 5 && orderCrossCity.getState() != 11){ |
| | | return ResultUtil.error("订单状态不在可取消范围内"); |
| | | } |
| | | orderCrossCity.setState(10); |
| | | itOrderCrossCityService.updateById(orderCrossCity); |
| | | |
| | | //修改司机信息 |
| | | LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); |
| | | lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ? |
| | | lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); |
| | | String seat = ""; |
| | | String[] split = orderCrossCity.getSeatNumber().split(","); |
| | | for(String s : split){ |
| | | seat += s + ","; |
| | | } |
| | | seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1); |
| | | |
| | | //总和大于总座位数的情况 |
| | | if(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){ |
| | | seat = ""; |
| | | for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){ |
| | | seat += i + ","; |
| | | } |
| | | seat = seat.substring(0, seat.length() - 1); |
| | | } |
| | | lineShiftDriver.setLaveSeatNumber(seat); |
| | | lineShiftDriverMapper.updateById(lineShiftDriver); |
| | | if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){ |
| | | TDriver driver = itDriverService.selectById(tReassign.getOriginalDriverId()); |
| | | driver.setState(2); |
| | | itDriverService.updateById(driver); |
| | | } |
| | | |
| | | //调用推送 |
| | | Map<String,String> map = new HashMap<>(); |
| | | map.put("id", orderCrossCity.getId().toString()); |
| | | map.put("orderType", "3"); |
| | | String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map); |
| | | System.out.println("跨城取消:【orderId="+orderCrossCity.getId().toString()+"】,调用接口:"+result); |
| | | |
| | | |
| | | //已支付的情况下进行退款操作 |
| | | if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){ |
| | | if(orderCrossCity.getPayType() == 3){//余额支付 |
| | | TUser tUser = userService.selectById(orderCrossCity.getUserId()); |
| | | tUser.setBalance(tUser.getBalance().add(orderCrossCity.getPayMoney())); |
| | | userService.updateById(tUser); |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城改派取消退款", orderCrossCity.getPayMoney().doubleValue(), 1, 1, 1, 3, tReassign.getOrderId()); |
| | | }else{ |
| | | PaymentRecord query = paymentRecordService.query(1, null, null, tReassign.getOrderId(), 3, null, 2).get(0); |
| | | if(null == query){ |
| | | return ResultUtil.error("订单还未进行支付"); |
| | | } |
| | | |
| | | if(query.getPayType() == 1){//微信 |
| | | Map<String, String> map1 = payMoneyUtil.wxRefund(query.getCode(), orderCrossCity.getId() + "_3_" + UUIDUtil.getRandomCode(3), query.getAmount().toString(), query.getAmount().toString(), "/user/base/cancleOrderWXPay"); |
| | | if(!"SUCCESS".equals(map1.get("return_code"))){ |
| | | return ResultUtil.error(map1.get("return_msg")); |
| | | } |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(query.getUserId(), "跨城改派取消退款", query.getAmount(), 1, 1, query.getType(), 3, orderCrossCity.getId()); |
| | | }else{//支付宝 |
| | | // Map<String, String> map1 = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString()); |
| | | // if(!"10000".equals(map1.get("code"))){ |
| | | // return ResultUtil.error(map1.get("msg")); |
| | | // } |
| | | // //添加交易明细 |
| | | // transactionDetailsService.saveData(query.getUserId(), "跨城改派取消退款", query.getAmount(), 1, 1, query.getType(), 3, orderCrossCity.getId()); |
| | | } |
| | | } |
| | | |
| | | //添加负的收入明细 |
| | | List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", tReassign.getOrderId()).eq("orderType", 3)); |
| | | for(Income income : incomes){ |
| | | if(income.getUserType() == 2){//处理司机的收入 |
| | | TDriver driver = itDriverService.selectById(income.getObjectId()); |
| | | driver.setBalance(driver.getBalance().subtract(new BigDecimal(income.getMoney()))); |
| | | driver.setLaveBusinessMoney(new BigDecimal(driver.getLaveBusinessMoney()).subtract(new BigDecimal(income.getMoney())).doubleValue()); |
| | | itDriverService.updateById(driver); |
| | | } |
| | | Income income1 = new Income(); |
| | | BeanUtils.copyProperties(income, income1); |
| | | income1.setMoney(income.getMoney() * -1); |
| | | income1.setId(null); |
| | | income1.setInsertTime(new Date()); |
| | | incomeService.insert(income1); |
| | | } |
| | | } |
| | | |
| | | //添加取消记录 |
| | | OrderCancel orderCancel = new OrderCancel(); |
| | | orderCancel.setOrderId(tReassign.getOrderId()); |
| | | orderCancel.setOrderType(tReassign.getOrderType()); |
| | | orderCancel.setReason("调度端取消订单"); |
| | | orderCancel.setRemark("调度“" + user.getName() + "-" + user.getId() + "”执行取消操作"); |
| | | orderCancel.setState(2); |
| | | orderCancel.setInsertTime(new Date()); |
| | | orderCancel.setUserType(3); |
| | | orderCancel.setUserId(user.getId()); |
| | | orderCancelMapper.insert(orderCancel); |
| | | } |
| | | |
| | | if(state == 2){//退款操作 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | String out_refund_no = sdf.format(new Date()) + "_" + tReassign.getId(); |
| | | Double money = tReassign.getMoney(); |
| | | if(tReassign.getPayType() == 1){//微信 |
| | | Map<String, String> map = payMoneyUtil.wxRefund(tReassign.getPayOrder(), out_refund_no, money.toString(), money.toString(), "/dispatch/base/order/reassignRefundCallback"); |
| | | if(null == map || !"SUCCESS".equals(map.get("return_code"))){ |
| | | System.err.println(map.get("return_msg")); |
| | | return ResultUtil.error(map.get("return_msg")); |
| | | } |
| | | tReassign.setReviewer(ShiroKit.getUser().getId()); |
| | | tReassign.setReviewerType(2); |
| | | tReassignService.updateById(tReassign); |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(tReassign.getOriginalDriverId(), "跨城改派拒绝退款", money, 1, 1, 2, 3, tReassign.getOrderId()); |
| | | } |
| | | if(tReassign.getPayType() == 2){//支付宝 |
| | | // Map<String, String> map = payMoneyUtil.aliRefund(tReassign.getPayOrder(), money.toString()); |
| | | // if(null != map && "10000".equals(map.get("code"))){ |
| | | // tReassign.setReviewer(ShiroKit.getUser().getId()); |
| | | // tReassign.setReviewerType(2); |
| | | // tReassignService.updateById(tReassign); |
| | | // //添加交易明细 |
| | | // transactionDetailsService.saveData(tReassign.getOriginalDriverId(), "跨城改派拒绝退款", money, 1, 1, 2, 3, tReassign.getOrderId()); |
| | | // } |
| | | // if(null == map || !"10000".equals(map.get("code"))){ |
| | | // System.err.println(map.get("msg")); |
| | | // return ResultUtil.error(map.get("msg")); |
| | | // } |
| | | } |
| | | if(tReassign.getPayType() == 3){//余额 |
| | | TDriver tDriver = itDriverService.selectById(tReassign.getOriginalDriverId()); |
| | | tDriver.setBalance(tDriver.getBalance().add(new BigDecimal(money))); |
| | | itDriverService.updateById(tDriver); |
| | | } |
| | | } |
| | | |
| | | |
| | | //增加交易明细 |
| | | TPubTransactionDetails details = new TPubTransactionDetails(); |
| | | details.setUserId(tReassign.getOriginalDriverId()); |
| | | details.setInsertTime(new Date()); |
| | | details.setRemark("【跨城改派】:改派失败或订单取消"); |
| | | details.setMoney(new BigDecimal(tReassign.getMoney())); |
| | | details.setState(1); |
| | | details.setType(1); |
| | | details.setUserType(2); |
| | | details.setOrderType(3); |
| | | details.setOrderId(tReassign.getOrderId()); |
| | | itPubTransactionDetailsService.insert(details); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | |
| | | |