AdvertiserService.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. package com.cloudcross.ssp.service.impl;
  2. import java.awt.Image;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Calendar;
  9. import java.util.Date;
  10. import java.util.HashMap;
  11. import java.util.HashSet;
  12. import java.util.Iterator;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.Set;
  16. import javax.imageio.ImageIO;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import org.apache.commons.lang.ArrayUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.web.bind.annotation.ResponseBody;
  23. import org.springframework.web.multipart.MultipartFile;
  24. import org.springframework.web.multipart.MultipartHttpServletRequest;
  25. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  26. import com.cloudcross.ssp.model.Advertiser;
  27. import com.cloudcross.ssp.service.IAdGroupService;
  28. import com.cloudcross.ssp.service.IAdvertiserService;
  29. import com.cloudcross.ssp.service.IBannerService;
  30. import com.cloudcross.ssp.service.ICampaignService;
  31. import com.cloudcross.ssp.service.IOrderService;
  32. import com.cloudcross.ssp.base.dao.GenericIBatisDao;
  33. import com.cloudcross.ssp.base.web.SimpleController;
  34. import com.cloudcross.ssp.base.web.result.AjaxResult;
  35. import com.cloudcross.ssp.common.Config;
  36. import com.cloudcross.ssp.common.utils.Assert;
  37. import com.cloudcross.ssp.common.utils.MapBuilder;
  38. import com.cloudcross.ssp.common.utils.Pager;
  39. import com.cloudcross.ssp.common.utils.SqlHelper;
  40. import com.cloudcross.ssp.web.widget.SelectorController.ISelector;
  41. import com.cloudcross.ssp.web.widget.SelectorController.ISelectorProvider;
  42. @Service
  43. public class AdvertiserService implements IAdvertiserService, ISelectorProvider{
  44. @Autowired
  45. private GenericIBatisDao myBatisDao;
  46. @Autowired
  47. private IOrderService orderService;
  48. @Autowired
  49. private ICampaignService campaignService;
  50. @Autowired
  51. private IAdGroupService adGroupService;
  52. @Autowired
  53. private IBannerService bannerService;
  54. @Autowired
  55. Config config;
  56. /****************************************************************************/
  57. //文件系统可上传的文件后缀集合
  58. private static Set<String> noStuffixSet = new HashSet<String>();
  59. //初始化可上传文件后缀
  60. static {
  61. noStuffixSet.add("jpg");
  62. noStuffixSet.add("png");
  63. noStuffixSet.add("pdf");
  64. noStuffixSet.add("doc");
  65. noStuffixSet.add("docx");
  66. noStuffixSet.add("xlsx");
  67. noStuffixSet.add("xls");
  68. }
  69. /****************************************************************************/
  70. @Override
  71. public Advertiser findById(Long id) {
  72. return myBatisDao.get("advertiserSqlMapper.selectById", id);
  73. }
  74. @Override
  75. public long findByName(String name) {
  76. return myBatisDao.get("advertiserSqlMapper.selectByName", name);
  77. }
  78. @Override
  79. public int countByParams(Map<String, Object> paramMap) {
  80. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  81. paramMap.put("value", searchValue);
  82. return myBatisDao.get("advertiserSqlMapper.countByParams", paramMap);
  83. }
  84. public int countByParamsOperator(Map<String, Object> paramMap) {
  85. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  86. paramMap.put("key", paramMap.get("searchKey"));
  87. paramMap.put("value", searchValue);
  88. return myBatisDao.get("advertiserSqlMapper.countByParamsoperator", paramMap);
  89. }
  90. @Override
  91. public List<Advertiser> findByParams(Map<String, Object> paramMap,Pager pager) {
  92. //根据广告主的名字模糊查询
  93. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  94. //paramMap.put("key", paramMap.get("searchKey"));
  95. paramMap.put("value", searchValue);
  96. paramMap.put("pager", pager);
  97. return myBatisDao.getList("advertiserSqlMapper.selectByParams", paramMap);
  98. }
  99. public List<Advertiser> findByParamsBack(Map<String, Object> paramMap,
  100. Pager pager) {
  101. // TODO Auto-generated method stub
  102. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  103. paramMap.put("key", paramMap.get("searchKey"));
  104. paramMap.put("value", searchValue);
  105. paramMap.put("pager", pager);
  106. return myBatisDao.getList("advertiserSqlMapper.selectByParamsback", paramMap);
  107. }
  108. public List<Advertiser> findByParamsOperator(Map<String, Object> paramMap,
  109. Pager pager) {
  110. // TODO Auto-generated method stub
  111. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  112. paramMap.put("key", paramMap.get("searchKey"));
  113. paramMap.put("value", searchValue);
  114. paramMap.put("pager", pager);
  115. return myBatisDao.getList("advertiserSqlMapper.selectByParamsoperator", paramMap);
  116. }
  117. public List<Advertiser> findByOperator(Long operatorId){
  118. //通过 操作人的 Id 来查找其对应的广告主
  119. return myBatisDao.getList("selectByOperatoradvertiser", operatorId);
  120. }
  121. public List<Advertiser> findByOperatorOperator(Long operatorId){
  122. //通过 操作人的 Id 来查找其对应的广告主
  123. return myBatisDao.getList("advertiserSqlMapper.selectByOperatoroperator", operatorId);
  124. }
  125. @Override
  126. public boolean add(Advertiser t) {
  127. t.setUpdated(new Date());
  128. t.setAdminId(0L);//和权限相关,保存代理商给广告主分配的账号ID,添加时默认为0L
  129. myBatisDao.save("advertiserSqlMapper.addAdvertiser", t);
  130. return true;
  131. }
  132. public boolean addBack(Advertiser t) {
  133. // TODO Auto-generated method stub
  134. //————————————————————————————这个地方要注意一点,operator_id并没有插进去!后面需要做完善的!——————————————————————————————————————————
  135. t.setUpdated(new Date());
  136. // t.setIndustryId(new Long(1));//由于下拉框的功能还没有完善,测试用。
  137. myBatisDao.save("advertiserSqlMapper.addAdvertiserback", t);
  138. return true;
  139. }
  140. public boolean editOperator(Advertiser t) {
  141. // TODO Auto-generated method stub
  142. t.setUpdated(new Date());
  143. myBatisDao.save("advertiserSqlMapper.addAdvertiseroperator", t);
  144. return true;
  145. }
  146. @Override
  147. public boolean edit(Advertiser t) {
  148. t.setUpdated(new Date());
  149. myBatisDao.save("advertiserSqlMapper.editAdvertiser", t);
  150. return true;
  151. }
  152. public boolean editBack(Advertiser t) {
  153. // TODO Auto-generated method stub
  154. t.setUpdated(new Date());
  155. myBatisDao.save("advertiserSqlMapper.editAdvertiserback", t);
  156. return true;
  157. }
  158. @Override
  159. public boolean updateStatus(List<Long> advertiserIdList, int status) {
  160. // TODO Auto-generated method stub
  161. myBatisDao.save("advertiserSqlMapper.updateAdvertiserStatus",
  162. MapBuilder.create(HashMap.class)
  163. .add("advertiserIdList", advertiserIdList)
  164. .add("modifyDate", new Date())
  165. .add("status", status).map());
  166. return true;
  167. }
  168. @Override
  169. public boolean updateSupdated(List<Long> advertiserIdList, int status) {
  170. myBatisDao.save("advertiserSqlMapper.updateSupdated",
  171. MapBuilder.create(HashMap.class)
  172. .add("advertiserIdList", advertiserIdList)
  173. .add("modifyDate", new Date())
  174. .add("status", status).map());
  175. return true;
  176. }
  177. @Override
  178. public Map<String, List<? extends ISelector>> provideData(String[] parentId) {
  179. // TODO Auto-generated method stub
  180. Assert.isTrue(ArrayUtils.isNotEmpty(parentId));
  181. String operaterId = parentId[0];
  182. List<Advertiser> advertiserList = findByAgentId(Long.parseLong(operaterId));
  183. return MapBuilder.create(HashMap.class).add("advertiserList", advertiserList)
  184. .map();
  185. }
  186. @Override
  187. public int countByStatus(Map<String, Object> paramMap) {
  188. // TODO Auto-generated method stub
  189. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  190. paramMap.put("key", paramMap.get("searchKey"));
  191. paramMap.put("value", searchValue);
  192. return myBatisDao.get("advertiserSqlMapper.countByStatus", paramMap);
  193. }
  194. @Override
  195. public List<Advertiser> findByStatus(Map<String, Object> paramMap) {
  196. // TODO Auto-generated method stub
  197. String searchValue = SqlHelper.doLike(paramMap.get("searchValue"));
  198. paramMap.put("key", paramMap.get("searchKey"));
  199. paramMap.put("value", searchValue);
  200. return myBatisDao.getList("advertiserSqlMapper.selectByStatus", paramMap);
  201. }
  202. @Override
  203. public List<Advertiser> findByAgentId(Long id) {
  204. // TODO Auto-generated method stub
  205. return myBatisDao.getList("advertiserSqlMapper.selectByAgentId", id);
  206. }
  207. @Override
  208. public List<Advertiser> findDeliverEffectAnalysis(
  209. Map<String, Object> paramMap) {
  210. return myBatisDao.getList("advertiserSqlMapper.findDeliverEffectAnalysis", paramMap);
  211. }
  212. /****************************************************************************/
  213. public @ResponseBody AjaxResult fileUpload(HttpServletRequest request,HttpServletResponse response) {
  214. Map<String,String>map = new HashMap<String,String>();
  215. AjaxResult result = new AjaxResult();
  216. try {
  217. // 创建一个通用的多部分解析器
  218. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
  219. // 判断 request 是否有文件上传,即多部分请求
  220. if (multipartResolver.isMultipart(request)) {
  221. // 转换成多部分request
  222. MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
  223. // 取得request中的所有文件名
  224. Iterator<String> iter = multiRequest.getFileNames();
  225. // 取得上传文件
  226. MultipartFile file = multiRequest.getFile(iter.next());
  227. if (file != null && file.getSize() >= 0) {
  228. if (file.getSize() > 32505856) {
  229. result.setStatus(SimpleController.ERROR);
  230. result.setMsg("上传文件过大!");
  231. return result;
  232. }
  233. // 取得当前上传文件的文件名称
  234. String myFileName = file.getOriginalFilename();
  235. // 获取文件后缀
  236. String filetype = myFileName.substring(myFileName.lastIndexOf(".") + 1);
  237. // 如果所属后缀为不可上传后缀,则返回
  238. if (!noStuffixSet.contains(filetype)) {
  239. result.setStatus(SimpleController.ERROR);
  240. result.setMsg("文件类型不支持!");
  241. return result;
  242. }
  243. String fileId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
  244. String folder = getFilePath(request);
  245. String path = folder+File.separator+fileId+"."+filetype;
  246. String smallName = fileId+"_small"+"."+filetype;
  247. String smallPath = folder+File.separator+smallName;
  248. File distFile = new File(path);
  249. if (!distFile.getParentFile().exists()){
  250. distFile.getParentFile().mkdirs();
  251. }
  252. file.transferTo(distFile);
  253. smallPicture(distFile,smallPath,smallName);
  254. String str = path.substring(path.indexOf("upload")-1)+","+smallPath.substring(path.indexOf("upload")-1);
  255. result.setStatus(SimpleController.OK);
  256. result.addData("url", str);
  257. } else {
  258. result.setStatus(SimpleController.ERROR);
  259. result.setMsg("上传文件不能为空!");
  260. return result;
  261. }
  262. }
  263. } catch (Exception e) {
  264. result.setStatus(SimpleController.ERROR);
  265. result.setMsg("上传文件出现异常!");
  266. return result;
  267. }
  268. return result;
  269. }
  270. //生成缩略图
  271. public void smallPicture(File sourceFile,String pathSmall,String uploadName) throws IOException{
  272. //新建缩略图文件
  273. File smallFile = new File(pathSmall);
  274. if (!smallFile.getParentFile().exists()){
  275. smallFile.getParentFile().mkdirs();
  276. }
  277. //构造image图片
  278. Image src = javax.imageio.ImageIO.read(sourceFile);
  279. //表示该图像具有打包成整数的像素的8 位RGB颜色分量
  280. BufferedImage tag = new BufferedImage(150, 60, BufferedImage.TYPE_INT_BGR);
  281. //h绘制缩小后的图片
  282. tag.getGraphics().drawImage(src, 0, 0, 150, 60, null);
  283. //生成缩略图
  284. ImageIO.write(tag, "jpg", smallFile);
  285. }
  286. private String getFilePath(HttpServletRequest request){
  287. // 获取当前上传的年月日
  288. Calendar cal = Calendar.getInstance();
  289. // 当前年
  290. int year = cal.get(Calendar.YEAR);
  291. // 当前月
  292. int month = cal.get(Calendar.MONTH) + 1;
  293. // 当前日
  294. int day = cal.get(Calendar.DATE);
  295. //获取文件上传目录
  296. //获取项目目录
  297. String realPath = request.getSession().getServletContext().getRealPath("/");
  298. //获取项目的同级目录
  299. String root = new File(realPath).getParentFile().getAbsolutePath();
  300. //到配置文件中获取文件存放的目录
  301. String upload = config.getResourceUploadDir();
  302. String path = root+File.separator+upload+File.separator+"advertiser"+File.separator+year + File.separator + month + File.separator + day;
  303. return path;
  304. }
  305. @Override
  306. public String selectAdvertiserNameById(Long id) {
  307. // TODO Auto-generated method stub
  308. return myBatisDao.get("advertiserSqlMapper.selectAdvertiserNameById", id);
  309. }
  310. /**
  311. * 创建人:周俊
  312. * 创建时间:2015.10.19 16.35
  313. * 修改广告主的状态,更新他的所有创意,投放的supdate位系统当前时间
  314. */
  315. @Override
  316. public boolean updateSupdatedAll(List<Long> advertiserIdList, Date date) {
  317. List<Long>list = new ArrayList<Long>();
  318. //更新广告主的所有投放的supdate
  319. Boolean adGroupFlag = this.adGroupService.updateSupdatedByAdvertiserId(advertiserIdList, date);
  320. for(Long l:advertiserIdList){
  321. list.addAll(adGroupService.findAllAdGroudByAdvertiserId(l));
  322. }
  323. Boolean bannerFlag = false;
  324. if(list.size()>0){
  325. bannerFlag = this.bannerService.updateSupdated(list, date);
  326. }else{
  327. bannerFlag = true;
  328. System.out.println("投放下没有创意");
  329. }
  330. return adGroupFlag&&bannerFlag;
  331. }
  332. @Override
  333. public boolean updateStatusAll(List<Long> advertiserIdList, int status) {
  334. List<Long>list = new ArrayList<Long>();
  335. Boolean advertiserFlag = updateStatus(advertiserIdList, status);
  336. Boolean orderFlag = this.orderService.updateStatusByAdvertiserId(advertiserIdList,status);
  337. Boolean campaignFlag = this.campaignService.updateStatusByAdvertiserId(advertiserIdList, status);
  338. Boolean adGroupFlag = this.adGroupService.updateStatusByAdvertiserId(advertiserIdList, status);
  339. for(Long l:advertiserIdList){
  340. list.addAll(adGroupService.findAllAdGroudByAdvertiserId(l));
  341. }
  342. Boolean bannerFlag = false;
  343. if(list.size()>0){
  344. bannerFlag = this.bannerService.updateStatusByAdGroupId(list, status);
  345. }else{
  346. System.out.println("改投放下没有创意");
  347. bannerFlag = true;
  348. }
  349. return advertiserFlag&&orderFlag&&campaignFlag&&adGroupFlag&&bannerFlag;
  350. }
  351. }