package com.jilongda.manage.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.jilongda.common.Ticket.TAddOptometryVO; import com.jilongda.common.Ticket.TOptometryDetailVO; import com.jilongda.common.Ticket.TOrderGoodsPrintVO; import com.jilongda.common.Ticket.TicketUtil; import com.jilongda.common.basic.ApiResult; import com.jilongda.common.basic.PageInfo; import com.jilongda.manage.authority.model.SecUser; import com.jilongda.manage.authority.service.SecUserService; import com.jilongda.manage.dto.TOrderDTO; import com.jilongda.manage.model.*; import com.jilongda.manage.query.TModelQuery; import com.jilongda.manage.query.TOptometryQuery; import com.jilongda.manage.query.TOrderQuery; import com.jilongda.manage.service.*; import com.jilongda.manage.utils.LoginInfoUtil; import com.jilongda.manage.utils.OssUploadUtil; import com.jilongda.manage.vo.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** *

* 销售订单表 前端控制器 *

* * @author 无关风月 * @since 2024-12-09 */ @Api(tags = "销售订单") @RestController @RequestMapping("/t-order") public class TOrderController { @Autowired private TAppUserService tAppUserService; @Autowired private SecUserService secUserService; @Autowired private TCouponReceiveService couponReceiveService; @Autowired private TCouponService couponService; @Autowired private TOrderService orderService; @Autowired private TOptometryDetailService optometryDetailService; @Autowired private TOrderGoodsService orderGoodsService; @Autowired private TFrameGoodsService frameGoodsService; @Autowired private TLensGoodsService lensGoodsService; @Autowired private TModelService modelService; @Autowired private TLensSeriesService lensSeriesService; @Autowired private TBrandService brandService; @Autowired private TOptometryService optometryService; @Autowired private TWarehousingService warehousingService; @Autowired private TLensWarehousingDetailService lensWarehousingDetailService; @Autowired private TFrameWarehousingDetailService frameWarehousingDetailService; @Autowired private TSupplierService supplierService; @Autowired private TMaterialService materialService; @Autowired private TLineUpService lineUpService; @PostMapping("/obs-upload") @ApiOperation(value = "文件上传",tags = "管理后台-文件上传") public ApiResult uploadOSS(@RequestPart("file") MultipartFile file) { try { // 上传并返回访问地址 String fileName = file.getOriginalFilename(); String prefix = fileName.substring(fileName.lastIndexOf(".")); long fileSize = file.getSize(); String url = OssUploadUtil.ossUpload("eyes/",file); return ApiResult.success(url); } catch (Exception e) { System.err.println("上传文件失败"+e); return ApiResult.failed(e.getMessage()); } } @ApiOperation(value = "销售订单分页列表") @PostMapping(value = "/pageList") public ApiResult> pageList(@RequestBody TOrderQuery query) { if (StringUtils.hasLength(query.getStartTime())){ query.setStartTime(query.getStartTime()+" 00:00:00"); query.setEndTime(query.getEndTime()+" 23:59:59"); } List orderIds = new ArrayList<>(); // List collect = tAppUserService.lambdaQuery() // .eq(StringUtils.hasLength(query.getWxName()), TAppUser::getName, query.getWxName()) // .eq(StringUtils.hasLength(query.getPhone()), TAppUser::getName, query.getPhone()).list() // .stream().map(TAppUser::getId).collect(Collectors.toList()); // if (StringUtils.hasLength(query.getWxName())||StringUtils.hasLength(query.getPhone())){ // query.setUserIds(collect); // if (collect.isEmpty())return ApiResult.success(new PageInfo<>()); // } List collect1 = orderGoodsService.lambdaQuery() .eq(StringUtils.hasLength(query.getBrandLens()), TOrderGoods::getBrandName, query.getBrandLens()) .eq(StringUtils.hasLength(query.getSeries()), TOrderGoods::getSeriesName, query.getSeries()) .eq(query.getType() != null, TOrderGoods::getType, query.getType()) .eq(StringUtils.hasLength(query.getRefractiveIndex()), TOrderGoods::getRefractiveIndex, query.getRefractiveIndex()).list() .stream().map(TOrderGoods::getOrderId).collect(Collectors.toList()); if (StringUtils.hasLength(query.getBrandLens())||StringUtils.hasLength(query.getSeries())||query.getType() != null|| StringUtils.hasLength(query.getRefractiveIndex())){ orderIds.addAll(collect1); } List collect2 = orderGoodsService.lambdaQuery() .eq(StringUtils.hasLength(query.getBrandFrame()), TOrderGoods::getBrandName, query.getBrandFrame()) .eq(StringUtils.hasLength(query.getModelName()), TOrderGoods::getModelName, query.getModelName()) .eq(StringUtils.hasLength(query.getColor()), TOrderGoods::getColor, query.getColor()).list() .stream().map(TOrderGoods::getOrderId).collect(Collectors.toList()); if (StringUtils.hasLength(query.getBrandFrame())||StringUtils.hasLength(query.getModelName())|| StringUtils.hasLength(query.getColor())){ orderIds.addAll(collect2); } if (StringUtils.hasLength(query.getBrandFrame())||StringUtils.hasLength(query.getModelName())|| StringUtils.hasLength(query.getColor())||StringUtils.hasLength(query.getBrandLens())||StringUtils.hasLength(query.getSeries())||query.getType() != null|| StringUtils.hasLength(query.getRefractiveIndex())){ if (orderIds.isEmpty())return ApiResult.success(new PageInfo<>()); } return ApiResult.success(orderService.pageList(query)); } @ApiOperation(value = "查询用户信息") @GetMapping(value = "/getUserById") public ApiResult getUserById(@RequestParam Integer userId) { return ApiResult.success(tAppUserService.getById(userId)); } @ApiOperation(value = "查询员工信息") @GetMapping(value = "/getStaffList") public ApiResult getStaffList() { List list = secUserService.list(Wrappers.lambdaQuery(SecUser.class) .eq(SecUser::getUserType, 3) .eq(SecUser::getIsDelete, 0)); return ApiResult.success(list); } @ApiOperation(value = "查询优惠券") @GetMapping(value = "/getCouponListByUserId") public ApiResult> getCouponListByUserId(@RequestParam Integer userId, @RequestParam Integer storeId) { List list = couponReceiveService.list(Wrappers.lambdaQuery(TCouponReceive.class) .eq(TCouponReceive::getUserId, userId) .eq(TCouponReceive::getStatus, 1)); List tCouponReceives = new ArrayList<>(); for (TCouponReceive tCouponReceive : list) { TCoupon byId = couponService.getById(tCouponReceive.getCouponId()); tCouponReceive.setCouponName(byId.getName()); if (StringUtils.hasLength(tCouponReceive.getStoreId())){ if (Arrays.asList(tCouponReceive.getStoreId().split(",")).contains(storeId+"")){ tCouponReceives.add(tCouponReceive); } }else{ // 通用 tCouponReceives.add(tCouponReceive); } } return ApiResult.success(tCouponReceives); } @Autowired private TTicketService tTicketService; @Autowired private TStoreService storeService; @ApiOperation(value = "添加订单") @PostMapping(value = "/addOrder") public ApiResult addOrder(@RequestBody TOrderDTO dto) { // 查询店员 SecUser user = secUserService.getById(dto.getSysId()); if(Objects.nonNull(user)){ dto.setStoreId(user.getStoreId()); } if (dto.getUserId()!=null){ TAppUser byId = tAppUserService.getById(dto.getUserId()); dto.setName(byId.getName()); dto.setPhone(byId.getPhone()); } orderService.save(dto); List orderGoods = dto.getOrderGoods(); List tLensGoods = new ArrayList<>(); List tFrameGoods = new ArrayList<>(); for (TOrderGoods orderGood : orderGoods) { orderGood.setOrderId(dto.getId()); if (StringUtils.hasLength(orderGood.getSeriesName())){ // 镜片 orderGood.setRLens(orderGood.getRightLens()); orderGood.setLLens(orderGood.getLeftLens()); String rLens = orderGood.getRLens(); String[] split = null; if(StringUtils.hasLength(rLens)){ split = rLens.split(","); if (split.length == 1){ } }else { split = orderGood.getLLens().split(","); } // TBrand brand = brandService.lambdaQuery().eq(TBrand::getName, orderGood.getBrandName()) // .eq(TBrand::getType, 2).one(); TLensSeries lensSeries = lensSeriesService.lambdaQuery() .eq(TLensSeries::getId, orderGood.getSeriesId()) .one(); TLensGoods one = lensGoodsService.lambdaQuery() .eq(StringUtils.hasLength(orderGood.getSeriesName()),TLensGoods::getSeriesId, lensSeries.getId()) .eq(StringUtils.hasLength(orderGood.getRefractiveIndex()),TLensGoods::getRefractiveIndex, orderGood.getRefractiveIndex()) .eq(orderGood.getType()!=null,TLensGoods::getLensType, orderGood.getType()) .eq(split.length>0,TLensGoods::getBallMirror, split[0]) .eq(split.length>=2,TLensGoods::getColumnMirror, split[1]) .one(); if (one!=null){ if (one.getTotal()-1<0 && lensSeries.getType()==1 ){ if (StringUtils.hasLength(orderGood.getRightLens())){ orderService.removeById(dto); return ApiResult.failed("镜片(R)库存不足,请重新选择"); }else{ orderService.removeById(dto); return ApiResult.failed("镜片(L)库存不足,请重新选择"); } } // 减少对应库存 one.setTotal(one.getTotal()-1); tLensGoods.add(one); // 生成销售订单主表 TWarehousing tWarehousing = new TWarehousing(); tWarehousing.setStatus(5); tWarehousing.setType(2); tWarehousing.setStoreId(dto.getStoreId()); tWarehousing.setRemark("销售订单-镜片"); tWarehousing.setOrderNum(dto.getId()+""); warehousingService.save(tWarehousing); // 生成明细记录 TLensWarehousingDetail tLensWarehousingDetail = new TLensWarehousingDetail(); tLensWarehousingDetail.setBrand(orderGood.getBrandName()); TSupplier supplier = supplierService.getById(lensSeries.getSupplierId()); if (supplier!=null){ tLensWarehousingDetail.setSupplier(supplier.getName()); } tLensWarehousingDetail.setSeries(lensSeries.getName()); tLensWarehousingDetail.setRefractiveIndex(orderGood.getRefractiveIndex()); if (StringUtils.hasLength(orderGood.getLLens())){ tLensWarehousingDetail.setBallMirror(orderGood.getLLens().split(",")[0]); tLensWarehousingDetail.setColumnMirror(orderGood.getLLens().split(",")[0]); } if (StringUtils.hasLength(orderGood.getRLens())){ tLensWarehousingDetail.setBallMirror(orderGood.getRLens().split(",")[0]); tLensWarehousingDetail.setColumnMirror(orderGood.getRLens().split(",")[0]); } tLensWarehousingDetail.setType(orderGood.getType()); tLensWarehousingDetail.setTotal(1); tLensWarehousingDetail.setSeriesId(lensSeries.getId()); tLensWarehousingDetail.setWarehousingId(tWarehousing.getId()); tLensWarehousingDetail.setOrderId(dto.getId()); lensWarehousingDetailService.save(tLensWarehousingDetail); }else { if (lensSeries.getType()==1){ orderService.removeById(dto); return ApiResult.failed("商品库存不足"); } } }else{ TModel one1 = modelService.lambdaQuery() .eq(TModel::getId, orderGood.getModelId()).one(); BigDecimal cost = one1.getCost(); orderGood.setCost(cost); TFrameGoods one = frameGoodsService.lambdaQuery() .eq(TFrameGoods::getModelId, one1.getId()) .eq(TFrameGoods::getColor, orderGood.getColor()).one(); if (one!=null){ if (one.getTotal()-1<0){ orderService.removeById(dto); return ApiResult.failed("镜架库存不足,请重新选择"); } // 增加对应库存 one.setTotal(one.getTotal()-1); tFrameGoods.add(one); // 生成销售订单主表 TWarehousing tWarehousing = new TWarehousing(); tWarehousing.setStatus(5); tWarehousing.setType(1); tWarehousing.setStoreId(dto.getStoreId()); tWarehousing.setRemark("销售订单-镜架"); tWarehousing.setOrderNum(dto.getId()+""); warehousingService.save(tWarehousing); // 生成明细记录 TBrand brand = brandService.getById(one1.getBrandId()); TFrameWarehousingDetail tFrameWarehousingDetail = new TFrameWarehousingDetail(); tFrameWarehousingDetail.setWarehousingId(tWarehousing.getId()); if (brand!=null){ tFrameWarehousingDetail.setBrand(brand.getName()); } TSupplier supplier = supplierService.getById(one1.getSupplierId()); if (supplier!=null){ tFrameWarehousingDetail.setSupplier(supplier.getName()); } TMaterial material = materialService.getById(one1.getMaterialId()); if (material!=null){ tFrameWarehousingDetail.setMaterial(material.getName()); } tFrameWarehousingDetail.setTotal(1); tFrameWarehousingDetail.setColor(orderGood.getColor()); tFrameWarehousingDetail.setModel(one1.getName()); tFrameWarehousingDetail.setModelId(one1.getId()); tFrameWarehousingDetail.setOrderId(dto.getId()); frameWarehousingDetailService.save(tFrameWarehousingDetail); }else{ orderService.removeById(dto); return ApiResult.failed("镜架库存不足,请重新选择"); } } } if (dto.getUserId()!=null){ if (dto.getCouponId()!=null){ TCouponReceive couponReceive = couponReceiveService.getById(dto.getCouponId()); if (couponReceive==null){ orderService.removeById(dto); return ApiResult.failed("优惠券不存在"); } List couponReceives = couponReceiveService.lambdaQuery() .eq(TCouponReceive::getUserId, dto.getUserId()) .eq(TCouponReceive::getCouponId, couponReceive.getCouponId()) .orderByDesc(TCouponReceive::getCreateTime).list(); if (couponReceives.isEmpty()){ orderService.removeById(dto); return ApiResult.failed("优惠券不存在"); } TCouponReceive tCouponReceive = couponReceives.get(0); tCouponReceive.setStatus(2); tCouponReceive.setUseTime(LocalDateTime.now()); couponReceiveService.updateById(tCouponReceive); } } List optometryDetails = dto.getOptometryDetails(); if (!CollectionUtils.isEmpty(optometryDetails)){ int temp =0; if (dto.getUserId()!=null){ TOptometry optometry = new TOptometry(); long count = lineUpService.count(Wrappers.lambdaQuery(TLineUp.class) .eq(TLineUp::getStoreId, dto.getStoreId())); optometry.setCode(""+(count+1)); optometry.setUserId(dto.getUserId()); optometry.setAge(dto.getAge()); optometry.setGender(dto.getGender()); optometry.setRealName(dto.getRealName()); optometry.setPhone(dto.getPhone()); optometry.setStoreId(dto.getStoreId()); optometry.setStatus(3); optometryService.save(optometry); temp = optometry.getId(); } for (TOptometryDetail optometryDetail : optometryDetails) { optometryDetail.setOrderId(dto.getId()); if (dto.getUserId()!=null){ optometryDetail.setOptometryId(temp); } } optometryDetailService.saveBatch(optometryDetails); } orderGoodsService.saveBatch(orderGoods); lensGoodsService.updateBatchById(tLensGoods); frameGoodsService.updateBatchById(tFrameGoods); TAddOptometryVO tAddOptometryVO = new TAddOptometryVO(); TTicket tTicket = tTicketService.lambdaQuery().eq(TTicket::getStoreId, dto.getStoreId()) .eq(TTicket::getType,2) .eq(TTicket::getStatus, 1).list().stream().findFirst().orElse(null); if (tTicket==null){ orderService.removeById(dto); return ApiResult.failed("当前门店未绑定小票机"); } tAddOptometryVO.setSn(tTicket.getCloudId()+""); tAddOptometryVO.setPhone(dto.getPhone()); List orderGoods1 = dto.getOrderGoods(); ArrayList tOrderGoodsPrintVOS = new ArrayList<>(); for (TOrderGoods orderGood : orderGoods1) { TOrderGoodsPrintVO tOrderGoodsPrintVO = new TOrderGoodsPrintVO(); BeanUtils.copyProperties(orderGood,tOrderGoodsPrintVO); if (orderGood.getModelId()!=null){ TModel byId = modelService.getById(orderGood.getModelId()); if (byId!=null){ TMaterial byId1 = materialService.getById(byId.getMaterialId()); if (byId1!=null){ tOrderGoodsPrintVO.setMaterial(byId1.getName()); } } } tOrderGoodsPrintVOS.add(tOrderGoodsPrintVO); } tAddOptometryVO.setOrderGoods(tOrderGoodsPrintVOS); tAddOptometryVO.setRemark(dto.getRemark()); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = simpleDateFormat.format(new Date()); tAddOptometryVO.setTime(format); tAddOptometryVO.setMachiningCode(dto.getMachiningCode()); List tOptometryDetailVOS = new ArrayList<>(); for (TOptometryDetail optometryDetail : dto.getOptometryDetails()) { TOptometryDetailVO tOptometryDetailVO = new TOptometryDetailVO(); BeanUtils.copyProperties(optometryDetail,tOptometryDetailVO); tOptometryDetailVOS.add(tOptometryDetailVO); } tAddOptometryVO.setOptometryDetailVOS(tOptometryDetailVOS); tAddOptometryVO.setShopName(storeService.getById(dto.getStoreId()).getName()); System.err.println("加工单数据"); System.err.println(tAddOptometryVO); if (dto.getIsMachining()==1){ // 打印加工单 TicketUtil.printMatch(tAddOptometryVO); } return ApiResult.success(dto.getId()); } @ApiOperation(value = "销售订单详情") @GetMapping(value = "/getOrderDetailById") public ApiResult getOrderDetailById(@RequestParam Integer orderId) { TOrder byId = orderService.getById(orderId); TOrderVO orderVO = orderService.getOrderDetailById(orderId); List list = orderGoodsService.lambdaQuery().eq(TOrderGoods::getOrderId, orderId).list(); orderVO.setOrderGoods(list); if (byId.getOptometryId()!=null){ // 选择验光单 List list1 = optometryDetailService.lambdaQuery().eq(TOptometryDetail::getOptometryId, byId.getOptometryId()).list(); orderVO.setOptometryDetails(list1); }else{ // 手动填写验光单 List list1 = optometryDetailService.lambdaQuery().eq(TOptometryDetail::getOrderId, orderId).list(); orderVO.setOptometryDetails(list1); } return ApiResult.success(orderVO); } }