hz-zhhq-app-service/greenH5modul/.svn/pristine/d1/d13c68347407b38db3875cf9b01...

307 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.nationalelectric.greenH5;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
import javax.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jysoft.unipush.AliasManage;
import com.nationalelectirc.Constant.Constant;
import com.nationalelectirc.utils.RestResult;
import com.nationalelectric.greenH5.DTO.GreenFoodOrderDetailDTO;
import com.nationalelectric.greenH5.DTO.GreenFoodOrderListDTO;
import com.nationalelectric.greenH5.bizc.IGreenFoodOrderDetailBizc;
import com.nationalelectric.greenH5.bizc.IGreenOperateLogBizc;
import com.nationalelectric.greenH5.enums.OrderStatus;
import com.nationalelectric.greenH5.enums.PayStatus;
import com.nationalelectric.greenH5.enums.TakeStatus;
import com.nationalelectric.greenH5.po.GreenDiningRoom;
import com.nationalelectric.greenH5.po.GreenFoodOrderDetail;
import com.nationalelectric.greenH5.po.GreenFoodOrderList;
import com.nationalelectric.greenH5.po.GreenUserInfo;
import com.nationalelectric.greenH5.utils.DateTime;
import com.nationalelectric.greenH5.utils.DateUtil;
import com.sgcc.uap.persistence.IHibernateDao;
import com.sgcc.uap.service.validator.ServiceValidatorBaseException;
/**
* <b>概述</b><br>
* <p>
* <b>功能</b><br>
*
* @author chenweikang
*/
@Controller
@RequestMapping("/greenFoodOrderList")
public class GreenFoodOrderListController extends GreenBaseController {
@Resource
private IHibernateDao hibernateDao;
/**
* greenfoodorderdetail GreenFoodOrderDetail逻辑构件
*/
@Resource
private IGreenFoodOrderDetailBizc greenfoodorderdetailBizc;
@Resource
private IGreenOperateLogBizc greenOperateLogBizc;
@Resource
private AliasManageController aliasManageController;
private ReentrantLock lock = new ReentrantLock();
/**提交订单*/
@SuppressWarnings("deprecation")
@RequestMapping(value="/submitOrder", method = RequestMethod.POST)
@Transactional(rollbackFor=Exception.class)
@ResponseBody
public RestResult submit(@RequestBody GreenFoodOrderListDTO greenfoodorderlists){
try {
lock.lock();
String userId = greenfoodorderlists.getUserId();
GreenUserInfo info = getUserInfo(userId);
if(info==null){
return new RestResult(Constant.FAILED, "非法用户");
}
int week = DateUtil.getWeek(new Date());
if(week==4||week==6||week==7){
return new RestResult(Constant.FAILED,"今日不可预定!");
}
//一次查询 详情中的菜品
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("(");
//String stringId = null;
for (GreenFoodOrderDetailDTO orderDetail : greenfoodorderlists.getOrderDetails()) {
String goodsId = String.valueOf(orderDetail.getGoodsId());
stringBuilder.append(goodsId + ",");
}
String substring = null;
if (stringBuilder != null) {
substring = stringBuilder.substring(0, stringBuilder.length()-1) +")";
}
String sql = "select * from GREEN_FOODS_KINDS where id in " + substring;
List<Map<String,Object>> list1 = hibernateDao.queryForListWithSql(sql);
//加锁 防止扣负
Long diningRoomId = greenfoodorderlists.getDiningRoomId();
List<Map<String,Object>> menuList = null;
//计算价钱
String Id = null;
BigDecimal scale = BigDecimal.ZERO;
BigDecimal totalMoney = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_UP);
BigDecimal subNum = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_UP);
for (int i = 0; i < greenfoodorderlists.getOrderDetails().size(); i++) {
for (int j = 0; j < list1.size(); j++) {
Id = list1.get(j).get("id").toString();
String goodsId = String.valueOf(greenfoodorderlists.getOrderDetails().get(i).getGoodsId());
if (Id.equals(goodsId)) {
String num = greenfoodorderlists.getOrderDetails().get(i).getGoodsNum();
String price = list1.get(j).get("price").toString();
BigDecimal numDecimal = new BigDecimal(num);
BigDecimal priceDecimal = new BigDecimal(price);
scale = numDecimal.multiply(priceDecimal).setScale(2,BigDecimal.ROUND_UP);
totalMoney = totalMoney.add(scale);
String sqlStr = "SELECT a.quota qt,a.*"
+ " FROM GREEN_FOODS_VARIETY a left join GREEN_FOODS_KINDS b on a.kinds_id = b.id"
+ " where a.is_deleted = 'N' and a.location_id = ? and kinds_id = ?"
+ " and a.upload_date = to_char(sysdate,'yyyy-mm-dd') ";
menuList = hibernateDao.queryForListWithSql(sqlStr,new Object[]{diningRoomId, Long.valueOf(goodsId)});
// String quotaString = greenfoodorderlists.getOrderDetails().get(i).getQuota();
String quotaString = null;
if(menuList.size()>0){
quotaString = menuList.get(0).get("qt").toString();
}else {
quotaString = "10";
}
Integer quotaInteger = Integer.valueOf(quotaString);
if (quotaInteger > 0) {
String quotaSql = "SELECT d.id as \"id\",d.order_id as \"order_id\",d.goods_id as \"goods_id\",d.goods_num as \"goods_num\",d.creator as \"creator\","
+ "d.modifier as \"modifier\",d.gmt_created as \"gmt_created\",d.gmt_modified as \"gmt_modified\",d.is_deleted as \"is_deleted\","
+ "l.user_id as \"user_id\""
+ " FROM GREEN_FOOD_ORDER_DETAIL d LEFT JOIN GREEN_FOOD_ORDER_LIST l on l.id = d.order_id"
+ " WHERE l.user_id = ? AND l.dining_room_id = ? AND l.order_status = 1"
+ " AND d.GOODS_ID = ?"
+ " AND to_char(d.gmt_created,'yyyy-mm') = to_char(sysdate,'yyyy-mm') ";
List<Map<String,Object>> quotaList = hibernateDao.queryForListWithSql(quotaSql,new Object[]{userId, diningRoomId, Long.valueOf(goodsId)} );
int quotaInt = 0;
if (!quotaList.isEmpty()) {
for (Map<String, Object> map : quotaList) {
Integer goodsNum = Integer.valueOf(String.valueOf(map.get("goods_num")));
quotaInt = quotaInt + goodsNum;
}
}
if (Integer.valueOf(num) + quotaInt > quotaInteger) {
return new RestResult(Constant.FAILED,"已超出今日菜品限购数量!");
}
}
if (menuList != null && !menuList.isEmpty()) {
Integer noBuyNum = Integer.parseInt(menuList.get(0).get("no_buy_num").toString()) ;
if (noBuyNum != null) {
BigDecimal noBuyNumDecimal = new BigDecimal(noBuyNum);
if(numDecimal.intValue()>noBuyNumDecimal.intValue()){
return new RestResult(Constant.FAILED,"订购数量超剩余数量!");
}
subNum = noBuyNumDecimal.subtract(numDecimal);
hibernateDao.updateWithSql("update GREEN_FOODS_VARIETY set no_buy_num = ? where is_deleted = 'N' and id = ?",new Object[]{ subNum,menuList.get(0).get("id")});
}
}
}
}
}
greenfoodorderlists.setPayPrice( String.valueOf(totalMoney));
greenfoodorderlists.setOrderTime(DateUtil.now());
greenfoodorderlists.setPayStatus(PayStatus.PAY_STATUS_SUCCESS.getName());
greenfoodorderlists.setTakeStatus(TakeStatus.TAKE_STATUS_CANCEL.getName());
greenfoodorderlists.setOrderStatus(OrderStatus.ORDER_STATUS_SUCCESS.getName());
greenfoodorderlists.setBuyerName(info.getRealName());
greenfoodorderlists.setBuyerPhone(info.getMobile());
//int week = DateUtil.getWeek(new Date());
String takeDay = "";
if(week==1){
takeDay = DateUtil.addDays(4, new Date()).toString("yyyy-MM-dd");
}else if(week==2){
takeDay = DateUtil.addDays(3, new Date()).toString("yyyy-MM-dd");
}else if(week==3){
takeDay = DateUtil.addDays(2, new Date()).toString("yyyy-MM-dd");
}
// else if(week==4){
// takeDay = DateUtil.addDays(6, new Date()).toString("yyyy-MM-dd");
// }else if(week==5){
// takeDay = DateUtil.addDays(5, new Date()).toString("yyyy-MM-dd");
// }else if(week==6){
// takeDay = DateUtil.addDays(4, new Date()).toString("yyyy-MM-dd");
// }else if(week==7){
// takeDay = DateUtil.addDays(3, new Date()).toString("yyyy-MM-dd");
// }
StringBuffer sb = new StringBuffer();
//查询订单
sb.append("select * from ( select to_char(DATE_NAME,'yyyy-mm-dd') as \"date_name\" from green_calendar"
+ " where to_char(DATE_NAME,'yyyy-mm-dd')>=? and isholiday='1' and IS_DELETE='N' order by DATE_NAME )where rownum<=30 ");
List<Map<String,Object>> calList = hibernateDao.queryForListWithSql(sb.toString()
,new Object[]{ takeDay});
boolean b = false;
do{
for(int i=0;i<calList.size();i++){
String date_name = (String) calList.get(i).get("date_name");
if(date_name.equals(takeDay)){
DateTime dt = new DateTime(takeDay,"yyyy-MM-dd");
Integer week2 = dt.getDayOfWeek();
if(week2==3){
dt = dt.addDays(2);
}else if(week2==5){
dt = dt.addDays(5);
}
takeDay = dt.toString("yyyy-MM-dd");
b=true;
}else{
b=false;
}
}
}while(b);
greenfoodorderlists.setTakeFoodTime(takeDay);
GreenFoodOrderList greenFoodOrderList = new GreenFoodOrderList();
BeanUtils.copyProperties(greenfoodorderlists, greenFoodOrderList);
greenFoodOrderList.setPayPrice(String.valueOf(totalMoney));
hibernateDao.saveObject(greenFoodOrderList);
//ArrayList<GreenFoodOrderDetail> list = new ArrayList<GreenFoodOrderDetail>();
for (GreenFoodOrderDetailDTO greenFoodOrderDetail : greenFoodOrderList.getOrderDetails()) {
if(greenFoodOrderList.getId() != null){
greenFoodOrderDetail.setOrderId(greenFoodOrderList.getId());
GreenFoodOrderDetail greenFoodOrderDetail2 = new GreenFoodOrderDetail();
BeanUtils.copyProperties(greenFoodOrderDetail, greenFoodOrderDetail2);
//list.add(greenFoodOrderDetail);
greenfoodorderdetailBizc.add(greenFoodOrderDetail2);
}
}
HashMap<String, java.lang.Object> data = new HashMap<String,Object>();
data.put("orderId", greenfoodorderlists.getId());
String title = "外卖预订";
String text = "您好,您已成功预订外卖,取货地点:"+greenFoodOrderList.getTakeFoodPlace()+",预计取货日期:"+greenFoodOrderList.getTakeFoodTime()+",请注意查看。";
String url = "/pages/take-out2/take-out3?currentTabIndex=1";
aliasManageController.pushToSingle(greenFoodOrderList.getUserId(), title, text, url);
String role = "14002";//外卖受理权限
String getUserSql = "SELECT u.id,u.ISC_ID FROM green_user_info u "
+ " LEFT JOIN green_user_role_rel r ON u.id = r.user_id "
+ " LEFT JOIN green_role_permission p ON p.role_id = r.role_id "
+ " WHERE p.permission_id = ? ";
List<Map<String,Object>> userList2 = hibernateDao.queryForListWithSql(getUserSql, new Object[]{role});
title = "外卖受理";
text = "您好,您有新的外卖订单,请注意查看。";
url = "/pages/today-order/today-order";
aliasManageController.pushToSingleBatch(userList2, title, text, url);
//greenOperateLogBizc.addLog(Constant.TAKE_OUT_FOOD, Constant.SUBMIT, Constant.OPERATE_SUCCESS, "提交外卖订单", Constant.LOG_OPERATE, greenfoodorderlists.getUserId());
return new RestResult(Constant.SUCCESS,"成功",data);
}catch (ServiceValidatorBaseException e) {
throw e;
}catch (Exception e) {
e.printStackTrace();
//greenOperateLogBizc.addLog(Constant.TAKE_OUT_FOOD, Constant.SUBMIT, Constant.OPERATE_FAIL, "提交外卖订单", Constant.LOG_ERROR, greenfoodorderlists.getUserId());
//设置手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return new RestResult(Constant.FAILED,"返回异常");
}finally {
if (lock.isLocked()) {
lock.unlock();
}
}
}
}