QyzxBusinessController.java 16.5 KB
Newer Older
1
/**  
2 3 4 5 6 7
 * <p>Title: QyzxBusinessController.java</p>  
 * <p>Description: </p>  
 * @author dsc  
 * @date 2020年4月22日  
 * @version 1.0  
 */
8 9
package cn.timer.api.controller.qyzx;

10
import java.util.ArrayList;
11
import java.util.Date;
12
import java.util.HashMap;
13
import java.util.List;
14
import java.util.Map;
15
import java.util.stream.Collectors;
16

邓实川 committed
17
import org.springframework.transaction.annotation.Transactional;
18
import org.springframework.web.bind.annotation.GetMapping;
邓实川 committed
19
import org.springframework.web.bind.annotation.PathVariable;
20 21 22
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
23
import org.springframework.web.bind.annotation.RequestParam;
24 25 26
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
27 28
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
29
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
30
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
31 32
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
33

34 35
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
邓实川 committed
36
import cn.hutool.core.util.ObjectUtil;
37 38
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
39
import cn.timer.api.bean.dzht.DzhtSignflowFinish;
40
import cn.timer.api.bean.qyzx.QyzxEntInfoM;
邓实川 committed
41
import cn.timer.api.bean.qyzx.QyzxSms;
42
import cn.timer.api.bean.qyzx.businessService.QyzxBuyRecord;
43
import cn.timer.api.bean.qyzx.businessService.QyzxInvoiceData;
44 45 46
import cn.timer.api.bean.qyzx.businessService.QyzxOrderRecord;
import cn.timer.api.bean.qyzx.businessService.QyzxPayContent;
import cn.timer.api.bean.qyzx.businessService.QyzxRemainingQuantity;
47
import cn.timer.api.bean.qyzx.businessService.QyzxUseRecord;
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.utils.Result;
import cn.timer.api.utils.ResultUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * <p>
 * Title: QyzxBusinessController.java
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author dsc
 * @date 2020年4月22日
 * @version 1.0
 */
67
@Transactional
68 69 70 71 72 73
@RestController
@Api(tags = "4.1企业中心(购买服务)")
@RequestMapping(value = "/qyzxbs", produces = { "application/json" })
public class QyzxBusinessController {

	@GetMapping(value = "/getAllQuantity")
74
	@ApiOperation(value = "获取全部套餐余量信息", httpMethod = "GET", notes = "接口发布说明")
邓实川 committed
75
	public Result<List<QyzxRemainingQuantity>> getAllQuantity(@CurrentUser UserBean userBean) {
76 77 78 79 80 81 82
		List<QyzxRemainingQuantity> list = QyzxRemainingQuantity.builder().build()
				.selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getIsDelete, 0)
						.eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode()));
		return ResultUtil.data(list, "查询成功");
	}

	@GetMapping(value = "/getQuantity")
83
	@ApiOperation(value = "获取套餐余量信息(数量)", httpMethod = "GET", notes = "接口发布说明")
84
	public Result<List<Map<String, Integer>>> getQuantity(@CurrentUser UserBean userBean) {
85
		List<QyzxRemainingQuantity> qyzxRemainingQuantitys1 = QyzxRemainingQuantity.builder().build()
86 87
				.selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getIsDelete, 0)
						.eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode())
88
						.eq(QyzxRemainingQuantity::getPmid, 1).select(QyzxRemainingQuantity::getRemainder));
89 90 91
		Integer sum1 = qyzxRemainingQuantitys1.stream()
				.collect(Collectors.summingInt(QyzxRemainingQuantity::getRemainder));

92 93 94 95
		List<QyzxRemainingQuantity> qyzxRemainingQuantitys2 = QyzxRemainingQuantity.builder().build()
				.selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getIsDelete, 0)
						.eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode())
						.eq(QyzxRemainingQuantity::getPmid, 2).select(QyzxRemainingQuantity::getRemainder));
96 97
		Integer sum2 = qyzxRemainingQuantitys2.stream()
				.collect(Collectors.summingInt(QyzxRemainingQuantity::getRemainder));
98

99
		Map<String, Integer> map1 = new HashMap<String, Integer>();
100
		map1.put("message", sum1);
101

102
		Map<String, Integer> map2 = new HashMap<String, Integer>();
103
		map2.put("contract", sum2);
104

105 106 107 108 109 110 111 112 113 114 115 116
		List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>();
		list.add(map1);
		list.add(map2);
		return ResultUtil.data(list, "获取成功");
	}

	@GetMapping(value = "/getQuantity/System")
	@ApiOperation(value = "获取系统剩余天数、版本", httpMethod = "GET", notes = "接口发布说明")
	public Result<Object> getSystemQuantity(@CurrentUser UserBean userBean) {
		QyzxEntInfoM qyzxEntInfoM = QyzxEntInfoM.builder().build()
				.selectOne(new LambdaQueryWrapper<QyzxEntInfoM>().eq(QyzxEntInfoM::getId, userBean.getOrgCode()));
		Date endTime = qyzxEntInfoM.getEndTime();
邓实川 committed
117
		Long day = DateUtil.between(new Date(), endTime, DateUnit.DAY, false);
118 119 120 121 122 123 124 125
		Integer level = qyzxEntInfoM.getLevel();

		Map<String, Object> map1 = new HashMap<String, Object>();
		map1.put("betweenDay", day);

		Map<String, Object> map2 = new HashMap<String, Object>();
		map2.put("level", level);

126 127 128 129
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		list.add(map1);
		list.add(map2);
		return ResultUtil.data(list, "获取成功");
130

131 132 133 134
	}

	@GetMapping(value = "/getPayList/Contract")
	@ApiOperation(value = "获取短信商品列表", httpMethod = "GET", notes = "接口发布说明")
135
	public Result<List<QyzxPayContent>> getPayListwithContract(@CurrentUser UserBean userBean) {
136
		List<QyzxPayContent> list = QyzxPayContent.builder().build()
137
				.selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 1).select(
138 139 140
						QyzxPayContent::getId, QyzxPayContent::getContent, QyzxPayContent::getNowPrice,
						QyzxPayContent::getOriginalPrice, QyzxPayContent::getSpecification,
						QyzxPayContent::getExpiration));
141 142 143 144 145
		return ResultUtil.data(list, "获取成功");
	}

	@GetMapping(value = "/getPayList/Msg")
	@ApiOperation(value = "获取电子合同商品列表", httpMethod = "GET", notes = "接口发布说明")
146
	public Result<List<QyzxPayContent>> getPayListWithMsg(@CurrentUser UserBean userBean) {
147
		List<QyzxPayContent> list = QyzxPayContent.builder().build()
148
				.selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 2).select(
149 150 151
						QyzxPayContent::getId, QyzxPayContent::getContent, QyzxPayContent::getNowPrice,
						QyzxPayContent::getOriginalPrice, QyzxPayContent::getSpecification,
						QyzxPayContent::getExpiration));
152 153 154 155 156
		return ResultUtil.data(list, "获取成功");
	}

	@GetMapping(value = "/getPayList/System")
	@ApiOperation(value = "获取系统续费商品列表", httpMethod = "GET", notes = "接口发布说明")
邓实川 committed
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
	public Result<Map<String, Object>> getPayListWithSystem(@CurrentUser UserBean userBean) {
		List<QyzxPayContent> list1 = QyzxPayContent.builder().build()
				.selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 3)
						.eq(QyzxPayContent::getSpecification, 1).select(QyzxPayContent::getId,
								QyzxPayContent::getNowPrice, QyzxPayContent::getOriginalPrice,
								QyzxPayContent::getExpiration));
		List<QyzxPayContent> list2 = QyzxPayContent.builder().build()
				.selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 3)
						.eq(QyzxPayContent::getSpecification, 2).select(QyzxPayContent::getId,
								QyzxPayContent::getNowPrice, QyzxPayContent::getOriginalPrice,
								QyzxPayContent::getExpiration));

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("simple", list1);
		map.put("professional", list2);
		return ResultUtil.data(map, "获取成功");
173 174 175 176
	}

	@PostMapping(value = "/generateOrder")
	@ApiOperation(value = "生成购买订单", httpMethod = "POST", notes = "接口发布说明")
177 178
	public Result<QyzxOrderRecord> generateOrder(@CurrentUser UserBean userBean,
			@RequestBody QyzxOrderRecord qyzxOrderRecord) {
179 180 181 182 183 184
		Integer orgCode = userBean.getOrgCode();
		String orderNo = String.valueOf(System.currentTimeMillis()) + orgCode; // 时间毫秒数+orgCode

		qyzxOrderRecord.setCreateUser(userBean.getEmpNum()); // 创建人
		qyzxOrderRecord.setOrgCode(orgCode);
		qyzxOrderRecord.setOrderNo(orderNo); // 订单号
185
		qyzxOrderRecord.setOrderStatus(0); // 订单状态-无
186

187
		Integer pmid = qyzxOrderRecord.getPmid(); // 商品id
188 189
		Integer pcid = qyzxOrderRecord.getPcid(); // 商品id
		QyzxPayContent qyzxPayContent = QyzxPayContent.builder().build();
190 191
		QyzxPayContent qyzxPayContent2 = qyzxPayContent.selectOne(Wrappers.lambdaQuery(qyzxPayContent)
				.eq(QyzxPayContent::getId, pcid).eq(QyzxPayContent::getPmid, pmid).select(QyzxPayContent::getContent,
192 193
						QyzxPayContent::getSpecification, QyzxPayContent::getUnit, QyzxPayContent::getExpiration,
						QyzxPayContent::getOriginalPrice, QyzxPayContent::getNowPrice));
194 195 196
		if (qyzxPayContent2 == null) {
			return ResultUtil.error("商品不存在");
		}
197 198 199 200 201
		JSONObject json = JSONUtil.parseObj(qyzxPayContent2);
		qyzxOrderRecord.setOrderDetail(json.toString()); // 订单商品详情-json字符串
		qyzxOrderRecord.insert();

		// 请求第三方接口生成预支付交易,返回二维码链接code_url TODO
202

203 204 205 206 207 208
		// 生成二维码 TODO

		return ResultUtil.data(qyzxOrderRecord, "生成订单成功");

	}

209
	@GetMapping(value = "/queryBuyRecord")
210 211 212 213
	@ApiOperation(value = "查询购买记录", httpMethod = "GET", notes = "接口发布说明")
	public Result<List<QyzxBuyRecord>> queryBuyRecord(@CurrentUser UserBean userBean,
			@RequestParam(defaultValue = "1", required = false) Integer pageNum,
			@RequestParam(defaultValue = "10", required = false) Integer pageSize,
214 215
			@RequestParam(required = false) String query, @RequestParam(required = false) String s,
			@RequestParam(required = false) String e) {
216
		QueryWrapper<QyzxBuyRecord> queryWrapper = new QueryWrapper<>();
217
		queryWrapper.eq("org_code", userBean.getOrgCode()).and(query != null && query != "",
218
				wq -> wq.like("order_no", query).or().like("content", query));
219 220 221

		queryWrapper.lambda().ge(StringUtils.isNotBlank(s), QyzxBuyRecord::getCreateTime, s)
				.le(StringUtils.isNotBlank(e), QyzxBuyRecord::getCreateTime, e);
222 223
		Page<Object> page = PageHelper.startPage(pageNum, pageSize);
		List<QyzxBuyRecord> list = QyzxBuyRecord.builder().build().selectList(queryWrapper);
224
		return ResultUtil.pageData(list, page.getTotal(), "查询成功");
225 226 227 228 229 230
	}

	@PostMapping(value = "/invoicing")
	@ApiOperation(value = "开发票", httpMethod = "POST", notes = "接口发布说明")
	public Result<QyzxInvoiceData> generateOrder(@CurrentUser UserBean userBean,
			@RequestBody QyzxInvoiceData qyzxInvoiceData) {
邓实川 committed
231 232 233 234 235

		Double invoiceValue = qyzxInvoiceData.getInvoiceValue();
		if (invoiceValue <= 0)
			return ResultUtil.error("请填写正确的发票金额!");

邓实川 committed
236 237
		if (!ObjectUtil.isAllNotEmpty(
//				qyzxInvoiceData, 
邓实川 committed
238 239 240
				qyzxInvoiceData.getInvoiceTitle(), qyzxInvoiceData.getDutyParagraph(),
				qyzxInvoiceData.getCompanyAddress(), qyzxInvoiceData.getCompanyPhone(), qyzxInvoiceData.getBankName(),
				qyzxInvoiceData.getBankAccount(), qyzxInvoiceData.getInvoiceType(), qyzxInvoiceData.getInvoiceProject(),
邓实川 committed
241
				invoiceValue, qyzxInvoiceData.getConsignee(), qyzxInvoiceData.getConsigneePhone(),
邓实川 committed
242 243 244 245 246
				qyzxInvoiceData.getEmail(), qyzxInvoiceData.getShippingArea(), qyzxInvoiceData.getShippingAddress(),
				qyzxInvoiceData.getZipCode())) {
			return ResultUtil.error("请完善发票信息!");
		}

247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
		String orderNo = qyzxInvoiceData.getOrderNo();
		QyzxBuyRecord qyzxBuyRecord = QyzxBuyRecord.builder().build()
				.selectOne(new LambdaQueryWrapper<QyzxBuyRecord>().eq(QyzxBuyRecord::getOrderNo, orderNo));
		if (qyzxBuyRecord.getInvoiceStatus() != 0) {
			return ResultUtil.error("开票失败,请检查发票状态");
		}
		qyzxInvoiceData.setCreateUser(userBean.getEmpNum());
		qyzxInvoiceData.setOrgCode(userBean.getOrgCode());
		qyzxInvoiceData.insert();

		qyzxBuyRecord.setInvoiceStatus(1);
		qyzxBuyRecord.update(new LambdaUpdateWrapper<QyzxBuyRecord>().eq(QyzxBuyRecord::getOrderNo, orderNo));
		return ResultUtil.data(qyzxInvoiceData, "开票成功");
	}

	@GetMapping(value = "/queryInvoiceDetail")
	@ApiOperation(value = "查询开票详情", httpMethod = "GET", notes = "接口发布说明")
	public Result<QyzxInvoiceData> queryInvoiceDetail(@CurrentUser UserBean userBean, @RequestParam String orderNo) {
		return ResultUtil.data(QyzxInvoiceData.builder().build()
				.selectOne(new LambdaQueryWrapper<QyzxInvoiceData>().eq(QyzxInvoiceData::getOrderNo, orderNo)), "查询成功");
	}

	@GetMapping(value = "/queryMsgRecord")
	@ApiOperation(value = "查询短信套餐余量", httpMethod = "GET", notes = "接口发布说明")
	public Result<List<QyzxRemainingQuantity>> queryMsgRecord(@CurrentUser UserBean userBean) {
		List<QyzxRemainingQuantity> list = QyzxRemainingQuantity.builder().build()
273
				.selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().ne(QyzxRemainingQuantity::getIsDelete, 1)
274 275 276 277 278 279 280 281 282
						.eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode())
						.eq(QyzxRemainingQuantity::getPmid, 1));
		return ResultUtil.data(list, "查询成功");
	}

	@GetMapping(value = "/queryContractRecord")
	@ApiOperation(value = "查询电子合同套餐余量", httpMethod = "GET", notes = "接口发布说明")
	public Result<List<QyzxRemainingQuantity>> queryContractRecord(@CurrentUser UserBean userBean) {
		List<QyzxRemainingQuantity> list = QyzxRemainingQuantity.builder().build()
283
				.selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().ne(QyzxRemainingQuantity::getIsDelete, 1)
284 285 286 287
						.eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode())
						.eq(QyzxRemainingQuantity::getPmid, 2));
		return ResultUtil.data(list, "查询成功");
	}
288

289 290
	@GetMapping(value = "/queryMsgUseRecord")
	@ApiOperation(value = "查询短信使用记录", httpMethod = "GET", notes = "接口发布说明")
291 292 293 294 295 296
	public Result<List<QyzxUseRecord>> queryMsgUseRecord(@CurrentUser UserBean userBean,
			@RequestParam(required = false) String orderNo, @RequestParam(required = false) String startTime,
			@RequestParam(required = false) String endTime, @RequestParam(defaultValue = "1") int pageNum,
			@RequestParam(defaultValue = "10") int pageSize) {
		Page<Object> page = PageHelper.startPage(pageNum, pageSize);
		List<QyzxUseRecord> list = QyzxUseRecord.builder().build()
邓实川 committed
297
				.selectList(new LambdaQueryWrapper<QyzxUseRecord>().eq(QyzxUseRecord::getOrgCode, userBean.getOrgCode())
298 299 300
						.eq(QyzxUseRecord::getPmid, 1)
						.eq(StringUtils.isNotBlank(orderNo), QyzxUseRecord::getOrderNo, orderNo)
						.ge(StringUtils.isNotBlank(startTime), QyzxUseRecord::getCreateTime, startTime)
邓实川 committed
301 302
						.le(StringUtils.isNotBlank(endTime), QyzxUseRecord::getCreateTime, endTime)
						.last("order by create_time desc"));
303
		return ResultUtil.pageData(list, page.getTotal(), "查询成功");
304
	}
305

邓实川 committed
306 307 308 309 310 311 312 313
	@GetMapping(value = "/queryMsgUseDetal/{id}")
	@ApiOperation(value = "查询短信使用详情", httpMethod = "GET", notes = "接口发布说明")
	public Result<QyzxSms> queryMsgUseDetal(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		return ResultUtil.data(
				QyzxSms.builder().build().selectOne(new LambdaQueryWrapper<QyzxSms>().eq(QyzxSms::getUseId, id)),
				"查询成功");
	}

314 315
	// TODO 不同业务使用 不同数据表

316 317
	@GetMapping(value = "/queryContractUseRecord")
	@ApiOperation(value = "查询电子合同套餐使用记录", httpMethod = "GET", notes = "接口发布说明")
318 319 320 321 322
	public Result<Object> queryContractUseRecord(@CurrentUser UserBean userBean, String orderNo) {
		return ResultUtil.data(QyzxUseRecord.builder().build()
				.selectList(new LambdaQueryWrapper<QyzxUseRecord>().eq(QyzxUseRecord::getOrgCode, userBean.getOrgCode())
						.eq(QyzxUseRecord::getPmid, 2).eq(orderNo != null, QyzxUseRecord::getOrderNo, orderNo)),
				"查询成功");
323 324
	}

325 326 327 328 329 330 331 332
	@GetMapping(value = "/queryContractUseDetail")
	@ApiOperation(value = "查询电子合同使用详情(流程结束后)", httpMethod = "GET", notes = "接口发布说明")
	public Result<Object> queryContractUseDetail(@CurrentUser UserBean userBean, String flowId) {
		return ResultUtil.data(DzhtSignflowFinish.builder().build().selectOne(
				new LambdaQueryWrapper<DzhtSignflowFinish>().eq(flowId != null, DzhtSignflowFinish::getFlowId, flowId)),
				"查询成功");
	}

333
}